目标:从生产数据库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;
判断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}
八、编辑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 数据库克隆完毕。