首页 > 数据库 > Oracle > rman:HA 同构异机恢复
步骤一:备份
备份机 | 10.150.224.6 |
备份目录 | /backup /backup/oracle |
备份类型 | 全备 |
操作记录:
1.在9i上执行备份脚本hot.sh,
脚本内容:
====================================================
#!/bin/sh
# ---------------------------------------------------------------------------
# Determine the user which is executing this script.
# ---------------------------------------------------------------------------
CUSER=`id |cut -d"(" -f2 | cut -d ")" -f1`
# ---------------------------------------------------------------------------
# Put output in
# Note: output directory requires write permission.
# ---------------------------------------------------------------------------
RMAN_LOG_FILE=${0}.out
# ---------------------------------------------------------------------------
# You may want to delete the output file so that backup information does
# not accumulate. If not, delete the following lines.
# ---------------------------------------------------------------------------
if [ -f "$RMAN_LOG_FILE" ]
then
rm -f "$RMAN_LOG_FILE"
fi
# -----------------------------------------------------------------
# Initialize the log file.
# -----------------------------------------------------------------
echo >> $RMAN_LOG_FILE
chmod 666 $RMAN_LOG_FILE
# ---------------------------------------------------------------------------
# Log the start of this script.
# ---------------------------------------------------------------------------
echo Script $0 >> $RMAN_LOG_FILE
echo ==== started on `date` ==== >> $RMAN_LOG_FILE
echo >> $RMAN_LOG_FILE
# ---------------------------------------------------------------------------
# Replace /db/oracle/product/ora81, below, with the Oracle home path.
# ---------------------------------------------------------------------------
ORACLE_HOME=/u01/prod/proddb
export ORACLE_HOME
# ---------------------------------------------------------------------------
# Replace ora81, below, with the Oracle SID of the target database.
# ---------------------------------------------------------------------------
ORACLE_SID=prod
export ORACLE_SID
# ---------------------------------------------------------------------------
# Replace ora81, below, with the Oracle DBA user id (account).
# ---------------------------------------------------------------------------
ORACLE_USER=oraprod
# ---------------------------------------------------------------------------
# Set the target connect string.
# Replace "sys/manager", below, with the target connect string.
# ---------------------------------------------------------------------------
TARGET_CONNECT_STR=sys/sys@orcl
# ---------------------------------------------------------------------------
# Set the Oracle Recovery Manager name.
# ---------------------------------------------------------------------------
RMAN=$ORACLE_HOME/bin/rman
# ---------------------------------------------------------------------------
# Print out the value of the variables set by this script.
# ---------------------------------------------------------------------------
echo >> $RMAN_LOG_FILE
echo "RMAN: $RMAN" >> $RMAN_LOG_FILE
echo "ORACLE_SID: $ORACLE_SID" >> $RMAN_LOG_FILE
echo "ORACLE_USER: $ORACLE_USER" >> $RMAN_LOG_FILE
echo "ORACLE_HOME: $ORACLE_HOME" >> $RMAN_LOG_FILE
echo >> $RMAN_LOG_FILE
echo "ORACLE_FULL: $ORACLE_FULL" >> $RMAN_LOG_FILE
echo "ORACLE_INCR: $ORACLE_INCR" >> $RMAN_LOG_FILE
# ---------------------------------------------------------------------------
# NOTE: This script assumes that the database is properly opened. If desired,
# this would be the place to verify that.
# ---------------------------------------------------------------------------
echo >> $RMAN_LOG_FILE
if [ "$ORACLE_FULL" = "1" ]
then
echo "Full backup requested" >> $RMAN_LOG_FILE
BACKUP_TYPE="INCREMENTAL LEVEL=0"
elif [ "$ORACLE_INCR" = "1" ]
then
echo "Differential incremental backup requested" >> $RMAN_LOG_FILE
BACKUP_TYPE="INCREMENTAL LEVEL=1"
elif [ "$BACKUP_TYPE" = "" ]
then
echo "Default - Full backup requested" >> $RMAN_LOG_FILE
BACKUP_TYPE="INCREMENTAL LEVEL=0"
fi
# ---------------------------------------------------------------------------
CMD_STR="
ORACLE_HOME=$ORACLE_HOME
export ORACLE_HOME
ORACLE_SID=$ORACLE_SID
export ORACLE_SID
$RMAN target $TARGET_CONNECT_STR nocatalog msglog $RMAN_LOG_FILE append << EOF
RUN {
ALLOCATE CHANNEL ch00 TYPE DISK;
ALLOCATE CHANNEL ch01 TYPE DISK;
BACKUP
$BACKUP_TYPE
SKIP INACCESSIBLE
TAG hot_db_bk_level0
FILESPERSET 5
# recommended format
FORMAT '/db/scripts/backup/bk_%s_%p_%t'
DATABASE diskartio=0;
sql 'alter system archive log current';
RELEASE CHANNEL ch00;
RELEASE CHANNEL ch01;
# ---------------------------------------------------------------------------
# backup all archive logs
ALLOCATE CHANNEL ch00 TYPE DISK;
ALLOCATE CHANNEL ch01 TYPE DISK;
BACKUP
filesperset 20
FORMAT '/db/scripts/backup/al_%s_%p_%t'
ARCHIVELOG ALL DELETE INPUT;
RELEASE CHANNEL ch00;
RELEASE CHANNEL ch01;
# ---------------------------------------------------------------------------
ALLOCATE CHANNEL ch00 TYPE DISK;
BACKUP
# recommended format
FORMAT '/db/scripts/backup/cntrl_%s_%p_%t'
CURRENT CONTROLFILE;
RELEASE CHANNEL ch00;
}
EOF
"
# Initiate the command string
if [ "$CUSER" = "root" ]
then
su - $ORACLE_USER -c "$CMD_STR" >> $RMAN_LOG_FILE
RSTAT=$?
else
/usr/bin/sh -c "$CMD_STR" >> $RMAN_LOG_FILE
RSTAT=$?
fi
# ---------------------------------------------------------------------------
if [ "$RSTAT" = "0" ]
then
LOGMSG="ended successfully"
else
LOGMSG="ended in error"
fi
echo >> $RMAN_LOG_FILE
echo Script $0 >> $RMAN_LOG_FILE
echo ==== $LOGMSG on `date` ==== >> $RMAN_LOG_FILE
echo >> $RMAN_LOG_FILE
exit $RSTAT
====================================================
2..配置控制文件自动备份,并指定备份目标目录/backup
RMAN > configure controlfile autobackup on;
RMAN > configure controlfile autobackup format for device type disk to ‘/backup/%F’;
3.将备份的文件FTP到7号机,存放在7号机的/backup目录下。
步骤二:恢复
目标机 | 10.150.224.7 |
Oracle版本 | Oracle 9i |
恢复类型 | 异机恢复 |
操作步骤
登录rman,并启动至nomount
RMAN > startup nomount;
2. 从/backup恢复控制文件
RMAN > restore controlfile from ‘/backup/ c-89683826-20100720-01';
3. 将生产数据库对应的文件目录,将其恢复到7号机的文件目录
根据10.150.224.6机上的数据文件信息将7号机的文件对应到相应的目录
脚本:
Run
{
set newname for datafile '/u01/prod/proddata/system01.dbf' to
'/u03/prod/proddata/system01.dbf';
set newname for datafile '/u01/prod/proddata/system02.dbf' to
'/u03/prod/proddata/system02.dbf';
set newname for datafile '/u01/prod/proddata/system03.dbf' to
'/u03/prod/proddata/system03.dbf';
set newname for datafile '/u01/prod/proddata/system04.dbf' to
'/u03/prod/proddata/system04.dbf';
set newname for datafile '/u01/prod/proddata/system05.dbf' to
'/u03/prod/proddata/system05.dbf';
set newname for datafile '/u01/prod/proddata/system06.dbf' to
'/u03/prod/proddata/system06.dbf';
set newname for datafile '/u01/prod/proddata/system07.dbf' to
'/u03/prod/proddata/system07.dbf';
set newname for datafile '/u01/prod/proddata/system08.dbf' to
'/u03/prod/proddata/system08.dbf';
set newname for datafile '/u01/prod/proddata/system09.dbf' to
'/u03/prod/proddata/system09.dbf';
set newname for datafile '/u01/prod/proddata/system10.dbf' to
'/u03/prod/proddata/system10.dbf';
set newname for datafile '/u01/prod/proddata/system11.dbf' to
'/u03/prod/proddata/system11.dbf';
set newname for datafile '/u01/prod/proddata/undo01.dbf' to
'/u03/prod/proddata/undo01.dbf';
set newname for datafile '/u01/prod/proddata/a_archive01.dbf' to
'/u03/prod/proddata/a_archive01.dbf';
set newname for datafile '/u01/prod/proddata/a_int01.dbf' to
'/u03/prod/proddata/a_int01.dbf';
set newname for datafile '/u01/prod/proddata/a_media01.dbf' to
'/u03/prod/proddata/a_media01.dbf';
set newname for datafile '/u01/prod/proddata/a_nolog01.dbf' to
'/u03/prod/proddata/a_nolog01.dbf';
set newname for datafile '/u01/prod/proddata/a_queue01.dbf' to
'/u03/prod/proddata/a_queue01.dbf';
set newname for datafile '/u01/prod/proddata/a_queue02.dbf' to
'/u03/prod/proddata/a_queue02.dbf';
set newname for datafile '/u01/prod/proddata/a_ref01.dbf' to
'/u03/prod/proddata/a_ref01.dbf';
set newname for datafile '/u01/prod/proddata/a_ref02.dbf' to
'/u03/prod/proddata/a_ref02.dbf';
set newname for datafile '/u01/prod/proddata/a_summ01.dbf' to
'/u03/prod/proddata/a_summ01.dbf';
set newname for datafile '/u01/prod/proddata/a_txn_data01.dbf' to
'/u03/prod/proddata/a_txn_data01.dbf';
set newname for datafile '/u01/prod/proddata/a_txn_data02.dbf' to
'/u03/prod/proddata/a_txn_data02.dbf';
set newname for datafile '/u01/prod/proddata/a_txn_data03.dbf' to
'/u03/prod/proddata/a_txn_data03.dbf';
set newname for datafile '/u01/prod/proddata/a_txn_ind01.dbf' to
'/u03/prod/proddata/a_txn_ind01.dbf';
set newname for datafile '/u01/prod/proddata/a_txn_ind02.dbf' to
'/u03/prod/proddata/a_txn_ind02.dbf';
set newname for datafile '/u01/prod/proddata/a_txn_ind03.dbf' to
'/u03/prod/proddata/a_txn_ind03.dbf';
set newname for datafile '/u01/prod/proddata/a_txn_ind04.dbf' to
'/u03/prod/proddata/a_txn_ind04.dbf';
set newname for datafile '/u01/prod/proddata/a_txn_ind05.dbf' to
'/u03/prod/proddata/a_txn_ind05.dbf';
set newname for datafile '/u01/prod/proddata/ctxd01.dbf' to
'/u03/prod/proddata/ctxd01.dbf';
set newname for datafile '/u01/prod/proddata/odm.dbf' to
'/u03/prod/proddata/odm.dbf';
set newname for datafile '/u01/prod/proddata/olap.dbf' to
'/u03/prod/proddata/olap.dbf';
set newname for datafile '/u01/prod/proddata/owad01.dbf' to
'/u03/prod/proddata/owad01.dbf';
set newname for datafile '/u01/prod/proddata/portal01.dbf' to
'/u03/prod/proddata/portal01.dbf';
set newname for datafile '/u01/prod/proddata/xzrpt.dbf' to
'/u03/prod/proddata/xzrpt.dbf';
restore database;
switch datafile all;
}
4.plsql下,执行
SQL > select member from v$logfile;
在7号机上的plsql下根据6号机的查询结果,修改联机日志和名称,目的是防止在Open resetlogs时报错
SQL > alter database rename file '/u01/prod/proddata/log
'/u03/prod/proddata/log
SQL > alter database rename file '/u01/prod/proddata/log01b.dbf' to
'/u03/prod/proddata/log01b.dbf';
SQL > alter database rename file '/u01/prod/proddata/log
'/u03/prod/proddata/log
SQL > alter database rename file '/u01/prod/proddata/log02b.dbf' to
'/u03/prod/proddata/log02b.dbf';
-------------------------------
5.在rman下
RMAN > list backup of archivelog all;
根据sequence以及thread指定恢复到thread 1 sequence 21857
(只有一组在线联机重做日志)
RMAN > run {
set until sequence 21857 thread 1;
recover database;}
或者回到RMAN直接执行
RMAN > recover database;
6.后续操作:
重建临时表空间
SQL > create temporary tablespace temp1 temfile '/u03/prod/proddata/temp
SQL > alter database default temporary tablespace temp1;
SQL > drop database temp including contents and datafiles;
[@more@]
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24487368/viewspace-1037278/ ,如需转载,请注明出处,否则将追究法律责任。