“copy.sh”内容如下:
#!/bin/sh ### ### 0 Subprogram Section Begin ### v_start_time=$(date +%"s") sub_confirm() { sub_answer() { unset SUBANS sub_sub_answer(){ SUBANS=`echo $SUBANS |tr -d "[:blank:]"` if [ -z $SUBANS ] then SUBANS="NULL" fi } # # Sub_sub_answer end. # read -p "$1" SUBANS sub_sub_answer # Line15 # Line15 begin: Deal with $SUNANS: until [ $SUBANS =="y"-o$SUBANS =="n" ] do echo "This question should be answered either with \"y\" or \"n\"." read -p "$1" SUBANS sub_sub_answer done # Line15 end. } # # Sub_answer end. # unset SUBCON1 unset SUBCON2 SUBCON1=0 SUBCON2=1 until [ $(echo $SUBCON1|tr -d "[:blank:]")== $(echo $SUBCON2|tr -d "[:blank:]") ] do read -p "$1" SUBCON1 sub_answer "Your input is: \"$SUBCON1\". Are you sure ?(y/n) " if [ -z $(echo $SUBCON1|tr -d "[:blank:]") ] then SUBCON1="NULL" fi if [ $SUBANS == "y" ] then SUBCON2=$SUBCON1 fi done } v_dbname=`cat /home/oracle/dbname 2>/dev/null | tr -d [:blank:]` v_first_node=`cat /home/oracle/nodeinfo 2>/dev/null | head -n 1` v_second_node=`cat /home/oracle/nodeinfo 2>/dev/null | tail -n 1` ### ### 0 Subprogram Section End ### 1 Main Section Begin ### # 1 Decision Root or Oracle Begin if [ $(id -u) == 0 ] then echo "Please login as oracle NOT root." exit fi # 1 Decision Root or Oracle End # 2 Stop DB Begin if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then if [ -z $v_dbname ] then sub_confirm "Please specify the database name: ? " v_dbname=$SUBCON1 echo $v_dbname>/home/oracle/dbname fi if [ -z $v_first_node ] then sub_confirm "Please specify the first node name: ? " v_first_node=$SUBCON1 fi if [ -z $v_second_node ] then sub_confirm "Please specify the second node name: ? " v_second_node=$SUBCON1 fi srvctl stop instance -d $v_dbname -i ${v_dbname}1 sudo /u01/app/11.2.0/grid/bin/crs_stat -t srvctl stop instance -d $v_dbname -i ${v_dbname}2 sudo /u01/app/11.2.0/grid/bin/crs_stat -t sudo /u01/app/11.2.0/grid/bin/crsctl stop has ssh $v_second_node "sudo /u01/app/11.2.0/grid/bin/crsctl stop has" echo "Please wait ......" sleep 60 fi /usr/bin/stopdb &>/dev/null # 2 Stop DB End # 3 Man Directory Begin if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then if [ ! -d /u01/data/backup ] then sub_confirm "Please input the full path of directory to hold the 11 rawdevices backup of RAC, need about 18G ( oracle user should have !!!WRITE PERMISSION!!! in it): ? " else SUBCON1=/u01/data fi rm -rf$SUBCON1/backup 2>/dev/null mkdir -p $SUBCON1/backup 2>/dev/null chown oracle:oinstall $SUBCON1/backup fi #rm -rf /u01/app/oracle/man_recovery_area/orcl/backup/ mkdir -p /u01/app/oracle/man_recovery_area/orcl 2>/dev/null # 3 Man Directory End # 4 Backup Important Begin if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then for i in `ls /dev/oracleasm/disks` do dd if=/dev/oracleasm/disks/$i of=$SUBCON1/backup/$i.img bs=4M & done wait fi # 4 Backup Important End # 5 Backup Miscellaneous Begin # 5 Backup Miscellaneous End # 6 Start DB Begin if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then sudo /u01/app/11.2.0/grid/bin/crsctl start has ssh $v_second_node "sudo /u01/app/11.2.0/grid/bin/crsctl start has" v_end_time=$(date +%"s") echo "总共花了:$[ $v_end_time - $v_start_time ]秒。再等90秒为你启动集群。" sleep 90 sudo /u01/app/11.2.0/grid/bin/crsctl start resource ora.DATA.dg sudo /u01/app/11.2.0/grid/bin/crsctl start resource ora.FRA.dg srvctl start database -d $v_dbname sudo /u01/app/11.2.0/grid/bin/crs_stat -t fi # 6 End DB End |
“rever.sh”内容如下:
#!/bin/sh ### ### 0 Subprogram Section Begin ### v_start_time=$(date +%"s") sub_confirm() { sub_answer() { unset SUBANS # # Sub_sub_answer begin: sub_sub_answer(){ SUBANS=`echo $SUBANS |tr -d "[:blank:]"` if [ -z $SUBANS ] then SUBANS="NULL" fi } # # Sub_sub_answer end. # read -p "$1" SUBANS sub_sub_answer # Line15 # Line15 begin: Deal with $SUNANS: until [ $SUBANS =="y"-o$SUBANS =="n" ] do echo "This question should be answered either with \"y\" or \"n\"." read -p "$1" SUBANS sub_sub_answer done # Line15 end. } # # Sub_answer end. # unset SUBCON1 unset SUBCON2 SUBCON1=0 SUBCON2=1 until [ $(echo $SUBCON1|tr -d "[:blank:]")== $(echo $SUBCON2|tr -d "[:blank:]") ] do read -p "$1" SUBCON1 sub_answer "Your input is: \"$SUBCON1\". Are you sure ?(y/n) " if [ -z $(echo $SUBCON1|tr -d "[:blank:]") ] then SUBCON1="NULL" fi if [ $SUBANS == "y" ] then SUBCON2=$SUBCON1 fi done } v_dbname=`cat /home/oracle/dbname 2>/dev/null | tr -d [:blank:]` v_first_node=`cat /home/oracle/nodeinfo 2>/dev/null | head -n 1` v_second_node=`cat /home/oracle/nodeinfo 2>/dev/null | tail -n 1` ### ### 0 Subprogram Section End ### 1 Main Section Begin ### # 1 Decision Root or Oracle Begin if [ $(id -u) == 0 ] then echo "Please login as oracle NOT root." exit fi # 1 Decision Root or Oracle End # 2 Stop DB Begin if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then v_dbname=`cat /home/oracle/dbname | tr -d [:blank:]` v_first_node=`cat /home/oracle/nodeinfo | head -n 1 | tr -d [:blank:]` v_second_node=`cat /home/oracle/nodeinfo | tail -n 1 | tr -d [:blank:]` srvctl stop instance -d $v_dbname -i ${v_dbname}1 -o abort sudo /u01/app/11.2.0/grid/bin/crs_stat -t srvctl stop instance -d $v_dbname -i ${v_dbname}2 -o abort sudo /u01/app/11.2.0/grid/bin/crs_stat -t sudo /u01/app/11.2.0/grid/bin/crsctl stop has ssh $v_second_node "sudo /u01/app/11.2.0/grid/bin/crsctl stop has" echo "Please wait ......" sleep 60 fi emctl stop dbconsole # 2 Stop DB End # 3 Delete Begin # 3 Delete End # 4 Recovery Begin if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then if [ ! -d /u01/data/backup ] then sub_confirm "Please input the full path of directory to hold the 11 rawdevices backup of RAC, need about 18G: ? " else SUBCON1=/u01/data fi for i in `ls /dev/oracleasm/disks` do dd of=/dev/oracleasm/disks/$i if=$SUBCON1/backup/$i.img bs=4M& done wait fi # 4 Recovery End if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then sudo /u01/app/11.2.0/grid/bin/crsctl start has ssh $v_second_node "sudo /u01/app/11.2.0/grid/bin/crsctl start has" v_end_time=$(date +%"s") echo "总共花了:$[ $v_end_time - $v_start_time ]秒。" sleep 90 sudo /u01/app/11.2.0/grid/bin/crsctl start resource ora.DATA.dg sudo /u01/app/11.2.0/grid/bin/crsctl start resource ora.FRA.dg srvctl start database -d $v_dbname sudo /u01/app/11.2.0/grid/bin/crs_stat -t fi |
“copytape-root.sh”内容如下:
#!/bin/sh service observiced stop service mhvtl stop rmmod mhvtl mkdir -p /u01/app/oracle/man_recovery_area/orcl/backup/tape 2>/dev/null cd /opt/ ; tar -zcvf /u01/app/oracle/man_recovery_area/orcl/backup/tape/mhvtl.tgzmhvtl cd /usr/local/oracle/ ; tar -zcvf /u01/app/oracle/man_recovery_area/orcl/backup/tape/backup.tgzbackup cd /usr/etc/; tar -zcvf /u01/app/oracle/man_recovery_area/orcl/backup/tape/ob.tgz ob chown -R oracle:oinstall /u01/app/oracle/man_recovery_area/orcl/backup/tape/ service mhvtl start service observiced start |
“revertape-root.sh”内容如下:
#!/bin/sh service observiced stop service mhvtl stop rmmod mhvtl cd /opt/ ; tar -zxvf /u01/app/oracle/man_recovery_area/orcl/backup/tape/mhvtl.tgz cd /usr/local/oracle/ ; tar -zxvf /u01/app/oracle/man_recovery_area/orcl/backup/tape/backup.tgz cd /usr/etc/; tar -zxvf /u01/app/oracle/man_recovery_area/orcl/backup/tape/ob.tgz sleep 3 service mhvtl start service observiced start lsscsi -g obtool inventory -L lib01 lsscsi -g |
7. Oracle11gR2 RAC备份恢复案例一:完全恢复类场景批量模拟以及恢复要点
7.1 1a_users表空间在线损坏
在PXE推送端主机上运行: |
[root@server1 ~]# bcl --RACGRID11g13 1 三个选项选y。每个选项结束后,分别提供以下输出: “ftp://192.168.0.245/pub/bclresult-xx/prepare” “ftp://192.168.0.245/pub/bclresult-xx/real” “ftp://192.168.0.245/pub/bclresult-xx/end”下同 |
场景模拟脚本内容: |
. /home/oracle/bclcustom-subprogram sub_getting 1a 1a_users表空间在线损坏 sub_detecting sub_creating sub_offlining_users_immediate sub_destroying "users*" sub_revealing echo " " sub_clearing echo "THE END" |
“sub_creating” 调用的“ctable.sql”内容: |
--drop table hr.edu234; -- set echo off set feedback off select* from sys.tname; create tablehr.edu234 ( a number ) tablespace users; alter system switch logfile; insert into hr.edu234 values(1); alter system switch logfile; commit; alter system switch logfile; insert into hr.edu234 values(2); alter system switch logfile; commit; insert into hr.edu234 values(3); alter system switch logfile; commit; insert into hr.edu234 values(4); alter system switch logfile; commit; insert into hr.edu234 values(5); commit; -- set serveroutput on exec dbms_output.put_line(' '); exec dbms_output.put_line('************************** '); exec dbms_output.put_line('Table successfully created.'); exec dbms_output.put_line('************************** '); exec dbms_output.put_line(' '); |
恢复要点: |
以下所有备份恢复实验,如果使用rman,连接catalog与否,用户自选除非注明。 在rman中恢复:restore该数据文件,recover该数据文件。 |
7.2 1b_下线user表空间损坏
在PXE推送端主机上运行: |
[root@server1 ~]# bcl --RACGRID11g13 1b |
场景模拟脚本内容: |
. /home/oracle/bclcustom-subprogram sub_getting 1b 1b_下线user表空间损坏 sub_detecting sub_creating sub_offlining_users_nocatalog LABS-1B-USERS-AFTER-OFFLINE sub_destroying "users*" sub_revealing echo " " sub_clearing echo "THE END" |
“sub_creating” 调用的“ctable.sql”内容: |
同“1a_users表空间在线损坏” |
恢复要点: |
在rman中恢复:restore该数据文件,online该表空间 。 |
7.3 1c_只读user表空间损坏
在PXE推送端主机上运行: |
[root@server1 ~]# bcl --RACGRID11g13 1c |
场景模拟脚本内容: |
. /home/oracle/bclcustom-subprogram sub_getting 1c 1c_只读user表空间损坏 sub_detecting sub_creating sub_readingonly_users_nocatalog LABS-1C-USERS-AFTER-READ-ONLY sub_offlining_users_immediate sub_destroying "users*" sub_revealing echo " " sub_clearing echo "THE END" |
“sub_creating” 调用的“ctable.sql”内容: |
同“1a_users表空间在线损坏” |
恢复要点: |
在rman中恢复:restore该数据文件,online该表空间,read write该表空间。 |
7.4 1d_users表空间热备
在PXE推送端主机上运行: |
[root@server1 ~]# bcl --RACGRID11g13 1d |
场景模拟脚本内容: |
. /home/oracle/bclcustom-subprogram sub_getting 1d 1d_users表空间热备 sub_detecting sub_creating echo " " echo " " sub_revealing sub_shutdowning_abort sub_clearing echo "THE END" |
“sub_creating” 调用的“ctable.sql”内容: |
--drop table hr.edu234; -- set echo off set feedback off select* from sys.tname; create tablehr.edu234 ( a number ) tablespace users; alter system switch logfile; insert into hr.edu234 values(1); alter system switch logfile; commit; alter system switch logfile; insert into hr.edu234 values(2); alter system switch logfile; commit; insert into hr.edu234 values(3); alter system switch logfile; commit; set echo on set feedback on alter tablespace usersbegin backup; select * from v$backup; set echo off set feedback off insert into hr.edu234 values(4); alter system switch logfile; commit; insert into hr.edu234 values(5); commit; -- set serveroutput on exec dbms_output.put_line(' '); exec dbms_output.put_line('************************** '); exec dbms_output.put_line('Table successfully created.'); exec dbms_output.put_line('************************** '); exec dbms_output.put_line(' '); |
恢复要点: |
1)启动到mount在sqlplus中恢复:alter database end backup; alter database open; 2)srvctl启动其他实例。 |
7.5 3_system表空间离线损坏
在PXE推送端主机上运行: |
[root@server1 ~]# bcl --RACGRID11g13 3 |
场景模拟脚本内容: |
. /home/oracle/bclcustom-subprogram sub_getting 3 3_system表空间离线损坏 sub_detecting sub_creating sub_shutdowning_normal sub_destroying "system*" sub_revealing echo " " sub_clearing echo "THE END" |
“sub_creating” 调用的“ctable.sql”内容: |
--drop table sys.edu234; -- set echo off set feedback off select* from sys.tname; create tablesys.edu234 ( a number ) tablespace system; alter system switch logfile; insert into sys.edu234 values(1); alter system switch logfile; commit; alter system switch logfile; insert into sys.edu234 values(2); alter system switch logfile; commit; insert into sys.edu234 values(3); alter system switch logfile; commit; insert into sys.edu234 values(4); alter system switch logfile; commit; insert into sys.edu234 values(5); commit; -- set serveroutput on exec dbms_output.put_line(' '); exec dbms_output.put_line('************************** '); exec dbms_output.put_line('Table successfully created.'); exec dbms_output.put_line('************************** '); exec dbms_output.put_line(' '); |
恢复要点: |
1)启动到mount在rman中恢复:restore system表空间,recoversystem 表空间。 2)srvctl启动其他实例。 |
7.6 4_tbsocp05_test没有备份的表空间损坏
在PXE推送端主机上运行: |
[root@server1 ~]# bcl --RACGRID11g13 4 |
场景模拟脚本内容: |
. /home/oracle/bclcustom-subprogram sub_getting 4 4_tbsocp05_test没有备份的表空间损坏 sub_detecting echo "***TABLESPACE CREATED***" sub_creating sub_offlining_tbsocp05_test_immediate sub_destroying "tbsocp05_test*" sub_revealing echo " " sub_clearing echo "THE END" |
“sub_creating” 调用的“ctable.sql”内容: |
--drop table hr.edu234; -- set echo off set feedback off select* from sys.tname; create tablespace tbsocp05_test datafile size 5M; create table hr.edu234 ( a number ) tablespace tbsocp05_test; alter system switch logfile; insert into hr.edu234 values(1); alter system switch logfile; commit; alter system switch logfile; insert into hr.edu234 values(2); alter system switch logfile; commit; insert into hr.edu234 values(3); alter system switch logfile; commit; insert into hr.edu234 values(4); alter system switch logfile; commit; insert into hr.edu234 values(5); commit; -- set serveroutput on exec dbms_output.put_line(' '); exec dbms_output.put_line('************************** '); exec dbms_output.put_line('Table successfully created.'); exec dbms_output.put_line('************************** '); exec dbms_output.put_line(' '); |
恢复要点: |
1)在sqlplus里恢复:alter database create datafile '原文件名'; 2)OMF改了文件名,因此:alter database rename file '旧文件名' to'新文件名'; 3)recover datafile '新文件名' ; |
8. Oracle11gR2 RAC备份恢复案例二:不完全恢复类场景批量模拟以及恢复要点
8.1 5_基于时间的不完全恢复
在PXE推送端主机上运行: |
[root@server1 ~]# bcl --RACGRID11g13 5 |
场景模拟脚本内容: |
. /home/oracle/bclcustom-subprogram sub_getting 5 5_基于时间的不完全恢复 sub_detecting sub_creating echo " " echo " " sub_revealing echo " " sub_clearing echo "THE END" |
“sub_creating” 调用的“ctable.sql”内容: |
--drop table hr.edu234; -- set echo off set feedback off select* from sys.tname; create tablehr.edu234 ( a number ) tablespace users; alter system switch logfile; insert into hr.edu234 values(1); alter system switch logfile; commit; -- set serveroutput on exec dbms_output.put_line(' '); exec dbms_output.put_line('************************** '); exec dbms_output.put_line('Table successfully created.'); exec dbms_output.put_line('************************** '); exec dbms_output.put_line(' '); -- select * from hr.edu234; exec dbms_output.put_line('********************************************************************************************************** '); exec dbms_output.put_line('After the displayed moment, the table will continuously be inserted with more rows, but finnally be droped.'); exec dbms_output.put_line('********************************************************************************************************** '); exec dbms_output.put_line(' '); host sleep 5 alter session set nls_date_format='yyyy-mm-dd:hh24:mi:ss'; select sysdate from dual; host sleep 3 alter system switch logfile; insert into hr.edu234 values(2); alter system switch logfile; commit; insert into hr.edu234 values(3); alter system switch logfile; commit; insert into hr.edu234 values(4); alter system switch logfile; commit; insert into hr.edu234 values(5); commit; select * from hr.edu234; drop table hr.edu234 purge; |
恢复要点: |
1)启动到mount在rman的run{}块中恢复:根据ctable.sql输出的时间set until time;restore database;recover database;alter database open resetlogs; 2)srvctl启动其他实例。 |
8.2 6a_基于log序列号的不完全恢复
在PXE推送端主机上运行: |
[root@server1 ~]# bcl --RACGRID11g13 6a |
场景模拟脚本内容: |
. /home/oracle/bclcustom-subprogram sub_getting 6a 6a_基于log序列号的不完全恢复 sub_detecting sub_creating echo " " echo " " sub_revealing echo " " sub_clearing echo "THE END" |
“sub_creating” 调用的“ctable.sql”内容: |
--drop table hr.edu234; -- set echo off set feedback off select* from sys.tname; create tablehr.edu234 ( a number ) tablespace users; alter system switch logfile; insert into hr.edu234 values(1); alter system switch logfile; commit; -- set serveroutput on exec dbms_output.put_line(' '); exec dbms_output.put_line('************************** '); exec dbms_output.put_line('Table successfully created.'); exec dbms_output.put_line('************************** '); exec dbms_output.put_line(' '); -- select * fromhr.edu234; exec dbms_output.put_line('*********************************************************************************************************** '); exec dbms_output.put_line('After the displayed moment, the table will continuously be inserted with more rows, but finnally be droped..'); exec dbms_output.put_line('*********************************************************************************************************** '); exec dbms_output.put_line(' '); host sleep 5 selectTHREAD#, SEQUENCE# from v$log; archive log list host sleep 3 alter system switch logfile; insert into hr.edu234 values(2); alter system switch logfile; commit; insert into hr.edu234 values(3); alter system switch logfile; commit; insert into hr.edu234 values(4); alter system switch logfile; commit; insert into hr.edu234 values(5); commit; select * fromhr.edu234; drop table hr.edu234 purge; |
恢复要点: |
注意:如果刚做完实验5,本场景之前,rever环境 1)启动到mount在rman的run{}块中恢复:根据ctable.sql输出的日志序列号set until sequence xx thread x;restore database;recover database;alter database open resetlogs; 2)特别注意ctable.sql输出的日志序列号需要加1,因为until是“不包含”的意思。 3)srvctl启动其他实例。 |
8.3 6b_基于cancel的不完全恢复
在PXE推送端主机上运行: |
[root@server1 ~]# bcl --RACGRID11g13 6b |
“bcl --RACGRID11g13 6b”之后会自动运行的 “real-post”脚本内容(其他场景无本项): |
#!/bin/sh rm -f /root/tmp/bclcustom.sh for i in `ls /root/tmp/bclresult*` do v_botang_thread=$( grep -A 2 INSTANCE_NUMBER $i | tail -n 1 | tr -d '[:blank:]') v_botang_currlog=$( grep'Current log sequence' $i| tail -n 1 | cut -c 29- ) v_botang_currlogplus1=$[ $v_botang_currlog + 1 ] v_botang_oldestlog=$( grep'Oldest online log sequence' $i | tail -n 1 | cut -c29- ) v_botang_oldestlogbefore=$( grep'Oldest online log sequence' $i | head -n 1 | cut -c29- ) v_botang_nextlog=$( grep'Next log sequence to archive' $i | tail -n 1 | cut -c 29- ) v_botang_nextlogbefore=$( grep'Next log sequence to archive' $i | head -n 1 | cut -c 29- ) v_botang_currlogdest=$( grep 'Archive destination' $i| tail -n 1 | cut -c 29- ) v_botang_ip=$(echo $i| cut -f 2 -d - ) perl -i -pe "s,Oldest online log sequence$v_botang_oldestlog,Oldest online log sequenceXXX," $i perl -i -pe "s,Oldest online log sequence$v_botang_oldestlogbefore,Oldest online log sequenceAAA," $i perl -i -pe "s,Next log sequence to archive$v_botang_nextlog,Next log sequence to archiveYYY," $i perl -i -pe "s,Next log sequence to archive$v_botang_nextlogbefore,Next log sequence to archiveBBB," $i grep -v 'Current log sequence' $i > $i.tmp rm -f$i mv $i.tmp$i cat > /root/tmp/rac.sh < if [ -f /u01/app/11.2.0/grid/dbs/hc_+ASM1.dat ] then su - grid -c "export ORACLE_SID=+ASM1;export ORACLE_HOME=/u01/app/11.2.0/grid;asmcmd"< find / thread_${v_botang_thread}_seq_$v_botang_currlogplus1* exit EOF sleep 1 v_path1=\$(cut -f 2 -d '+' /home/oracle/asm| head -n 1 | tr -d [:blank:]) v_path2="+"\$v_path1 su - grid -c "export ORACLE_SID=+ASM1;export ORACLE_HOME=/u01/app/11.2.0/grid;asmcmd"< rm -rf \$v_path2 exit EOF fi EOL scp-q -o ConnectTimeout=1-o StrictHostKeyChecking=no -o NumberOfPasswordPrompts=1 -o ConnectionAttempts=1 /root/tmp/rac.sh$v_botang_ip:/usr/bin ssh -q -o ConnectTimeout=1-o StrictHostKeyChecking=no -o NumberOfPasswordPrompts=1 -o ConnectionAttempts=1 $v_botang_ip "chmod +x /usr/bin/rac.sh" ssh -q -o ConnectTimeout=1-o StrictHostKeyChecking=no -o NumberOfPasswordPrompts=1 -o ConnectionAttempts=1 $v_botang_ip /usr/bin/rac.sh >>$i 2>&1 ssh -q -o ConnectTimeout=1-o StrictHostKeyChecking=no -o NumberOfPasswordPrompts=1 -o ConnectionAttempts=1 $v_botang_ip "rm -rf /usr/bin/rac.sh" echo "DELETE ARCHIVELOGS SUCCESSFULLY,THE END AGAIN" >> $i done |
场景模拟脚本内容: |
. /home/oracle/bclcustom-subprogram sub_getting 6b 6b_基于cancel的不完全恢复 sub_detecting sub_creating sub_shutdowning_normal sub_destroying "system*" sub_destroying "undotbs1*" sub_destroying "undotbs2*" sub_destroying "sysaux*" sub_destroying "example*" sub_destroying "users*" sub_revealing echo " " sub_clearing echo "THE END" |
“sub_creating” 调用的“ctable.sql”内容: |
同“6a_基于log序列号的不完全恢复” |
恢复要点: |
注意:如果刚做完实验6a,本场景之前,rever环境 1)归档日志被删除,日志序列号请用asmcmd确认。 2)为了练习cancel语法,本实验在sqlplus进行。 3)启动到mount在rman中做一些预备工作:restore那些delete input 的archivelog;restore database; 4)在sqlplus中恢复:recover database until cancel; alter database open resetlogs; 5)srvctl启动其他实例。 |
8.4 7a_当前控制文件和数据文件完好_日志文件全部损坏_正常关机不完全恢复_数据不丢_不需备份
在PXE推送端主机上运行: |
[root@server1 ~]# bcl --RACGRID11g13 7a |
场景模拟脚本内容: |
. /home/oracle/bclcustom-subprogram sub_getting 7a 7a_当前控制文件和数据文件完好_日志文件全部损坏_正常关机不完全恢复_数据不丢_不需备份 sub_detecting sub_creating sub_shutdowning_normal sub_destroying "group*" sub_revealing echo " " sub_clearing echo "THE END" |
“sub_creating” 调用的“ctable.sql”内容: |
同“1a_users表空间在线损坏” |
恢复要点: |
1)启动到mount在sqlplus中恢复:recover database until cancel; alter database open resetlogs; 2)srvctl启动其他实例。 |
8.5 7b_当前控制文件和数据文件完好_日志文件全部损坏_不正常关机不完全恢复
在PXE推送端主机上运行: |
[root@server1 ~]# bcl --RACGRID11g13 7b |
场景模拟脚本内容: |
. /home/oracle/bclcustom-subprogram sub_getting 7b 7b_当前控制文件和数据文件完好_日志文件全部损坏_不正常关机不完全恢复 sub_detecting sub_creating sub_shutdowning_abort sub_destroying "group*" sub_revealing echo " " sub_clearing echo 'From then on, catalog your database, but use it or not depends on you when recovering !!!' echo "THE END" |
“sub_creating” 调用的“ctable.sql”内容: |
同“1a_users表空间在线损坏” |
恢复要点: |
注意:如果刚做完实验7a,本场景之前,rever环境 1)先按7a做,会失败。失败时会提示在线日志文件current组的sequence号。日志序列号请用asmcmd确认。 2)在rman的run{}块中恢复:set until sequence 在线日志文件current组的sequence号thread x ; restore database;recover database;alterdatabase open resetlogs; 3)srvctl启动其他实例。 |
8.6 8a_当前控制文件损坏_不完全恢复_用控制文件二进制备份_数据不丢_不需备份
在PXE推送端主机上运行: |
注意:此编号之后的实验,请准备好catalog。恢复目录存在于一台IP为192.168.0.90的主机上,服务名为“rcat.example.com”,监听端口为:“1521”。恢复目录用户名为“u90”,密码为“oracle_4U”。请事先准备好该设备。 [root@server1 ~]# bcl --RACGRID11g13 8a |
场景模拟脚本内容: |
. /home/oracle/bclcustom-subprogram sub_getting 8a 8a_当前控制文件损坏_不完全恢复_用控制文件二进制备份_数据不丢_不需备份 sub_detecting sub_creating sub_backingup_controlfile_nocatalog LABS-8A-CONTROLFILE sub_resync_catalog sub_shutdowning_abort sub_destroying "current*" sub_revealing echo " " sub_clearing echo "THE END" |
“sub_creating” 调用的“ctable.sql”内容: |
同“1a_users表空间在线损坏” |
恢复要点: |
1)启动到nomount在rman中恢复:restore controlfile;mount数据库 2)在rman中恢复:recover database;alter database open resetlogs;(二进制控制文件restore后指导的恢复,都要resetlogs) 4)srvctl启动其他实例。 |
8.7 8b_当前控制文件损坏_完全恢复_用控制文件脚本_不需备份
在PXE推送端主机上运行: |
[root@server1 ~]# bcl --RACGRID11g13 8b |
场景模拟脚本内容: |
. /home/oracle/bclcustom-subprogram sub_getting 8b 8b_当前控制文件损坏_完全恢复_用控制文件脚本_不需备份 sub_detecting sub_creating sub_scripting_controlfile_nocatalog sub_deleting_backup_controlfile_nocatalog sub_shutdowning_abort sub_destroying "current*" sub_revealing echo " " sub_clearing echo "THE END" |
“sub_creating” 调用的“ctable.sql”内容: |
同“1a_users表空间在线损坏” |
恢复要点: |
1)找到sub_scripting_controlfile_nocatalog给出的trace文件名,编辑成sql脚本:留下set #1 noresetlogs部分,去掉set #2。 2)启动到nomount在sqlplus恢复:改cluster_database初始化参数为false;执行以上脚本;改cluster_database初始化参数为true;recover database;alter database open; 3)srvctl启动其他实例。 |
8.8 9a_当前控制文件损坏_下线user表空间不完全恢复_用控制文件二进制备份_数据不丢_不需备份
在PXE推送端主机上运行: |
[root@server1 ~]# bcl --RACGRID11g13 9a |
场景模拟脚本内容: |
. /home/oracle/bclcustom-subprogram sub_getting 9a 9a_当前控制文件损坏_下线user表空间不完全恢复_用控制文件二进制备份_数据不丢_不需备份 sub_detecting sub_creating sub_backingup_controlfile_nocatalog LABS-9A-CONTROL-BEFORE-OFFLINE sub_offlining_users_nocatalog LABS-9A-USERS-AFTER-OFFLINE sub_backingup_controlfile_nocatalog LABS-9A-CONTROL-AFTER-OFFLINE sub_resync_catalog sub_shutdowning_abort sub_destroying "current*" sub_revealing echo " " sub_clearing echo "THE END" |
“sub_creating” 调用的“ctable.sql”内容: |
同“1a_users表空间在线损坏” |
恢复要点: |
1)启动到nomount在rman中恢复:restore controlfile;mount数据库;用tag为“LABS-9A-CONTROL-BEFORE-OFFLINE”或tag为“LABS-9A-CONTROL-AFTER-OFFLINE”的控制文件备份来恢复都可以。控制文件能经历表空间从上线到下线的变化。 2)在rman中恢复:recover database;alter database open resetlogs;(二进制控制文件restore后指导的恢复,都要resetlogs);alter tablespace users online; 4)srvctl启动其他实例。 |
8.9 9b_当前控制文件损坏_下线user表空间完全恢复_用控制文件脚本_不需备份
在PXE推送端主机上运行: |
[root@server1 ~]# bcl --RACGRID11g13 9b |
场景模拟脚本内容: |
. /home/oracle/bclcustom-subprogram sub_getting 9b 9b_当前控制文件损坏_下线user表空间完全恢复_用控制文件脚本_不需备份 sub_detecting sub_creating echo "***BEFORE TABLESPACE OFFLINE***" sub_scripting_controlfile_nocatalog sub_offlining_users_nocatalog LABS-9B-USERS-AFTER-OFFLINE echo "***AFTER TABLESPACE OFFLINE***" sub_scripting_controlfile_nocatalog sub_deleting_backup_controlfile_nocatalog sub_resync_catalog sub_shutdowning_abort sub_destroying "current*" sub_revealing echo " " sub_clearing echo "THE END" |
“sub_creating” 调用的“ctable.sql”内容: |
同“1a_users表空间在线损坏” |
恢复要点: |
1)找到sub_scripting_controlfile_nocatalog给出的trace文件名,编辑成sql脚本:留下set #1 noresetlogs部分,去掉set #2。在users表空间下线前后各有一个trace文件,用之前的那个,不然会出现missing00004。 2)启动到nomount在sqlplus恢复:改cluster_database初始化参数为false;执行以上脚本;改cluster_database初始化参数为true;recover database;alter database open;alter tablespace users online; 3)srvctl启动其他实例。 |
8.10 9c_当前控制文件损坏_只读user表空间不完全恢复_用控制文件二进制备份_数据不丢_不需备份
在PXE推送端主机上运行: |
[root@server1 ~]# bcl --RACGRID11g13 9c |
场景模拟脚本内容: |
. /home/oracle/bclcustom-subprogram sub_getting 9c 9c_当前控制文件损坏_只读user表空间不完全恢复_用控制文件二进制备份_数据不丢_不需备份 sub_detecting sub_creating sub_backingup_controlfile_nocatalog LABS-9C-CONTR-BEFORE-READONLY sub_readingonly_users_nocatalog LABS-9C-USERS-AFTER-READONLY sub_backingup_controlfile_nocatalog LABS-9C-CONTROL-AFTER-READONLY sub_resync_catalog sub_shutdowning_abort sub_destroying "current*" sub_revealing echo " " sub_clearing echo "THE END" |
“sub_creating” 调用的“ctable.sql”内容: |
同“1a_users表空间在线损坏” |
恢复要点: |
1)启动到nomount在rman中恢复:restore controlfile;mount数据库;用tag为“LABS-9C-CONTR-BEFORE-READONLY”或tag为“LABS-9C-CONTROL-AFTER-READONLY”的控制文件备份来恢复都可以。控制文件能经历表空间从读写到只读的变化。 2)在rman中恢复:recover database;alter database open resetlogs;(二进制控制文件restore后指导的恢复,都要resetlogs);alter tablespace users online;alter tablespace users read write; 4)srvctl启动其他实例。 |