Create Database using Create Database SQL Command

创建ORACLE数据库有几种比较常用的方法:
1. 图形界面下使用DBCA,可以选择使用模板或者自定义(自定义需要执行创建数据字典和存储过程的过程,而模板的话是使用DBMS包作恢复的安装。所以速度上差别比较大)
2. 命令行的DBCA与responseFile
3. Create Database SQL命令,然后执行创建数据字典和存储过程,所以速度会略微慢点。
据David说考OCM的话考的是CREATE DATABASE SQL建库的过程。一般情况下DBA可能为了图快使用的都是DBCA和模板的方法来建库的。对于create database 命令可能会比较生疏。
今天刚好在上海上OCM实训班,借此机会来学习一下CREATE DATABASE SQL COMMAND。
首先来了解一下create database command命令的结构(摘自  Oracle? Database SQL Reference 10g Release 2 (10.2) ):
Create Database using Create Database SQL Command - 德哥(DiGoal,Just Do It!) - Not Only DBA

ORACLE的命令解释一向都是非常的清晰。
大概分几个模块:
配置SYS , SYSTEM用户密码
配置控制文件
配置字符集
配置系统表空间,辅助表空间,默认表空间,临时表空间
配置日志
配置表空间特征
配置时区

好了,进入主题。
1. 配置数据库SYSDBA密码
su - oracle
Usage: orapwd file=<fname> password=<password> entries=<users> force=<y/n> 
  where
    file - name of password file (mand),
    password - password for SYS (mand),
    entries - maximum number of distinct DBA and     force - whether to overwrite existing file (opt),
OPERs (opt), 
  There are no spaces around the equal-to (=) character.
$ orapwd file=$ORACLE_HOME/dbs/orapw$SID password=oracle entries=10 

2. 配置参数文件
使用模板建立参数文件:
模板在$ORACLE_HOME/dbs/init.ora
配置后如下:
vi $ORACLE_HOME/dbs/init$ORACLE_SID.ora
*.background_dump_dest='/opt/oracle/admin/digoal/bdump'
*.control_files='/database/oradata/digoal/control01.ctl','/database/oradata/digoal/control02.ctl'
*.core_dump_dest='/opt/oracle/admin/digoal/cdump'
*.db_file_multiblock_read_count=8
*.db_files=80
*.db_name='digoal'
*.global_names=TRUE
*.instance_name='digoal'
*.log_buffer=32768
*.parallel_max_servers=5
*.processes=50
*.sga_target=300M
*.undo_management='auto'
*.undo_tablespace='undotbs1'
*.user_dump_dest='/opt/oracle/admin/digoal/udump'

3. 创建bdump,cdump,adump,udump目录
su - root
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/bdump
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/cdump
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/udump
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/adump
chown -R oracle:oinstall $ORACLE_BASE/admin

4. 配置数据文件存放目录(或者使用RAW设备的话配置RAW设备路径)
su - root
mkdir -p /database/oradata
chown oracle:dba /database/oradata

5. nomount模式加载数据库
su - oracle
sqlplus "/ as sysdba"
startup nomount

6. 创建数据库
CREATE DATABASE digoal
   USER SYS IDENTIFIED BY oracle
   USER SYSTEM IDENTIFIED BY oracle
   LOGFILE GROUP 1 ('/database/oradata/digoal/redo01.log') SIZE 50M,
           GROUP 2 ('/database/oradata/digoal/redo02.log') SIZE 50M,
           GROUP 3 ('/database/oradata/digoal/redo03.log') SIZE 50M
   MAXLOGFILES 5
   MAXLOGMEMBERS 5
   MAXLOGHISTORY 1
   MAXDATAFILES 100
   MAXINSTANCES 1
   CHARACTER SET UTF8
   NATIONAL CHARACTER SET UTF8
   noarchivelog | archivelog
   EXTENT MANAGEMENT LOCAL
   DATAFILE '/database/oradata/digoal/system01.dbf' SIZE 325M REUSE autoextend on next 10m maxsize 1024m
   SYSAUX DATAFILE '/database/oradata/digoal/sysaux01.dbf' SIZE 325M REUSE autoextend on next 10m maxsize 1024m
   DEFAULT TABLESPACE tbs_default
   DATAFILE '/database/oradata/digoal/tbs_default01.dbf' SIZE 325M REUSE
   DEFAULT TEMPORARY TABLESPACE tempts1
      TEMPFILE '/database/oradata/digoal/temp01.dbf' 
      SIZE 20M REUSE 
   UNDO TABLESPACE undotbs1 
      DATAFILE '/database/oradata/digoal/undotbs1_01.dbf' SIZE 325M REUSE autoextend on next 10m maxsize 1024m
      ;

7. 创建数据字典
su - oracle
sqlplus "/ as sysdba"
@?/rdbms/admin/catalog.sql

8. 创建系统函数
su - oracle
sqlplus "/ as sysdba"
@?/rdbms/admin/catproc.sql

9. 创建spfile,修改参数
su - oracle
sqlplus "/ as sysdba"
create spfile from pfile;
shutdown immediate
startup

【某些问题总结】
1. 据David说,10G的官方文档 Oracle? Database Administrator's Guide 10g Release 2 (10.2)的第二章节,关于CREATE DATABASE的范例有问题,如下
CREATE DATABASE mynewdb USER SYS IDENTIFIED BY pz6r58 USER SYSTEM IDENTIFIED BY y1tz5p LOGFILE GROUP 1 ('/u01/oracle/oradata/mynewdb/redo01.log') SIZE 100M, GROUP 2 ('/u01/oracle/oradata/mynewdb/redo02.log') SIZE 100M, GROUP 3 ('/u01/oracle/oradata/mynewdb/redo03.log') SIZE 100M MAXLOGFILES 5 MAXLOGMEMBERS 5 MAXLOGHISTORY 1 MAXDATAFILES 100 MAXINSTANCES 1 CHARACTER SET US7ASCII NATIONAL CHARACTER SET AL16UTF16 DATAFILE '/u01/oracle/oradata/mynewdb/system01.dbf' SIZE 325M REUSE EXTENT MANAGEMENT LOCAL SYSAUX DATAFILE '/u01/oracle/oradata/mynewdb/sysaux01.dbf' SIZE 325M REUSE DEFAULT TABLESPACE tbs_1 DEFAULT TEMPORARY TABLESPACE tempts1 TEMPFILE '/u01/oracle/oradata/mynewdb/temp01.dbf' SIZE 20M REUSE UNDO TABLESPACE undotbs DATAFILE '/u01/oracle/oradata/mynewdb/undotbs01.dbf' SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
仔细看了一下,在
 DEFAULT TABLESPACE tbs_1
这行有问题,没有写数据文件在哪里,所以官方文档也有错误,看文档一定要保持怀疑的态度,哈哈。好像是鲁迅说的。
鲁迅还说,别人喝咖啡的时候,我在学习。实在太有教育意义了。

2. 10.2.0.1 32bit版本建库后报如下异常的解决
Sat Jun  5 11:48:19 2010
Memory Notification: Library Cache Object loaded into SGA
Heap size 11367K exceeds notification threshold (2048K)
Details in trace file /opt/oracle/admin/digoal/udump/digoal_ora_6122.trc
KGL object name :grant select on ku$_m_view_pfh_view to public

后来查了一下,据说是10.2.0.1版本的默认参数值太小了
alter system set "_kgl_large_heap_warning_threshold"=8388608 scope=spfile ; 
从10.2.0.2起,这个参数的默认值被修改为50M


【参考】
Oracle? Database SQL Reference 10g Release 2 (10.2)
Oracle? Database Administrator's Guide 10g Release 2 (10.2)
$ORACLE_HOME/rdbms/admin/catalog.sql
$ORACLE_HOME/rdbms/admin/catproc.sql