RAC生产数据库RMAN方式恢复到异地单机

---10g set dbid 

源端环境介绍:
生产数据库是包含两个节点的Oracle 10g 10.2.0.3 RAC数据库:
ASM管理+裸设备
数据库名:racdb
第一节点的sid:racdb1
第一节点的sid:racdb2

异地单机数据库(恢复Server)介绍:
 


下面将详细记录整个从RAC到单机的详细恢复过程。

【实验BEGIN】
1.将源端的RMAN备份的所有文件拷贝到恢复Server上
脚本如下,注意这里使用了一个保证scp不会中断的小技巧(sleep)
racdb1@testdb183 /orabak$ cat scp.sh
nohup scp -r oracle@172.193.192.26:/orabak/* /orabak &
sleep 10

2.修改源端生成的pfile文件,去掉与RAC有关的内容。
将ASM格式的文件路径统统的修改成为文件系统路径的格式。 

 

3.根据上面参数文件内容,在恢复Server上创建确实的目录
$ mkdir -p /oracle/app/oracle/admin/racdb/cdump
$ mkdir -p /oracle/app/oracle/admin/racdb/udump
$ mkdir -p /oracle/app/oracle/admin/racdb/adump
$ mkdir -p /oracle/app/oracle/admin/racdb/bdump


4.登陆恢复端Server的RMAN命令行,设置成设置成生产RAC第一节点的dbid(这个需要提前确认好)
racdb1@testdb183 /oracle$ rman target /

Recovery Manager: Release 10.2.0.3.0 - Production on Mon Aug 24 20:32:13 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

connected to target database (not started)

RMAN> set dbid 3914926878

executing command: SET DBID

5.使用新pfile启动实例到nomount状态
RMAN> startup nomount pfile='/oracle/app/oracle/product/10.2.0/db_1/dbs/initracdb1.ora'

Oracle instance started

 


6.找到RMAN中控制文件的的备份,恢复控制文件     
RMAN> restore controlfile from '/orabak/week1/Saturday/c-3914926878-20090822-00';

Starting restore at 2009-08-24 20:33:59
using channel ORA_DISK_1

channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:02
output filename=/oracle/oradata/racdb/control01.ctl
Finished restore at 2009-08-24 20:34:01

7.恢复完控制文件之后,启动数据库到mount状态
RMAN> alter database mount;

database mounted
released channel: ORA_DISK_1

8.根据生产数据库对应的文件目录,将其修改到恢复Server的文件路径
需要到生产库确定各个数据文件的信息
 

executing command: SET NEWNAME

executing command: SET NEWNAME

 

RMAN>

9.sqlplus下,修改联机日志的路径和名称。目的是防止在open resetlogs时报错
racdb1@testdb183 /oracle$ sqlplus / as sysdba

 

SQL> alter database rename file '+ORADATA/racdb/onlinelog/group_1.257.668538023' to '/oracle/oradata/racdb/group_1.257.668538023'; 

10.回到RMAN命令行,进行recover数据库
racdb1@testdb183 /oracle$ rman target /

Recovery Manager: Release 10.2.0.3.0 - Production on Mon Aug 24 21:02:26 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

connected to target database: racdb (DBID=3914926878, not open)

RMAN>

RMAN> recover database;

Starting recover at 2009-08-24 21:02:58
using target database control file instead of recovery catalog 

RMAN-06054: media recovery requesting unknown log: thread 2 seq 4106 lowscn 569488757

11.以open resetlogs的方式打开数据库,完成整个RMAN的恢复
RMAN> alter database open resetlogs;

database opened

RMAN>

12.验证
登陆数据库,检查版本信息。
sys@racdb> select * from v$version;

 

13.后续工作还有很多,如一些参数的调整,这里着重说明一下:需要全新的创建以下临时文件。更多信息请参考alert警告文件
通过RMAN恢复过来的临时文件是不可用的,需要处理一下。  create temporary tablespace temp1 tempfile '/oracle/oradata/racdb/temp01.dbf' size 512m reuse autoextend on next 1m maxsize unlimited;

Tablespace created.

将默认的临时表空间指定到这个新建的表空间上
sys@racdb> alter database default temporary tablespace temp1;

Database altered.

 

11g:  不需要设置dbid 是不是文章错了

set dbid是用来确定你要恢复的control file的

Oracle RAC异机恢复至单机

 

描述    主机名    实例名    版本    IP
源端    rac1    racdb1    RAC11204    192.168.100.155
源端    rac2    racdb2    RAC11204    192.168.100.156
目标端    server1    racdb    单机11204    192.168.100.101
准备RMAN全库备份脚本:

rman target / log=full_log << EOF

run

{undefined

allocate channel d1 device type disk;

allocate channel d2 device type disk;

allocate channel d3 device type disk;

backup as compressed backupset database format ‘/home/oracle/rman/datafile_%U’;

backup archivelog all format ‘/home/oracle/rman/arch_%U’;

backup current controlfile format ‘/home/oracle/rman/ctr_%U’;

release channel d1;

release channel d2;

release channel d3;

}

exit

EOF

创建本地静态参数文件:

SQL> create pfile=’/home/oracle/rman/pfile’ from spfile;

File created.

备份文件汇总如下:

[oracle@rac1 rman]$ ls

 

pfile

压缩备份文件,并将其传输至目标端

[oracle@rac1 ~]$ tar cvf rman.tar.gz rman/

[oracle@rac1 ~]$ scp rman.tar.gz 192.168.100.101:/home/oracle/

目标库解压:

[oracle@server1 ~]$ tar xf rman.tar.gz

在目标单机手动编写创建参数文件:

racdb.__db_cache_size=352321536

racdb.__java_pool_size=4194304

racdb.__large_pool_size=8388608

racdb.__oracle_base=’/oracle/app’

racdb.__pga_aggregate_target=335544320

racdb.__sga_target=503316480

racdb.__shared_io_pool_size=0

racdb.__shared_pool_size=125829120

racdb.__streams_pool_size=0

*.audit_file_dest=’/oracle/app/admin/racdb/adump’

*.audit_trail=‘db’

*.compatible=‘11.2.0.4.0’

*.control_files=’/oracle/app/oradata/racdb/control01.ctl’,’/oracle/app/oradata/racdb/control02.ctl’

*.db_block_size=8192

*.db_name=‘racdb’

*.diagnostic_dest=’/oracle/app’

*.memory_target=838860800

*.open_cursors=300

*.processes=150

*.remote_login_passwordfile=‘EXCLUSIVE’

*.sessions=170

*.undo_tablespace=‘UNDOTBS1’

创建相应的目录:

[oracle@server1 dbs]$ mkdir /oracle/app/admin/racdb/adump -pv

[oracle@server1 dbs]$ mkdir /oracle/app/oradata/racdb -pv

启动目标库至nomount状态:

SQL>startup nomount

目标库连接RMAN恢复控制文件:

[oracle@server1]$rman target /

RMAN> restore controlfile from ‘/home/oracle/rman/ctr_0gv7hjpl_1_1’;

RMAN> alter database mount;

构建RMAN恢复脚本流程:

数据文件rename构建:

SQL> select name from v$datafile;

NAME

--------------------------------------------------------------------------------

+DATA/racdb/system01.dbf

+DATA/racdb/sysaux01.dbf

+DATA/racdb/undotbs01.dbf

+DATA/racdb/users01.dbf

+DATA/racdb/example01.dbf

+DATA/racdb/undotbs02.dbf

拼接语句:

sqlplus:

SQL> set pages 0

SQL> set line 500

SQL>

select q’[alter database rename file ‘]’ || name || q’[’ to ]’ || q’[’/oracle/app/oradata/racdb/]’ || substr(name,instr(name,’/’,-1)+1) || q’[’;]’ from v$datafile;

----------------------------------------------------------------------------------------------------------------

alter database rename file ‘+DATA/racdb/system01.dbf’ to ‘/oracle/app/oradata/racdb/system01.dbf’;

alter database rename file ‘+DATA/racdb/sysaux01.dbf’ to ‘/oracle/app/oradata/racdb/sysaux01.dbf’;

alter database rename file ‘+DATA/racdb/undotbs01.dbf’ to ‘/oracle/app/oradata/racdb/undotbs01.dbf’;

alter database rename file ‘+DATA/racdb/users01.dbf’ to ‘/oracle/app/oradata/racdb/users01.dbf’;

alter database rename file ‘+DATA/racdb/example01.dbf’ to ‘/oracle/app/oradata/racdb/example01.dbf’;

alter database rename file ‘+DATA/racdb/undotbs02.dbf’ to ‘/oracle/app/oradata/racdb/undotbs02.dbf’;

RMAN:

select q’[set newname for datafile ‘]’ || name || q’[’ to ]’ || q’[’/oracle/app/oradata/racdb/]’ || substr(name,instr(name,’/’,-1)+1) || q’[’;]’ from v$datafile;

----------------------------------------------------------------------------------------------------------------

set newname for datafile ‘+DATA/racdb/system01.dbf’ to ‘/oracle/app/oradata/racdb/system01.dbf’;

set newname for datafile ‘+DATA/racdb/sysaux01.dbf’ to ‘/oracle/app/oradata/racdb/sysaux01.dbf’;

set newname for datafile ‘+DATA/racdb/undotbs01.dbf’ to ‘/oracle/app/oradata/racdb/undotbs01.dbf’;

set newname for datafile ‘+DATA/racdb/users01.dbf’ to ‘/oracle/app/oradata/racdb/users01.dbf’;

set newname for datafile ‘+DATA/racdb/example01.dbf’ to ‘/oracle/app/oradata/racdb/example01.dbf’;

set newname for datafile ‘+DATA/racdb/undotbs02.dbf’ to ‘/oracle/app/oradata/racdb/undotbs02.dbf’;

RMAN脚本如下:

recovery.sh:

rman target / log=recover_log << EOF

run

{undefined

allocate channel d1 device type disk;

allocate channel d2 device type disk;

allocate channel d3 device type disk;

crosscheck backup;

delete expired backup;

crosscheck archivelog all;

delete expired archivelog all;

catalog start with ‘/home/oracle/rman’;

set newname for datafile ‘+DATA/racdb/system01.dbf’ to ‘/oracle/app/oradata/racdb/system01.dbf’;

set newname for datafile ‘+DATA/racdb/sysaux01.dbf’ to ‘/oracle/app/oradata/racdb/sysaux01.dbf’;

set newname for datafile ‘+DATA/racdb/undotbs01.dbf’ to ‘/oracle/app/oradata/racdb/undotbs01.dbf’;

set newname for datafile ‘+DATA/racdb/users01.dbf’ to ‘/oracle/app/oradata/racdb/users01.dbf’;

set newname for datafile ‘+DATA/racdb/example01.dbf’ to ‘/oracle/app/oradata/racdb/example01.dbf’;

set newname for datafile ‘+DATA/racdb/undotbs02.dbf’ to ‘/oracle/app/oradata/racdb/undotbs02.dbf’;

release channel d1;

release channel d2;

release channel d3;

restore database;

switch datafile all;

}

exit

EOF

执行recover:

RMAN> recover database;

 

查看SCN信息:

SQL> select file#,checkpoint_change# from v$datafile;

FILE# CHECKPOINT_CHANGE#

1 2470036

 

6 rows selected.

SQL> select file#,checkpoint_change# from v$datafile_header;

FILE# CHECKPOINT_CHANGE#

1 2470036

 

 

数据文件头一致,尝试打开:

SQL> alter database open resetlogs;

alter database open resetlogs

ERROR at line 1:

ORA-00349: failure obtaining block size for ‘+DATA/racdb/redo01.log’

重建控制文件:

SQL> alter database backup controlfile to trace as ‘/home/oracle/ctl.txt’;

修改为如下:

STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE “RACDB” RESETLOGS ARCHIVELOG

MAXLOGFILES 192

MAXLOGMEMBERS 3

MAXDATAFILES 1024

MAXINSTANCES 32

MAXLOGHISTORY 292

LOGFILE

GROUP 1 ‘/oracle/app/oradata/racdb/redo01.log’ SIZE 50M BLOCKSIZE 512,

GROUP 2 ‘/oracle/app/oradata/racdb/redo02.log’ SIZE 50M BLOCKSIZE 512

– STANDBY LOGFILE

DATAFILE

‘/oracle/app/oradata/racdb/system01.dbf’,

‘/oracle/app/oradata/racdb/sysaux01.dbf’,

‘/oracle/app/oradata/racdb/undotbs01.dbf’,

‘/oracle/app/oradata/racdb/users01.dbf’,

‘/oracle/app/oradata/racdb/example01.dbf’,

‘/oracle/app/oradata/racdb/undotbs02.dbf’

CHARACTER SET ZHS16GBK

;

一致性关库:

SQL> shutdown immediate;

ORA-01109: database not open

Database dismounted.

ORACLE instance shut down.

脚本创建控制文件:

SQL> @ctl.txt

ORACLE instance started.

Total System Global Area 835104768 bytes

Fixed Size 2257840 bytes

Variable Size 494931024 bytes

Database Buffers 331350016 bytes

Redo Buffers 6565888 bytes

Control file created.

SQL> alter database open resetlogs;

alter database open resetlogs

ERROR at line 1:

ORA-38856: cannot mark instance UNNAMED_INSTANCE_2 (redo thread 2) as enabled

解决办法:

SQL>alter database add logfile thread 2 group 3 ‘/oracle/app/oradata/racdb/redo03_2.log’ size 50M

SQL>alter database add logfile thread 2 group 4 ‘/oracle/app/oradata/racdb/redo04_2.log’ size 50M

SQL> alter database open resetlogs;

Database altered.

SQL>alter database drop logfile group 3;

SQL>alter database drop logfile group 4;

ORA-01623:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值