那么,在这个基础上怎么继续理解DBCA的过程呢?
毫无疑问就是看到一些详细的调用方式,比如脚本之类的,参数文件的处理等,这些Oracle处理起来还是有一些方法论的.
得到DBCA的静默创建脚本很简单,就是添加一个generateScripts选项即可.
比如下面的方式,输出会告诉你一个路径.假设db name为testdb1:
dbca -silent -createDatabase -templateName $ORACLE_HOME/assistants/dbca/templates/General_Purpose.dbc -gdbname testdb1 -sid testdb1? -characterSet ZHS16GBK? -sysPassword oracle -systemPassword oracle -generateScripts
那么RMAN还原的过程呢,本质上RMAN的核心就是dbms_backup_restore,dbms_rcvman的包.我们可以在得到的脚本中看到.
重点工作就是下面的这句:
dbms_backup_restore.restoreBackupPiece(‘/U01/app/oracle/product/10.2/assistants/dbca/templates/Seed_Database.dfb’,done);
我们分析生成的脚本可以让自己的理解更上一个层次.生成的脚本如下:
-rw-r—– 1 oracle oinstall 2165 Dec? 3 22:04 cloneDBCreation.sql
-rw-r—– 1 oracle oinstall? 286 Dec? 3 22:04 CloneRmanRestore.sql
-rw-r—– 1 oracle oinstall 2061 Dec? 3 22:04 init.ora
-rw-r—– 1 oracle oinstall 2155 Dec? 3 22:04 inittestdb1Temp.ora
-rw-r—– 1 oracle oinstall? 510 Dec? 3 22:04 lockAccount.sql
-rw-r—– 1 oracle oinstall? 726 Dec? 3 22:04 postDBCreation.sql
-rw-r—– 1 oracle oinstall? 649 Dec? 3 22:04 postScripts.sql
-rw-r—– 1 oracle oinstall 1373 Dec? 3 22:04 rmanRestoreDatafiles.sql
-rw-r—– 1 oracle oinstall? 399 Dec? 3 22:04 testdb1.log
-rwxr-xr-x 1 oracle oinstall? 704 Dec? 3 22:04 testdb1.sh
-rwxr-xr-x 1 oracle oinstall? 554 Dec? 3 22:04 testdb1.sql
运行的主体是testdb1.sh这个shell脚本,而脚本里调用的SQL脚本是testdb1.sql,我们就不兜圈子了,调用的顺序如下:
@/U01/app/oracle/admin/testdb1/scripts/CloneRmanRestore.sql
@/U01/app/oracle/admin/testdb1/scripts/cloneDBCreation.sql
@/U01/app/oracle/admin/testdb1/scripts/postScripts.sql
@/U01/app/oracle/admin/testdb1/scripts/lockAccount.sql
@/U01/app/oracle/admin/testdb1/scripts/postDBCreation.sql
- CloneRmanRestore.sql的工作是完成备份的还原
- cloneDBCreation.sql的工作是重建控制文件,重建临时表空间,修改db_name,修改字符集.
- postScripts.sql是初始化一些目录结构.
- lockAccount.sql是对一些非系统用户做锁定操作.
- postDBCreation.sql是做一些数据库创建后的基本补充,做一些编译的工作.
学习了这个过程,突然发现我们熟悉的DBCA其实还是有一些持续学习的必要.看起来简单的工具能够掌握本质,本身就是一种无形的进步.
这里我们分两个方面来看,一个是DBCA和多租户的关系,看似不大起眼的DBCA其实和12c的架构设计密不可分.另外一个是12.2的一个新特性,绝对会让人眼前一亮.
1、DBCA和多租户的关系
而结合技术趋势来看DBCA其实发现它还是有很大的改进,我们简单说说.
首先是12c引入的多租用户特性(Multitenant Environment),它允许一个数据库容器(CDB)承载多个可插拔数据库(PDB),通俗点说就是库中库,或者说是数据库里的Docker.在即将推出的12.2中支持的PDB数从252增加到了4096个,下面这个经典的架构图来自官方.
这个和DBCA有什么关系呢?里面有一个SEED的PDB,是容器架构的一个重点部分.
Seed又叫PDB$SEED,创建PDBS数据库的模板,你不能在Seed中添加或修改一个对象(因为是这个PDB是只读的).一个CDB中有且只能有一个Seed.
这里的这个PDB其实就是一个”活”的模板库,它有自己独立的系统表空间.如图左下所示.
(编辑:ASP站长网)
|