Oracle 运维篇+RAC集群转单实例/RMAN异机恢复/RMAN迁移/RMAN备份恢复操作概要

说明:本文为Oracle RAC集群转单实例/RMAN异机恢复/RMAN迁移/RMAN备份恢复操作概要方便用户查阅

温馨提示:如果您发现本文哪里写的有问题或者有更好的写法请留言或私信我进行修改优化

说明:本文为Oracle RAC集群转单实例/RMAN异机恢复/RMAN迁移/RMAN备份恢复操作概要方便用户查阅

步骤
--全库备份(最好停止业务,备份后从ASM中复制出来redo当前组,并记录好DBID)
--转储参数文件和控制文件
--关闭集群
--重新编译Oracle软件去除集群依赖
--创建单实例目录
--修改参数文件为单实例版
--调用rman rename功能修改集群数据文件为文件系统路径,然后执行恢复
--修改并重建控制文件(redo位置等)
--起库(resetlogs)
--测试
--完成


★ 实验环境
/
Oracle:11.2.0.3 RAC
系统:Red Hat 6.3


★ 环境准备
/
※ 停止业务
※ 创建一个测试表,用来恢复后验证数据是否丢失
    sqlplus / as sysdba
    SQL> create table sys.zzt(id number);
    SQL> insert into sys.zzt values(123);
    SQL> commit;


★ 全库备份(零级全备)
/
su - oracle
mkdir -p /home/oracle/zzt_backup/
rman target /
--0级全备
--RUN块

run{
allocate channel zzt_disk01 device type disk;
allocate channel zzt_disk02 device type disk;
allocate channel zzt_disk03 device type disk;
crosscheck backup;
delete noprompt expired backup;
#数据文件
backup incremental level 0 as compressed backupset database tag zzt_level_0_data 
format '/home/oracle/zzt_backup/zzt_level_0_data_%s_%p_%t.dbf' ;             
#归档文件(为了恢复需要,只需要备份最近1天的即可)
sql 'alter system archive log current';
sql 'alter system archive log current';
sql 'alter system archive log current';
crosscheck archivelog all;
delete noprompt expired archivelog all;
backup as compressed backupset archivelog from time 'sysdate-1' delete input tag zzt_level_0_arch
format '/home/oracle/zzt_backup/zzt_level_0_arch_%s_%p_%t.arc' ; 
#控制文件(建议备份完数据文件再备控制文件,这样控制文件中会有备份记录)
backup current controlfile tag zzt_level_0_cont
format '/home/oracle/zzt_backup/zzt_level_0_cont_%s_%p_%t.ctl' ;
#参数文件
backup spfile tag zzt_level_0_spfi
format '/home/oracle/zzt_backup/zzt_level_0_spfi_%s_%p_%t.spf' ;
release channel zzt_disk01;
release channel zzt_disk02;
release channel zzt_disk03;
} 

       


★ 转储控制文件和参数文件
/
sqlplus / as sysdba
SQL> alter database backup controlfile to trace as '/home/oracle/zzt_backup/ctl.txt';
SQL> create pfile='/home/oracle/zzt_backup/pfile.txt' from spfile;
SQL> create pfile from spfile;


★ 停止集群并禁止开机自启(所有节点都执行)
/
su - root
cd $GRID_HOME/bin/
./crsctl stop cluster -al    
./crsctl stop crs    
./crsctl disable crs


★ 重新编译Oracle软件去除集群依赖(CGS)(ORA-29702)
/
cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk ops_off
make -f ins_rdbms.mk install

温馨提示:如果想再转回集群,可以反向执行
cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk ops_on
make -f ins_rdbms.mk install


★ 创建单实例目录
/
※ 修改参数文件转为单实例,并修改和创建修改目录
su - oracle
cd $ORACLE_HOME/dbs/
vi initracdb1.ora

*.audit_file_dest='/u01/app/oracle/admin/racdb/adump'
*.audit_trail='db'
#*.cluster_database=true
*.compatible='11.2.0.0.0'
*.control_files='/u01/app/oracle/oradata/racdb/controlfileA.ctl','/u01/app/oracle/fast_recovery_area/racdb/controlfileB.ctl'
*.db_block_size=8192
*.db_create_file_dest='/u01/app/oracle/oradata/racdb'
*.db_domain=''
*.db_name='racdb'
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area/'
*.db_recovery_file_dest_size=4558159872
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=racdbXDB)'
#racdb1.instance_number=1
#racdb2.instance_number=2
*.log_archive_format='%t_%s_%r.dbf'
*.open_cursors=300
*.pga_aggregate_target=195035136
*.processes=150
#*.remote_listener='racscan:1521'
*.remote_login_passwordfile='exclusive'
*.sga_target=587202560
*.undo_tablespace='UNDOTBS1'
#racdb2.thread=2
#racdb1.thread=1
#racdb1.undo_tablespace='UNDOTBS1'
#racdb2.undo_tablespace='UNDOTBS2'

su - oracle
mkdir -p $ORACLE_BASE/oradata/$DB_NAME/
mkdir -p $ORACLE_BASE/fast_recovery_area/$DB_NAME/ARCHIVELOG/
mkdir -p $ORACLE_BASE/fast_recovery_area/$DB_NAME/ONLINELOG/


★ 启动监听(转为单实例后,监听归Oracle管理)
/
su - oracle
lsnrctl start


★ 调用rman rename功能修改集群数据文件为文件系统路径,然后执行恢复
/
查看并修改转储的控制文件中修改路径
vi /home/oracle/zzt_backup/ctl.txt

STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "RACDB" NORESETLOGS  ARCHIVELOG
    MAXLOGFILES 192
    MAXLOGMEMBERS 3
    MAXDATAFILES 1024
    MAXINSTANCES 32
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 ('/u01/app/oracle/oradata/racdb/REDO01.LOG') SIZE 50M BLOCKSIZE 512,
  GROUP 2 ('/u01/app/oracle/oradata/racdb/REDO02.LOG') SIZE 50M BLOCKSIZE 512,
  GROUP 3 ('/u01/app/oracle/oradata/racdb/REDO03.LOG') SIZE 50M BLOCKSIZE 512
DATAFILE
  '/u01/app/oracle/oradata/racdb/system.dbf',
  '/u01/app/oracle/oradata/racdb/sysaux.dbf',
  '/u01/app/oracle/oradata/racdb/undotbs1.dbf',
  '/u01/app/oracle/oradata/racdb/users.dbf',
  '/u01/app/oracle/oradata/racdb/example.dbf',
  '/u01/app/oracle/oradata/racdb/undotbs2.dbf'
CHARACTER SET AL32UTF8
;
RECOVER DATABASE
ALTER SYSTEM ARCHIVE LOG ALL;
ALTER DATABASE OPEN;
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/racdb/temp.dbf' SIZE 10M AUTOEXTEND ON;

su - oracle
rman target /
RMAN> restore controlfile from '/home/oracle/zzt_backup/zzt_level_0_cont_11_1_1036318481.ctl';
RMAN> alter database mount;
RMAN> 

run{
 set newname for datafile "+DATA/racdb/datafile/system.256.952947643"    to "/u01/app/oracle/oradata/racdb/system.dbf";
 set newname for datafile "+DATA/racdb/datafile/sysaux.257.952947643"    to "/u01/app/oracle/oradata/racdb/sysaux.dbf";  
 set newname for datafile "+DATA/racdb/datafile/undotbs1.258.952947643"  to "/u01/app/oracle/oradata/racdb/undotbs1.dbf";
 set newname for datafile "+DATA/racdb/datafile/users.259.952947643"     to "/u01/app/oracle/oradata/racdb/users.dbf";
 set newname for datafile "+DATA/racdb/datafile/example.264.952947763"   to "/u01/app/oracle/oradata/racdb/example.dbf"; 
 set newname for datafile "+DATA/racdb/datafile/undotbs2.265.952947977"  to "/u01/app/oracle/oradata/racdb/undotbs2.dbf";
 restore database;        
 switch datafile all;
}


RMAN> recover database;
SQL> select * from v$log;
SQL> recover database using backup controlfile until cancel;
    温馨提示:

方法1:在恢复时可能报错“RMAN-06054”提示没有redo当前组,但是咱们redo的当前组已经备份,并根据v$log视图获知哪些sequence的redo已归档和恢复完成,所以不用管这个,直接执行不完全恢复即可(其实不丢数据)
    输入“auto”然后再一次输入“cancel”
    重建控制文件(主要是修改redo为单实例模式,也可以不修改Oracle会自动根据参数文件路径进行设置)
    SQL> alter database open resetlogs;
方法2:当然,你想让恢复看上去像完全恢复,也可以用咱们前面提到的备份的redo当前组来进行最后的恢复
    输入备份的redo当前组
    重建控制文件(主要是修改redo为单实例模式,也可以不修改Oracle会自动根据参数文件路径进行设置)
    SQL> alter database open;


★ 测试(结束)
/
※ 查看备份之前创建的测试表数据验证数据是否丢失,该例结果为“123”
select * from sys.zzt;


★ 如果想回到集群状态,可以按如下方式进行
/
※ 重新编译Oracle软件加上集群依赖(CGS)
cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk ops_on
make -f ins_rdbms.mk install

※ 清理单实例的参数文件
su - oracle
SQL> shut immediate
rm $ORACLE_HOME/dbs/initracdb1.ora
rm $ORACLE_HOME/dbs/spfileracdb1.ora

※ 恢复集群的参数文件
vi $ORACLE_HOME/dbs/initracdb1.ora
    spfile='+data/RACDB/spfileracdb.ora'

※ 启动CRS(所有节点都执行)
su - root
cd $GRID_HOME/bin/
./crsctl enable crs        
./crsctl start crs    

※ 启动后恢复到原来的状态

★ 后记(这里记录了一些实验中的一些不重要的信息)
/
※ 没有手动重建控制文件后Oracle自动resetlogs生成的redo信息
SQL> select * from v$logfile;

GROUP#  TYPE    MEMBER                                     IS_RECOVERY_DEST_FILE
------ ------- -------------------------------------------------------------------------------- ---------------------
 2   ONLINE  /u01/app/oracle/oradata/racdb/RACDB/onlinelog/o1_mf_2_h805g2gl_.log            NO
 2   ONLINE  /u01/app/oracle/fast_recovery_area/RACDB/onlinelog/o1_mf_2_h805g2jh_.log         YES
 1   ONLINE  /u01/app/oracle/oradata/racdb/RACDB/onlinelog/o1_mf_1_h805g0wl_.log            NO
 1   ONLINE  /u01/app/oracle/fast_recovery_area/RACDB/onlinelog/o1_mf_1_h805g0yb_.log         YES
 3   ONLINE  /u01/app/oracle/oradata/racdb/RACDB/onlinelog/o1_mf_3_h805g3h6_.log            NO
 3   ONLINE  /u01/app/oracle/fast_recovery_area/RACDB/onlinelog/o1_mf_3_h805g3k0_.log         YES
 4   ONLINE  /u01/app/oracle/oradata/racdb/RACDB/onlinelog/o1_mf_4_h805g4p2_.log            NO
 4   ONLINE  /u01/app/oracle/fast_recovery_area/RACDB/onlinelog/o1_mf_4_h805g4qy_.log         YES

※ RMAN恢复数据库时提示没有当前redo组
RMAN> recover database;

Starting recover at 29-MAR-20
using channel ORA_DISK_1
starting media recovery
channel ORA_DISK_1: starting archived log restore to default destination
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=19
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=20
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=21
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=22
channel ORA_DISK_1: reading from backup piece /home/oracle/zzt_backup/zzt_level_0_arch_10_1_1036318479.arc
channel ORA_DISK_1: piece handle=/home/oracle/zzt_backup/zzt_level_0_arch_10_1_1036318479.arc tag=ZZT_LEVEL_0_ARCH
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
archived log file name=/u01/app/oracle/fast_recovery_area/RACDB/archivelog/2020_03_29/o1_mf_1_19_h804mj1s_.arc thread=1 sequence=19
channel default: deleting archived log(s)
archived log file name=/u01/app/oracle/fast_recovery_area/RACDB/archivelog/2020_03_29/o1_mf_1_19_h804mj1s_.arc RECID=34 STAMP=1036322032
archived log file name=/u01/app/oracle/fast_recovery_area/RACDB/archivelog/2020_03_29/o1_mf_1_20_h804mj3s_.arc thread=1 sequence=20
channel default: deleting archived log(s)
archived log file name=/u01/app/oracle/fast_recovery_area/RACDB/archivelog/2020_03_29/o1_mf_1_20_h804mj3s_.arc RECID=31 STAMP=1036322032
archived log file name=/u01/app/oracle/fast_recovery_area/RACDB/archivelog/2020_03_29/o1_mf_1_21_h804mj44_.arc thread=1 sequence=21
channel default: deleting archived log(s)
archived log file name=/u01/app/oracle/fast_recovery_area/RACDB/archivelog/2020_03_29/o1_mf_1_21_h804mj44_.arc RECID=32 STAMP=1036322032
archived log file name=/u01/app/oracle/fast_recovery_area/RACDB/archivelog/2020_03_29/o1_mf_1_22_h804mj4g_.arc thread=1 sequence=22
channel default: deleting archived log(s)
archived log file name=/u01/app/oracle/fast_recovery_area/RACDB/archivelog/2020_03_29/o1_mf_1_22_h804mj4g_.arc RECID=33 STAMP=1036322032
unable to find archived log
archived log thread=1 sequence=23
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 03/29/2020 11:13:53
RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 23 and starting SCN of 1350636

※ 监听信息
[oracle@rac1 zzt_backup]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 29-MAR-2020 11:45:42
Copyright (c) 1991, 2011, Oracle.  All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.3.0 - Production
Start Date                29-MAR-2020 11:45:27
Uptime                    0 days 0 hr. 0 min. 15 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Log File         /u01/app/oracle/diag/tnslsnr/rac1/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rac1)(PORT=1521)))
Services Summary...
Service "racdb" has 1 instance(s).
  Instance "racdb1", status READY, has 1 handler(s) for this service...
Service "racdbXDB" has 1 instance(s).
  Instance "racdb1", status READY, has 1 handler(s) for this service...
The command completed successfully

※ 如果您觉得文章写的还不错, 别忘了在文末给作者点个赞哦 ~

over

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值