最近做了erp系统克隆,用duplicate from active方式做db克隆,做下相关记录
在目标库一共跑了四次下面的duplicate脚本
1.第一次是因为脚本过程中在源数据库添加了新数据文件,而进行过程中在未知阶段或情况下没有还原该数据文件,导致archivelog还原后,recover直接失败,recover未能开始
2.第二次在没有已还原数据的情况,重跑脚本,由于没有第一次过程中没有做recover,这次restore识别数据文件没有问题直接跳过部分数据文件还原,而后由于磁盘空间的问题导致在recover过程中还原失败
3.第三次,这次很关键,
做了相关假设,①.duplicate过程是否能已进行过recover的数据文件,第二次中的确是跳过了,
如果①可以, ②.那么是不是可以用清除下archivelog,重新跑duplicate脚本
保险起见,没有清除原库archivelog的情况,启动duplicate脚本,发现数据文件在做改动,立即停止 --->>>大概可以猜测只能跳过还原的数据文件,recover破坏了scn号,rman无法识别
扩展了空间,恢复了文件,反反复复调了几遍,发现刚刚duplicate脚本的过程所改动的数据文件在取消的过程中被删除了,然后只能重新做
直接用archivelog做recover是可以挽救的,下次做的时候吸取教训了-。-
4.在无其他更改、空间充足的情况,重新跑了一次duplicate脚本,这次没有异常,正常将数据库克隆到目标环境了
以上,对比第二第三次可以得出一些信息,反反复复的过程复习了rman的一些命令,rman恢复的知识有待提高
==========================================================================================================================================================================================================
[!@#¥%……… ~]$cat dup.sh
#!/bin/bash
PPS=`ps -ef |grep -i ora_pmon_${ORACLE_SID} |grep -v grep | wc -l`
export PPS
if [ ${PPS} -ne 0 ]
then
$ORACLE_HOME/bin/sqlplus "/as sysdba" <<EOF
shutdown immediate;
exit;
EOF
else
echo " gerp has already shutdown "
fi
# create pfile for gerp
if [ -f $ORACLE_HOME/dbs/spfilegerp.ora ]
then
cd $ORACLE_HOME/dbs && rm -f spfilegerp.ora
fi
if [ -f $ORACLE_HOME/dbs/initgerp.ora ]
then
mv $ORACLE_HOME/dbs/initgerp.ora $ORACLE_HOME/dbs/initgerp.ora.bak
echo "db_name=gerp" > $ORACLE_HOME/dbs/initgerp.ora
echo "db_unique_name=gerp" >> $ORACLE_HOME/dbs/initgerp.ora
else
touch $ORACLE_HOME/dbs/initgerp.ora
echo "db_name=gerp" > $ORACLE_HOME/dbs/initgerp.ora
echo "db_unique_name=gerp" >> $ORACLE_HOME/dbs/initgerp.ora
fi
orapwd file=$ORACLE_HOME/dbs/orapwgerp password=rfvgy force=y
# startup gerp to nomount with new pfile
$ORACLE_HOME/bin/sqlplus "/as sysdba" <<EOF
startup nomount pfile=$ORACLE_HOME/dbs/initgerp.ora ;
exit;
EOF
# clone OADB1 to gerp using RMAN script
$ORACLE_HOME/bin/rman target sys/rfvgy@erp auxiliary sys/rfvgy@gerp << EOF
run {
duplicate target database to gerp from active database
password file
spfile
parameter_value_convert 'perp1','gerp'
set db_name='gerp'
set db_unique_name='gerp'
set instance_name='gerp'
set control_files='/u03/gerp/app/oradata/gerp/controlfile/control01.ctl','/u03/gerp/app/oradata/gerp/controlfile/control02.ctl'
set log_file_name_convert='+DATA/perp/onlinelog/','/u03/gerp/app/oradata/gerp/onlinelog/','+ARCH/perp/','/u03/gerp/app/oradata/gerp/arch/'
set db_file_name_convert='+DATA/perp/datafile/','/u03/gerp/app/oradata/gerp/datafile/','+DATA/perp/tempfile/','/u03/gerp/app/oradata/gerp/tempfile1/','+INDX/perp/datafile/','/u03/gerp/app/oradata/gerp/datafile/', ' +DATA/perp/controlfile/','/u03/gerp/app/oradata/gerp/controlfile/','+TEMP/perp/tempfile/','/u03/gerp/app/oradata/gerp/tempfile/'
set cluster_database 'FALSE'
set log_archive_dest_1='LOCATION=/u03/gerp/app/oradata/gerp/arch'
set audit_file_dest='/u03/gerp/app/11.2.0/rdbms/audit'
set shared_pool_size '2G'
set sga_target '10G'
set sga_max_size '10G'
set pga_aggregate_target '2G'
set diagnostic_dest='/u03/gerp'
set utl_file_dir='/u03/gerp/gerptmp'
;
}
EOF
# disable archive log mode for gerp
$ORACLE_HOME/bin/sqlplus "/as sysdba" <<EOF
shutdown immediate;
startup mount;
alter database noarchivelog;
exit;
EOF
浙公网安备 33010602011771号