现在的位置: 首页 > 综合 > 正文

一起看看dbca建库的过程

2012年08月11日 ⁄ 综合 ⁄ 共 4547字 ⁄ 字号 评论关闭

我们有很多种建库的方式,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=y

host /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 DATA

host 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

 

有兴趣的朋友可以下载这些文件详细进行分析

http://docs.google.com/leaf?id=0B8oW9RUdpLgPYjNjOGRmOGQtYzE5ZC00OWI3LWIxNjctZTM3MDJhYTZkMTdj&hl=zh_CN

 

 

Oracle技术论坛 
http://www.oraforum.net

抱歉!评论已关闭.