对于许多数据库管理员来说Oracle究竟是不是一个难以管理和驾驭的怪兽级数据库会不会让他们管理生涯饱受折磨?当看到其命令行界面时很多人会问这么一个问题如果你想通过一个应用程序操控使用这个数据库那么你应当是一名终端用户;因此对这类人而言界面越透明当然越好而命令行界面显然不够理想而如果你想成为精通数据库的技术员成为排除数据库故障的检修员成为当大家碰到数据库难题时会向他求助的万能先生的话你就不能嫌髒怕累而要不辞劳苦地深入了解数据库的结构和机理这样你才能知道数据库到底怎么运作发生了什么问题命令行界面正是你需要适应并了解的东西
为什么要手动创建数据库?
创建数据库也应该是你要深入了解的内容之一当然Oracle本身提供有图形用户界面工具可以帮助用户出色地完成这项任务但是如果失败了呢?如果你在创建的过程中出现了警告或错误信息呢?这时候你应当怎么办?你是否想知道在这些信息背后到底是哪里出了问题?你是否想要更进一步了解Oracle在数据库创建的过程中到底是怎么变的戏法吗?来手动创建一次数据库相信就能为你阐明一切
当你手动创建一个数据库时你就要在sqlplus提示符下输入指令通常情况下你需要将这些指令添加到一个sql脚本随后从sqlplus调用这个脚本假设所有的路径和选项都正确设定的大小可用而且在数据库创建过程中没有达到容量的极限的话那么整个创建过程应当顺利运行而且如果你开发了一个想要部署到Oracle数据库商的应用程序你的应用程序也可以提供一份数据库创建脚本按照你设定的方式来运行
什么时候使用手动方法创建数据库?
显然当你第一次学习Oracle时你应当使用手动方法来创建数据库一旦你完全理解其中的奥妙你就可以考虑使用图形用户界面来简化你的工作不过如果你想控制文件的命名规范建议你还是坚持使用手动方法此外当有新版本的Oracle数据库发布时一定要通过手动方法检查一下有什么新选项添加到了创建数据库的语法当中那如果你要创建一大堆特征相似的数据库呢?这种时候手动创建的方法更具有吸引力因为这样能够减少我们的工作量
如何手动创建数据库
首先我们把我们要创建的数据命名为DBJ接着至少你得给DBJ设置ORACLE_SID环境变量编辑initDBJora添加如下脚本
db_name=DBJ
然后启动sqlplus发布如下指令
SQL> startup nomount;
SQL> create database;
Oracle会为所需要的所有参数设置一些默认值例如应当将数据文件控制文件放在哪里分配多少内存等然后启动实例不挂载任何文件创建数据库指令(create database)将要求Oracle创建一个数据库这个数据库带有最小系统和sysaux表空间等默认设置
不过现实中我们可能想要指定很多其他的选项下面我们来看看现实中创建Oracle数据库脚本更真实的例子
connect / as sysdba;
startup nomount;
CREATE DATABASE dbj
DATAFILE
/u/oradata/sysdbjdbf size M
SYSAUX DATAFILE
/u/oradata/auxdbjdbf size M
UNDO TABLESPACE dbjundo DATAFILE
/u/oradata/unddbjdbf size M
LOGFILE
/u/oradata/rdodbjdbf size M
/u/oradata/rdodbjdbf size M
CHARACTER SET WEISOP
NATIONAL CHARACTER SET UTF
EXTENT MANAGEMENT LOCAL
DEFAULT TEMPORARY TABLESPACE mytemp TEMPFILE
/u/oradata/tmpdbjdbf SIZE M
NOARCHIVELOG
MAXDATAFILES
MAXLOGFILES ;
# create the rest of the data dictionary
@?/rdbms/admin/catalogsql
@?/rdbms/admin/catprocsql
详解创建的各阶段
当我们发布startup nomount的指令时我们是让Oracle以一种不同于平常使用的方式启动不同在哪里呢?我们让Oracle其实我们让Oracle只启动实例而不安装数据库也不打开数据库并启动所有的后台进程并为系统全局区域(SGA)分配内存为什么不启动数据库?因为在现阶段我们还没有一个可以挂载的数据库也就是以一个有效形式存在的数据文件集合
当我们发出create database指令的时候Oracle将创建系统表空间sysaux表空间undo表空间和临时表空间并为该数据库设置字符集也就是设置数据文件的头信息表明我们想要创建本地管理表空间还有就是设置归档或非归档模式一旦这些都完成了Oracle就会运行一个名为sqlbsq的神奇文件建议大家看看这个文件的内容会很有趣且很有用这是Oracle的自举代码(bootstrapping code)可以供我们查看并了解其中内容我们可以在$ORACLE_HOME/rdbms/adminsqlbsq目录中找到这个sqlbsq文件注意这个文件会随着版本的不同而有所改变所以定期查看一下其中的变化很能说明一些问题
这个运行之后就是创建Oracle数据字典了catalogsql和catprocsql只是在真正的数据字典上创建有用的视图以及每个Oracle数据库都需要有的各种存储过程包和函数
结论
手动创建数据库并不是一件只和命令行打交道的乏味单调的苦差事它可以很有趣也可以很有意义深入了解Oracle数据库创建的过程有助于你理解数据库的内部运作原理让我们可以了解构成每个Oracle数据库方方面面的元素在这个过程中我们可以了解更多关于initoraOracle所倚赖的自举脚本数据字典的创建机制以及实例和数据库之间的区别等等重要的知识