分类: Oracle
2008-04-23 08:00:12
这是用RMAN备份自动“刷新”测试数据库最关键的一步,克隆文件批处理作业实际上创建了“复制数据库”语句,我们使用它克隆我们的生产数据库到我们的测试数据库上,下面是一个叫做create_TESTDB_clone_files.sql的在生产服务器上运行的SQL脚本文件。
代码清单5:
set echo off; set feedback off; set linesize 140; SET PAGESIZE 0; set trimspool on; ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MON-DD HH24:MI:SS'; select checkpoint_change# from v$database; alter system archive log current; select sysdate from dual; -- *********************************************************************** -- *********************************************************************** -- *********************************************************************** -- ******************************* TESTDBSERVER ************************** -- ******************************* TESTDBSERVER ************************** -- ******************************* TESTDBSERVER ************************** -- *********************************************************************** -- *********************************************************************** -- *********************************************************************** --TESTDB1 spool \\TESTDBSERVER\d$\oracle\admin\common\clone\clone_to_TETSTDB1.rcv select 'duplicate target database to TESTDB1 until time ' ||''''|| sysdate ||''';' from dual; spool off; --TESTDB2 spool \\TESTDBSERVER\d$\oracle\admin\common\clone\clone_to_TETSTDB2.rcv select 'duplicate target database to TESTDB2 until time ' ||''''|| sysdate ||''';' from dual; spool off; --TESTDB3 spool \\TESTDBSERVER\d$\oracle\admin\common\clone\clone_to_TETSTDB3.rcv select 'duplicate target database to TESTDB23until time ' ||''''|| sysdate ||''';' from dual; spool off; -- *********************************************************************** -- *********************************************************************** -- *********************************************************************** -- ********************************* THE END ***************************** -- ********************************* THE END ***************************** -- *********************************************************************** -- *********************************************************************** -- *********************************************************************** alter system archive log current; select sysdate from dual; select checkpoint_change# from v$database; select sysdate from dual; exit; |
这个脚本在生产服务器上运行,spool输出到测试服务器,首先你注意的是NLS_DATE_FORMAT设置,与0级备份时设置方法一样;接下来,你看到我们已经选择了系统改变序号或SCN,数据库也可以通过使用SCN克隆和/或恢复,我们不再使用SCN进行数据库复制,我们不取消这一步是因为我们想查看日志文件中的SCN,假设在一个生产恢复情景下,SCN在一个额外的位置是可用的,在接下来的语句中,我们对当前的重做日志进行归档,我们从Oracle 8i开始就已经执行过了RMAN复制,但日志方面总有问题,这是唯一可以确定的最好的方法,我们每次都这样使用;接下来,我们选择sysdate,我们想在SCN下查看它,向下移动到spool语句,你看到一个为TESTDBSERVER编写的名叫clone_to_TESTDB.rcv的RMAN脚本,只有一行:
代码清单6:
duplicate target database to TESTDB1 until time '2007-DEC-05 19:55:00'; |
你可以在你的测试数据库服务器上为每个测试数据库单独编写一个克隆脚本,正如你看到的,这就是我们所做的,我们有一部分生产数据库服务器不止安装有一个生产数据库,对那些我们有两个脚本,在每个生产数据库上为测试数据库创建一个克隆脚本。
代码清单7:
set NLS_DATE_FORMAT=DD-MON-YYYY HH24:MI:SS set NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252 set CURDIR=D:\oracle\admin\common\batch cd %CURDIR% sqlplus system/pword@DBNAME @create_TESTDB_clone_files.sql > logs\ create_TESTDB_clone_files.log |
这个脚本的批处理文件非常简单,最前面的两行设置你的环境变量,第三和第四行用于任务调度,非常重要,windows需要直接指定SQL脚本的位置,因此需要设置好目录后,将脚本移动到目录中,接下来,SQLplus才真正被调用和运行脚本以创建克隆文件,在当前目录下的一个叫做logs的子目录中单独生成了一个日志文件。