我们有很多种建库的方式,DBCA建库就是其中大家最常用的方法。对于DBCA的方式来建库,我们可以通过OUI或者silent的方式,都可以达
到效果。有关OUI自不必提了,step by
step的进行next就可以了,不过是需要了解其中的每个选择的含义就可以了,基本上是stupid式的。对于silent的方式呢,就要知道dbca
的命令参数的含义有一定的了解就可以了。不过这个比前一个方法要高级一些了,至少你要知道我们的dbca的命令,有以一定dbac的基础才能使用。
其实不管是前一个钟,还是后一种,其实最后无非都是把我们的配置和动作作为一些action而生成对应的脚本,从而殊途同归最后的落脚点还是一样的,不同
的是一个是通过oui来配置的,一个是直接从你的参数里来读取的。如果有开发经验的人,就有这样的体会了,其实最后调的同样的一个API搞定,不同的是调
之前,对参数的获取方式不一样而已了。那么对于Oracle的dbca建库来说,这个最后的所谓API是什么呢,其实在你用OUI进行操作的时候,最后的
一步,有个选项,指定安装的script保存目录,这里就是最后的API究竟都做了些什么,我们可以通过脚本所在的地方。也就是这个目录里的文件们,一探
究竟。
我这里有一个11gR2 Linux环境下dbca建库的最后产生的脚本目录,是用的ASM做stroge的。简单的和大家分享一下。
首先该目录默认的路径在
$ORACLE_BASE/admin/<SID>/scripts/
如我这里的,
我机器的ORACLE_BASE目录是/u01/app/oracle,注意ORACLE_BASE目录和ORACLE_HOME目录是不同的概念。
HOME是软件的安装所在,我们配置和软件相关的,比如监听,tnsname,em,以及有关运行的命令都是在这里的,而BASE是下面是有关实例的目
录,比如日志,数据文件,默认那都是以在这里为基地的,这里也不等同于oraInventory目录,这个是记录Oracle所有软件的信息登记的地方。
我建的数据库的SID是sampledb,所以这里脚本的路径在/u01/app/oracle/admin/sampledb/scripts/
我们来看看这里的文件都有哪些
[oracle@sampledb ~]$ ls /u01/app/oracle/admin/sampledb/scripts/ -al
total 9588
drwxr-x--- 2 oracle oinstall 4096 Jun 10 11:44 .
drwxr-x--- 6 oracle oinstall 4096 Jun 10 00:31 ..
-rw-r----- 1 oracle oinstall 1933 Jun 10 00:31 cloneDBCreation.sql
-rw-r----- 1 oracle oinstall 843 Jun 10 00:31 CloneRmanRestore.sql
-rw-r----- 1 oracle oinstall 1804 Jun 10 00:31 init.ora
-rw-r----- 1 oracle oinstall 1897 Jun 10 00:31
initsampledbTempOMF.ora
-rw-r----- 1 oracle oinstall 1840 Jun 10 00:31 initsampledbTemp.ora
-rw-r----- 1 oracle oinstall 511 Jun 10 00:31 lockAccount.sql
-rw-r----- 1 oracle oinstall 939 Jun 10 00:31 postDBCreation.sql
-rw-r----- 1 oracle oinstall 546 Jun 10 00:31 postScripts.sql
-rw-r----- 1 oracle oinstall 1440 Jun 10 00:31
rmanRestoreDatafiles.sql
-rwxr-xr-x 1 oracle oinstall 509 Jun 10 00:31 sampledb.sh
-rwxr-xr-x 1 oracle oinstall 868 Jun 10 00:31 sampledb.sql
-rw-r----- 1 oracle oinstall 9748480 Jun 10 00:31 tempControl.ctl
入口时sampledb.sh文件。
通过这个文件我们可以展开追逐了。
[grid@sampledb~]$ more
/u01/app/oracle/admin/sampledb/scripts/sampledb.sh
#!/bin/sh
OLD_UMASK=`umask`
umask 0027
mkdir -p /u01/app/oracle/admin/sampledb/adump
mkdir -p /u01/app/oracle/admin/sampledb/dpdump
mkdir -p /u01/app/oracle/admin/sampledb/pfile
mkdir -p /u01/app/oracle/cfgtoollogs/dbca/sampledb
umask ${OLD_UMASK}
ORACLE_SID=sampledb; export ORACLE_SID
PATH=$ORACLE_HOME/bin:$PATH; export PATH
echo You should Add this entry in the /etc/oratab:
sampledb:/u01/app/11.2.0/oracle:Y
/u01/app/11.2.0/oracle/bin/sqlplus /nolog
@/u01/app/oracle/admin/sampledb/scripts/sampledb.sql
这里各位应该可以看懂其中的意思吧。如果不懂可以利用goolge查询一下详细的知识点。
前面的mkdir -p /u01/app/oracle/admin/sampledb/adump
这里11g已经对diag体系进行了修改了,bdump,cdump,udump都已经进入了diag目录了,所以不在这里创建
前面是有关os上的一些准备,
最后的sample.sql是我们数据库里真刀真枪的干活。
进去看看吧
[grid@sampledb~]$ more
/u01/app/oracle/admin/sampledb/scripts/sampledb.sql
set verify off
ACCEPT sysPassword CHAR PROMPT 'Enter new password for SYS: ' HIDE
ACCEPT systemPassword CHAR PROMPT 'Enter new password for SYSTEM: ' HIDE
host /u01/app/11.2.0/oracle/bin/orapwd
file=/u01/app/11.2.0/oracle/dbs/orapwsampledb force=y
host /u01/app/11.2.0/grid/bin/setasmgidwrap
o=/u01/app/11.2.0/oracle/bin/oracle
@/u01/app/oracle/admin/sampledb/scripts/CloneRmanRestore.sql
@/u01/app/oracle/admin/sampledb/scripts/cloneDBCreation.sql
@/u01/app/oracle/admin/sampledb/scripts/postScripts.sql
host /u01/app/11.2.0/oracle/bin/srvctl add database -d sampledb -o
/u01/app/11.2.0/oracle -p +DATA/sampledb/spfilesampledb.ora -n sampledb
-a DATA
host echo "SPFILE='+DATA/sampledb/spfilesampledb.ora'" >
/u01/app/11.2.0/oracle/dbs/initsampledb.ora
@/u01/app/oracle/admin/sampledb/scripts/lockAccount.sql
@/u01/app/oracle/admin/sampledb/scripts/postDBCreation.sql
这里分别依次执行了
host /u01/app/11.2.0/oracle/bin/orapwd
file=/u01/app/11.2.0/oracle/dbs/orapwsampledb force=yhost /u01/app/11.2.0/grid/bin/setasmgidwrap
o=/u01/app/11.2.0/oracle/bin/oracle
这是两个os里命令。用host
以及下面的sql脚本
/u01/app/oracle/admin/sampledb/scripts/CloneRmanRestore.sql
/u01/app/oracle/admin/sampledb/scripts/cloneDBCreation.sql/u01/app/oracle/admin/sampledb/scripts/postScripts.sql
前面2个都是建库的脚本,可以看到是用dbms_backup_restore是里面的主角,是用恢复的方式来做的。恢复的piece是
Seed_Database.dfb。后面的
接着有os脚本命令
host /u01/app/11.2.0/oracle/bin/srvctl add database -d sampledb -o
/u01/app/11.2.0/oracle -p +DATA/sampledb/spfilesampledb.ora -n sampledb
-a DATAhost echo "SPFILE='+DATA/sampledb/spfilesampledb.ora'" >
/u01/app/11.2.0/oracle/dbs/initsampledb.ora
上面是注册服务到has里,是grid
infrastructure环境,这也是新东东。下面是把spfile的路径添加到默认的sample的pfile里,使启动的时候从spfile启动
了,这个在以前的rac上常有这样的做法。
接下来就是最后的
/u01/app/oracle/admin/sampledb/scripts/lockAccount.sql
/u01/app/oracle/admin/sampledb/scripts/postDBCreation.sql
有兴趣的朋友可以下载这些文件详细进行分析
Oracle技术论坛
http://www.oraforum.net