归档模式下RMAN备份的异机恢复

1、 关键过程

备份源数据库

a)      创建备份目录,用root用户登录源数据库,执行下列命令:

vmsdb1:~ # mkdir /opt/orabak/

vmsdb1:~ # chmod 775 /opt/orabak/

vmsdb1:~ # chown oracle:oinstall /opt/orabak/

 

b)     备份数据库、归档日志文件和控制文件:

vmsdb1:~ # su - oracle

--检查当前数据库实例是不是vmsdb1

oracle@vmsdb1:~> echo $ORACLE_SID

oracle@vmsdb1:~> rman target /

 

RMAN> run {

  #删除过期备份和归档日志

  crosscheck backup;

  delete expired backup;

  crosscheck archivelog all;

  delete expired archivelog all;

 

  #备份数据库和归档日志

  allocate channel t1 type disk;

  set limit channel t1 kbytes=1000000;

  backup

  incremental level 0

  skip inaccessible

  as compressed backupset

  # recommended format

  format '/opt/orabak/fullbackup_%T_%U.backup'

  database plus archivelog;

 

  #备份控制文件

  backup current controlfile format '/opt/orabak/ctlfile_backup.backup';

  release channel t1;

 }

 

c)      备份初始化参数文件

oracle@vmsdb1:/opt/orabak>sqlplus / as sysdba

sql>create pfile='/opt/orabak/VMSDB1_init.ora' from spfile;

 

d)     备份口令文件

oracle@vmsdb1:/opt/orabak>cp $ORACLE_HOME/dbs/orapwvmsdb1 /opt/orabak

 

当前实例的口令文件,存放在$ORACLE_HOME/dbs/路径下,文件命规则是:orapw$ORACLE_SID。

 

将备份文件传送到目标数据库机器

a)      使用SCP传送到目的服务器:10.137.19.155,在传送备份文件前,需要在目标数据库上建立好对应的路径和赋权,具体命令可以参考下面“创建存储RMAN备份的目录”命令。

vmsdb1:/opt/orabak # tar -zcvf vmsdb1_backup.tar.gz ./

vmsdb1:/opt/orabak # scp vmsdb1_backup.tar.gz oracle@10.137.19.155:/opt/orabak

 

 

在目标单板上恢复数据库

a)      创建存储RMAN备份的目录

linux155:~ # mkdir /opt/orabak/

linux155:~ # chmod 775 /opt/orabak/

linux155:~ # chown oracle:oinstall /opt/orabak/

 

b)     创建实例vmsdb1的相关目录

linux155:~ # su - oracle

oracle@linux155:~>mkdir -p /opt/oracle/admin/vmsdb1/{adump,dpdump,hdump,pfile,scripts}

oracle@linux155:~>mkdir -p /opt/oracle/diag/rdbms/vmsdb1/vmsdb1/{alert,cdump,hm,incident,incpkg,ir,lck,metadata,stage,sweep,trace}

 

oracle@linux155:~>mkdir -p /opt/oracle/oradata/vmsdb1

oracle@linux155:~>mkdir -p /opt/oracle/oradata/vmsdb1/archive_log

 

源数据库中,vmsdb1数据库的数据文件存放路径是“/opt/oracle/oradata/vmsdb1”,归档日志存放路径是“/opt/oracle/oradata/vmsdb1/archive_log”。

c)      创建口令文件

oracle@linux155:/opt/orabak> tar -zxvf vmsdb1_backup.tar.gz

oracle@linux155:/opt/orabak> cp orapwvmsdb1 $ORACLE_HOME/dbs/

 

d)     创建初始化参数文件

oracle@linux155:/opt/orabak> cp VMSDB1_init.ora $ORACLE_HOME/dbs/initvmsdb1.ora

 

Oracle11g数据库启动时,会搜索$ORACLE_HOME/dbs,先加载spfile,如果不存在spfile,则加载pfile,pfile的命名规则是:init$ORACLE_SID.ora。

e)     RMAN恢复

oracle@linux155:/opt/orabak> export ORACLE_SID=vmsdb1

oracle@linux155:/opt/orabak> echo $ORACLE_SID

oracle@linux155:/opt/orabak> rman target/

Recovery Manager: Release 11.1.0.7.0 - Production on Wed May 2 19:30:48 2012

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

connected to target database (not started)

 

RMAN> set dbid=2886533464;   //指定DBID,需要和源服务器的DBID一致,可以从源服务器中的v$database视图中查询得到

RMAN> startup nomount;

RMAN> restore controlfile from '/opt/orabak/ctlfile_backup.backup';    --恢复控制文件

RMAN> alter database mount;

RMAN> restore database;     --还原数据库文件

RMAN> recover database;     --恢复数据库文件,这里将报错,不需处理,继续根据本案例指导,进行后面的操作

 

Starting recover at 02-MAY-12

using channel ORA_DISK_1

starting media recovery

……

archived log thread=1 sequence=21

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: failure of recover command at 05/02/2012 20:02:58

RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 21 and starting SCN of 998298

 

RMAN> shutdown immediate;

 

f)      打开数据库

linux155:~ # su - oracle

oracle@linux155:~> export ORACLE_SID=vmsdb1

oracle@linux155:~> echo $ORACLE_SID

vmsdb1

oracle@linux155:~> sqlplus "/as sysdba"

SQL*Plus: Release 11.1.0.7.0 - Production on Thu May 3 08:29:00 2012

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

Connected to an idle instance.

SQL> startup;

ORACLE instance started.

 

Total System Global Area 1603411968 bytes

Fixed Size                  2160112 bytes

Variable Size             385878544 bytes

Database Buffers         1207959552 bytes

Redo Buffers                7413760 bytes

Database mounted.

ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

 

SQL> alter database open resetlogs;

Database altered.

SQL> select status from v$instance;

STATUS

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

OPEN

 

至此,数据库在目标单板上已成功恢复了。

 

3、 结论、解决方案及效果

本案例使用的典型场景如下:

a)      在局点搭建测试床,演练升级和调测业务。

b)     当现网数据库出现严重故障,需长时间修复时,可快速地在冗余、空闲数据库单板上恢复数据库,业务指向暂时数据库,快速恢复业务。

c)      在研发实验室快速搭建现场数据库镜像环境,进行业务开发和测试,以及问题重现等。

 

4、 经验总结、预防措施和规范建议

如果打开数据库的过程中,出现下列错误:

SQL> alter database open resetlogs;

alter database open resetlogs

*

ERROR at line 1:

ORA-01092: ORACLE instance terminated. Disconnection forced

Process ID: 2946

Session ID: 170 Serial number: 5

 

 

-- alert日志报错

Thu May 03 08:29:15 2012

ALTER DATABASE OPEN

ORA-1589 signalled during: ALTER DATABASE OPEN...

Thu May 03 08:29:33 2012

alter database open resetlogs

……

ORA-00704: bootstrap process failure

ORA-39700: database must be opened with UPGRADE option

Error 704 happened during db open, shutting down database

USER (ospid: 2946): terminating the instance due to error 704

Instance terminated by USER, pid = 2946

ORA-1092 signalled during: alter database open resetlogs...

ORA-1092 : opiodr aborting process unknown ospid (2946_47245946265184)

Thu May 03 08:29:41 2012

ORA-1092 : opitsk aborting process

 

    错误原因是:源数据库和目标数据库的版本不一致或Oracle补丁没有加载一致,所以请用下面的方法解决:

oracle@linux155:~> export ORACLE_SID=vmsdb1

oracle@linux155:~> echo $ORACLE_SID

vmsdb1

oracle@linux155:~> sqlplus "/as sysdba"

SQL*Plus: Release 11.1.0.7.0 - Production on Thu May 3 08:32:23 2012

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

Connected to an idle instance.

SQL> STARTUP UPGRADE;

ORACLE instance started.

Total System Global Area 1603411968 bytes

Fixed Size                  2160112 bytes

Variable Size             385878544 bytes

Database Buffers         1207959552 bytes

Redo Buffers                7413760 bytes

Database mounted.

Database opened.

SQL> @$ORACLE_HOME/rdbms/admin/catupgrd.sql

 

-- 上述命令执行完毕后,数据库已关闭,所以执行下列命令

SQL> quit

oracle@linux155:~> sqlplus "/as sysdba"

SQL> startup;

-- 编译失效对象

SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值