目标:从生产数据库PROD克隆数据库到测试数据库TEST

环境:PROD/TEST数据库已存在,PROD数据文件在磁带中;

一、编辑TEST数据库pfile文件;

删除TEST数据库所有数据文件

su - oratest

cd /t02/oratest/testdata

rm *

编辑TEST数据库启动参数文件

cd $ORACLE_HOME/dbs

vi initTEST.ora

将db_name=TEST修改为db_name=PROD

新增一下设置

log_archive_format=PROD_%T%TS%S.arc(归档文件,缺省路径为$ORACLE/HOME/dbs/arch)

 

二、创建数据库文件link

TEST环境和PROD环境的数据库文件地点不一致,使用RMAN恢复数据库时需要繁琐的把每个文件都制定到新地点。简化操作步骤,创建一个目录链接,让RMAN认为恢复到原来的PORD目录;

su - oratest

mkdir /u01/oraprod

cd /u01/oraprod

ln -s /t02/oratest/testdata prodata (testdata链接到prodata)

ls -al 查看链接

 

三、恢复controlfile

将PROC数据库controlfile文件拷至/tmp目录

cd /tmp

ftp -i 172.16.*.*

cd /u01/oraprod/prodata

get cntrl01.dbf

启动数据库到nomount状态

export ORACLE_SID=TEST

sqlplus /nolog

conn / as sysdba

startup nomount 

复制控制文件(RMAN DB恢复工具)

rman target / nocatalog

RMAN>run{

         allocate channel t1 type disk;

         replicate controlfile from '/tmp/cntrl01.dbf';

         release channel t1;

         }

此时会在pfile指引的目录和名字下创建三个controlfile文件;

 

四、启动数据库到mount状态

su - oratest

export ORACLE_SID=TEST

sqlplus /nolog

conn / as sysdba

alter database mount 

 

五、恢复数据文件

从磁带中导出数据文件到目录中

su - oratest

rman target / nocatalog

RMAN>run {

          allocate channel t1 type 'SBT_TAPE';

          send 'NSR_ENV=(NSR_CLIENT=ehr-db,NSR_SERVER=wh-cvrd-backup.cvrd.dfl.com.cn)';

          restore database;

          release channel t1;

          }

 

 六、从磁带机中恢复归档日志

su - oratest

rman target / nocatalog

run{

      allocate channel t1 type 'SBT_TAPE';

      send 'NSR_ENV=(NSR_CLIENT=ehr-db,NSR_SERVER=wh-cvrd-backup.cvrd.dfl.com.cn)';

      restore archivelog all;

      (一般需要指定日志的起始序号:restore archivelog from logseq 13765 until logseq 13778)

      release channel t1;

      }

      判断from logseq数字方法:用sqlplus进入数据库,输入recover database 命令,系统会显示第一个需要的logseq数字,可就是rman 的restore archivelog from logseq需要的数字:

 sqlplus /nolog

conn / as sysdba

recover database;

ORA-00279: change 1324281854 generated at 08/16/2008 12:19:19 needed for thread 1
ORA-00289: suggestion : /t07/oratest/testdb/9.2.0/dbs/arch/1_13765.dbf
ORA-00280: change 1324281854 for thread 1 is in sequence #13765
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
手动输入 “AUTO”

 

判断unitl logseq的数字,可以参考生产环境已有的archivelog,文件名里最小序号减1就是until logseq的号码。

 

七、恢复数据库

su - oratest

conn / as sysdba

recover database until cancel using backup controlfile;

specify log: {<RET>=suggested | filename | AUTO | CANCEL}

选择AUTO
 
alter database open resetlogs

 

八、编辑TEST数据库pfile

su - oratest

sqlplus /nolog

conn / as sysdba

shutdown immediate

exit

cd $ORACLE_HOME/dbs

cp initTEST.ora initTEST.bak

vi initTEST.ora

将db_name=PROD修改为db_name=TEST

删除log_archive_format=PROD_%T%TS%S.arc

 

九、重建controlfile

登陆正式环境

su  - oraprod

conn / as sysdna

alter database backup controlfile to treace (把当前数据库控制文件的创建语句备份到trace文件里);

exit

显示的最后一个trc文件就是创建controlfile的脚本,将文件传至oratest用户家目录(/t02/oratest),注意权限问题。

改名为test.sql

vi test.sql

删除所有带#的行

test.sql文件离有两段重复的脚本,删除重复的一段

将CREATE CONTROLFILE REUSE DATABASE "PROD" NORESETLOGS ARCHIVELOG 改

为CREATE CONTROLFILE SET DATABASE "TEST" RESETLOGS NOARCHIVELOG

批量将prod 改为test   (1,$s/prod/test/g)

批量将u01改为t01 (1,$s/u01/t05/g,修改目录路径)

运行创建controlfile脚本

su - oratest

cd /t05/oratest/testdata

删除或更名cntrl01.dbf、cntrl02.dbf、cntrl03.dbf

sqlplus /nolog

conn / as sysdba

alter database open resetlogs

@testsql

 

十、数据库克隆后的配置

启动监听

su - oratest

lsnrctl start TEST

在数据库启动状态运行更新library脚本

cd $ORACLE_HOEM/appsutil/install/TEST_ehr-test

sqlplus "/ as sysdba" @adupdlib.sql so

在数据库启动状态运行更新对象脚本

 ./$ORACLE_HOEM/appsutil/install/TEST_ehr-test/adcrobj.sh

运行autoconfig

./$ORACLE_HOEM/appsutil/scripts/TEST_ehr-test/adautocfg.sh

 

至此oracle ebs 数据库克隆完毕。