搜诶符合你 发表于 2019-2-3 12:18:18

oracle EBS 克隆之数据库克隆

  目标:从生产数据库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: {=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: {=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 数据库克隆完毕。



页: [1]
查看完整版本: oracle EBS 克隆之数据库克隆