解析dbca图形化工具通过模板创建数据库的过程


        之前写过一篇文章讨论手动使用CREATE DATABASE SQL语句创建数据库(http://space.itpub.net/23135684/viewspace-741905 ),这篇文章讨论DBCA图形化工具通过模板创建数据库的过程,以分析它们之间的区别。

        在使用DBCA图形化工具创建数据库,执行配置的最后可以为整个过程创建脚本,如下图所示:
bb

        选中"Generate Database Creation Scripts"即可生成脚本。

在指定目录下生成了如下6个文件:
bb
        上面的文件分别是临时参数文件、临时控制文件、一个还原数据库的脚本和一个删除数据库的脚本。

        由此可以看出,使用DBCA图形化工具创建的数据库并不是执行CREATE DATABASE SQL语句创建的数据库,下面查看还原数据库的脚本:
set verify off;
set echo off;
set serveroutput on;
select TO_CHAR(systimestamp,'YYYYMMDD HH:MI:SS') from dual;
variable devicename varchar2(255);
declare
omfname varchar2(512) := NULL;
  done boolean;
  begin
    dbms_output.put_line(' ');
    dbms_output.put_line(' Allocating device.... ');
    dbms_output.put_line(' Specifying datafiles... ');
       :devicename := dbms_backup_restore.deviceAllocate;
    dbms_output.put_line(' Specifing datafiles... ');
    dbms_backup_restore.restoreSetDataFile;
    dbms_backup_restore.getOMFFileName('SYSTEM',omfname);
      dbms_backup_restore.restoreDataFileTo(1, omfname, 0, 'SYSTEM');
    dbms_backup_restore.getOMFFileName('SYSAUX',omfname);
      dbms_backup_restore.restoreDataFileTo(2, omfname, 0, 'SYSAUX');
    dbms_backup_restore.getOMFFileName('UNDOTBS1',omfname);
      dbms_backup_restore.restoreDataFileTo(3, omfname, 0, 'UNDOTBS1');
    dbms_backup_restore.getOMFFileName('USERS',omfname);
      dbms_backup_restore.restoreDataFileTo(4, omfname, 0, 'USERS');
    dbms_output.put_line(' Restoring ... ');
    dbms_backup_restore.restoreBackupPiece('/u01/app/oracle/product/11.2.0/db_1/assistants/dbca/templates/Seed_Database.dfb', done);
    if done then
        dbms_output.put_line(' Restore done.');
    else
        dbms_output.put_line(' ORA-XXXX: Restore failed ');
    end if;
    dbms_backup_restore.deviceDeallocate;
  end;
/
select TO_CHAR(systimestamp,'YYYYMMDD HH:MI:SS') from dual;

        从上面的脚本不难看出,DBCA是利用dbms_backup_restore包将安装软件后固定的模板恢复到数据库,由此可以判断该模板是通过CREATE DATABASE SQL命令创建的一个数据库全库备份,所以这种方式要比CREATE DATABASE SQL语句来得要快些,但根据固定模板创建的数据库,不能完成某些属性的定制。下面是Windows 11gR2执行dbca启动安装数据库的图形化界面:
bb

        通过上图的文字可以很明显的感受到通过模板和不通过模板(定制)创建数据库的区别,“包含数据文件”为“是”表示通过模板方式创建数据库,“包含数据文件”为“否”表示通过CREATE DATABASE SQL语句方式创建数据库!

        下面我们再来看一下Oracle Database自带的模板,模板的位置在$ORACLE_HOME\assistants\dbca\templates
bb
        默认情况下,Oracle软件自带了两个模板,还有默认的控制文件和一些其他文件。既然Seed_Database.dfb是一个数据库的全库备份,那么通过RMAN使用restore命令也可以将其恢复?该控制文件也可用于控制丢失情况下的数据库恢复?
       注意,执行CREATE DATABASE SQL语句创建数据库是在NOMOUNT模式下完成的,使用DBCA图形化方式创建数据库是在MOUNT模式下完成的。
       下面是删除数据库的脚本:
set echo off;
set serveroutput on;
select TO_CHAR(systimestamp,'YYYYMMDD HH:MI:SS') from dual;
declare
  begin
    dbms_output.put_line(' Deleting files... ');
    dbms_backup_restore.deleteFile('/ade/b/157259786/oracle/oradata/seeddata/redo01.log');
    dbms_backup_restore.deleteFile('/ade/b/157259786/oracle/oradata/seeddata/redo02.log');
    dbms_backup_restore.deleteFile('/ade/b/157259786/oracle/oradata/seeddata/redo03.log');
    dbms_backup_restore.deleteFile('/ade/b/157259786/oracle/oradata/seeddata/sysaux01.dbf');
    dbms_backup_restore.deleteFile('/ade/b/157259786/oracle/oradata/seeddata/system01.dbf');
    dbms_backup_restore.deleteFile('/ade/b/157259786/oracle/oradata/seeddata/temp01.dbf');
    dbms_backup_restore.deleteFile('/ade/b/157259786/oracle/oradata/seeddata/undotbs01.dbf');
    dbms_backup_restore.deleteFile('/ade/b/157259786/oracle/oradata/seeddata/users01.dbf');
    dbms_backup_restore.deleteFile('/u01/app/oracle/cfgtoollogs/dbca/mtdc/tempControl.ctl');
    dbms_output.put_line(' Deleted files ... ');
  end;
/
select TO_CHAR(systimestamp,'YYYYMMDD HH:MI:SS') from dual;

        删除数据库也是利用dbms_backup_restore包来完成的。

《只存在RMAN备份片的数据库恢复过程》http://space.itpub.net/23135684/viewspace-711883,也是利用dbms_backup_restore包来完成的,不知道文章中的控制文件是否可以用上面的临时空间文件或者模板控制文件来代替!?

fj.pngQQ截图20120828151213.jpg

fj.pngQQ截图20120906202117.jpg

fj.pngQQ截图20120906202904.jpg

fj.pngdbca不同的选项.jpg

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23135684/viewspace-742834/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/23135684/viewspace-742834/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值