duplicate 记录20160326-20160329

Posted on 2017-03-29 11:20  jinpuxiang  阅读(192)  评论(0)    收藏  举报

最近做了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