之前写过一篇文章讨论手动使用CREATE DATABASE SQL语句创建数据库(http://space.itpub.net/23135684/viewspace-741905 ),这篇文章讨论DBCA图形化工具通过模板创建数据库的过程,以分析它们之间的区别。
在使用DBCA图形化工具创建数据库,执行配置的最后可以为整个过程创建脚本,如下图所示:
![bb](http://img.blog.itpub.net/blog/attachments/2012/09/23135684_201209062019151.jpg?x-oss-process=style/bb)
选中"Generate Database Creation Scripts"即可生成脚本。
在指定目录下生成了如下6个文件:
![bb](http://img.blog.itpub.net/blog/attachments/2012/09/23135684_201209062021501.jpg?x-oss-process=style/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启动安装数据库的图形化界面:
通过上图的文字可以很明显的感受到通过模板和不通过模板(定制)创建数据库的区别,“包含数据文件”为“是”表示通过模板方式创建数据库,“包含数据文件”为“否”表示通过CREATE DATABASE SQL语句方式创建数据库!
下面我们再来看一下Oracle Database自带的模板,模板的位置在$ORACLE_HOME\assistants\dbca\templates
默认情况下,Oracle软件自带了两个模板,还有默认的控制文件和一些其他文件。既然Seed_Database.dfb是一个数据库的全库备份,那么通过RMAN使用restore命令也可以将其恢复?该控制文件也可用于控制丢失情况下的数据库恢复?
注意,执行CREATE DATABASE SQL语句创建数据库是在NOMOUNT模式下完成的,使用DBCA图形化方式创建数据库是在MOUNT模式下完成的。
下面是删除数据库的脚本:
从上面的脚本不难看出,DBCA是利用dbms_backup_restore包将安装软件后固定的模板恢复到数据库,由此可以判断该模板是通过CREATE DATABASE SQL命令创建的一个数据库全库备份,所以这种方式要比CREATE DATABASE SQL语句来得要快些,但根据固定模板创建的数据库,不能完成某些属性的定制。下面是Windows 11gR2执行dbca启动安装数据库的图形化界面:
![bb](http://img.blog.itpub.net/blog/attachments/2012/10/23135684_201210081055411.jpg?x-oss-process=style/bb)
通过上图的文字可以很明显的感受到通过模板和不通过模板(定制)创建数据库的区别,“包含数据文件”为“是”表示通过模板方式创建数据库,“包含数据文件”为“否”表示通过CREATE DATABASE SQL语句方式创建数据库!
下面我们再来看一下Oracle Database自带的模板,模板的位置在$ORACLE_HOME\assistants\dbca\templates
![bb](http://img.blog.itpub.net/blog/attachments/2012/09/23135684_201209062029181.jpg?x-oss-process=style/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包来完成的,不知道文章中的控制文件是否可以用上面的临时空间文件或者模板控制文件来代替!?
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23135684/viewspace-742834/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/23135684/viewspace-742834/