创建Oracle数据库非常复杂,在平时工作中一般采用dbca工具创建即可,但是有些情况下,比如运行自动化脚本,则需要通过运行脚本来创建。下面介绍一个简单的用脚本创建Oracle数据库的方法。
1. 通过DBCA生成数据库创建脚本
启动DBCA通过向导创建数据库,这里设数据库名为RICM,在最后一步勾选“Generate Database Creation Scripts”,选择脚本存放的目录,点击完成。系统首先生成数据库创建脚本,脚本创建完成后,单击取消按钮,取消数据库的创建
回到脚本存放的目录,包括数据库的初始化参数文件init.ora,initRICMTemp.ora, 还有一系列的sql文件完成数据库的恢复、控制文件创建、账号控制等等,有兴趣的读者可以研究。数据里面的RICM.sh即为创建脚本。
2. RICM.sh 脚本
打开RICM.sh脚本,它首先创建一系列的目录,用于保存参数文件,日志文件,数据库数据文件等等,核心的是调用/oracle/products/11/db/bin/sqlplus /nolog @/oracle/RICM/scripts/RICM.sql, 即RICM.sql脚本
OLD_UMASK=`umask`
umask 0027
mkdir -p /oracle/products/11/db/dbs
mkdir -p /oracle/products/admin/RICM/adump
mkdir -p /oracle/products/admin/RICM/dpdump
mkdir -p /oracle/products/admin/RICM/pfile
mkdir -p /oracle/products/cfgtoollogs/dbca/RICM
mkdir -p /oracle/products/flash_recovery_area
mkdir -p /oracle/products/flash_recovery_area/RICM
mkdir -p /oracle/products/oradata/RICM
umask ${OLD_UMASK}
ORACLE_SID=RICM; export ORACLE_SID
PATH=$ORACLE_HOME/bin:$PATH; export PATH
echo You should Add this entry in the /etc/oratab: RICM:/oracle/products/11/db:Y
/oracle/products/11/db/bin/sqlplus /nolog @/oracle/RICM/scripts/RICM.sql
3. RICM.sql文件
打开RICM.sql文件,有4个替代变量需要用户输入,接着创建口令文件,最后执行后续一系列的sql创建数据库。
set verify off
ACCEPT sysPassword CHAR PROMPT 'Enter new password for SYS: ' HIDE
ACCEPT systemPassword CHAR PROMPT 'Enter new password for SYSTEM: ' HIDE
ACCEPT sysmanPassword CHAR PROMPT 'Enter new password for SYSMAN: ' HIDE
ACCEPT dbsnmpPassword CHAR PROMPT 'Enter new password for DBSNMP: ' HIDE
host /oracle/products/11/db/bin/orapwd file=/oracle/products/11/db/dbs/orapwRICM
force=y
@/oracle/RICM/scripts/CloneRmanRestore.sql
@/oracle/RICM/scripts/cloneDBCreation.sql
@/oracle/RICM/scripts/postScripts.sql
@/oracle/RICM/scripts/lockAccount.sql
@/oracle/RICM/scripts/postDBCreation.sql
4. 修改运行脚本
如果直接执行RICM.sh,可以发现脚本停住了,提示用户输入密码,注释掉前面4行代码,并且在创建口令文件语句中加上系统管理员密码。修改如下:
set verify off
--ACCEPT sysPassword CHAR PROMPT 'Enter new password for SYS: ' HIDE
--ACCEPT systemPassword CHAR PROMPT 'Enter new password for SYSTEM: ' HIDE
--ACCEPT sysmanPassword CHAR PROMPT 'Enter new password for SYSMAN: ' HIDE
--ACCEPT dbsnmpPassword CHAR PROMPT 'Enter new password for DBSNMP: ' HIDE
define sysPassword = 'Vegat1st'
define systemPassword = 'Vegat1st'
define sysmanPassword = 'Vegat1st'
define dbsnmpPassword = 'Vegat1st'
host /oracle/products/11/db/bin/orapwd file=/oracle/products/11/db/dbs/orapwRICM force=y password=Vegat1st entries=5
@/oracle/RICM/scripts/CloneRmanRestore.sql
@/oracle/RICM/scripts/cloneDBCreation.sql
@/oracle/RICM/scripts/postScripts.sql
@/oracle/RICM/scripts/lockAccount.sql
@/oracle/RICM/scripts/postDBCreation.sql
再运行RIDW.sh,数据库开始创建,但执行到postDBCreation.sql时候,又需要提示输入密码,对应的语句如下:
SQL> host /oracle/products/11/db/bin/emca -config dbcontrol db -silent -DB_UNIQUE_NAME RICM -PORT 1521 -EM_HOME /oracle/products/11/db -LISTENER LISTENER -SERVICE_NAME RICM -SID RICM -ORACLE_HOME /oracle/ products/11/db -HOST vega56.cn.ibm.com -LISTENER_OH /oracle/products/11/db -LOG_FILE /oracle/RICM/scri pts/emConfig.log;
这条语句对创建数据库没有影响(事实上目前为止数据库已经创建成功了),因此在postDBCreation.sql中注释掉上面的语句。
到此为止,先删除RICM数据库(见另一篇博客),然后再执行RIDW.sh来创建数据库了,整个过程不需要输入密码。