ORACLE 11g 用Duplicate恢复Data Guard 备库详细过程

1、先查找备库控制文件路径

先在备库上找出控制文件的路径,通过和主库一样,不过为了以防万一,还是check为好。


SQL>  select name from v$controlfile;

NAME

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

/Oracle/app/oracle/oradata/powerdes/control01.ctl

/oracle/app/oracle/fast_recovery/powerdes/control02.ctl

SQL>

2、准备控制文件备份文件

在主库上备份当前的控制文件,记得生成的备份文件要在执行全备之前生成,而且命令行也是带for standby字样的backup current controlfile for standby format‘/home/oracle/ctlfile.bak‘才行,也可以手动提前生成。


RMAN> backup current controlfile for standby format ‘/home/oracle/ctlfile.bak‘;

Starting backup at 2016-11-23 21:20:41

using channel ORA_DISK_1

channel ORA_DISK_1: starting full datafile backup set

channel ORA_DISK_1: specifying datafile(s) in backup set

including standby control file in backup set

channel ORA_DISK_1: starting piece 1 at 2016-11-23 21:20:42

channel ORA_DISK_1: finished piece 1 at 2016-11-23 21:20:43

piece handle=/home/oracle/ctlfile.bak tag=TAG20161123T212041 comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01

Finished backup at 2016-11-23 21:20:43

RMAN>

然后等备份任务结束后,在主库上,将备份前生成的控制文件、最近的一份备份文件到备库的相同目录:


scp /oracle/app/oracle/oradata/powerdes/control01.ctl 192.168.3.112:/home/oracle/

scp -r /data/backup/data/2016-11-23 192.168.3.112:/home/oracle/

3、检查主库备库环境

获取备库的tns:(我的是earth_m2)

cat $ORACLE_HOME/network/admin/tnsnames.ora


earth_m2 =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.112)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = powerdes)

)

)

(1)查看主库备库SID名字是否统一,这个很重要


# 备库:

[[email protected]t1_dbm1_3_112 data]$  echo $ORACLE_SID

powerdes

[[email protected]t1_dbm1_3_112 data]$

# 主库:

[[email protected]t1_dbm1_3_111 ~]$  echo $ORACLE_SID

powerdes

[[email protected]t1_dbm1_3_111 ~]$

(2)查看主库备份传输密码是否一致:


# 备库:

[[email protected]t1_dbm1_3_112 dbs]$ cd $ORACLE_HOME/dbs

[[email protected]t1_dbm1_3_112 dbs]$  strings orapwpowerdes

]\[Z

ORACLE Remote Password file

INTERNAL

89F7167638478F13

0Cv#

B6E56CBCA47429E2

[[email protected]t1_dbm1_3_112 dbs]$

# 主库:

[[email protected]t1_dbm1_3_111 ~]$ cd $ORACLE_HOME/dbs

[[email protected]t1_dbm1_3_111 dbs]$ strings orapwpowerdes

]\[Z

ORACLE Remote Password file

INTERNAL

89F7167638478F13

0Cv#

B6E56CBCA47429E2

[[email protected]t1_dbm1_3_111 dbs]$

4、启动备库到nomount状态

在备库上,直接copy覆盖控制文件


cp /home/oracle/ctlfile.bak /oracle/app/oracle/oradata/powerdes/control01.ctl

cp /home/oracle/ctlfile.bak /oracle/app/oracle/fast_recovery/powerdes/control02.ctl

然后启动到nomount状态


SQL> startup nomount

ORACLE instance started.

Total System Global Area 8551575552 bytes

Fixed Size              2270360 bytes

Variable Size              7247760232 bytes

Database Buffers    1291845632 bytes

Redo Buffers                 9699328 bytes

SQL>

5、使用duplicate恢复备库

在主库上,使用rman登录远程备库earth_m2


[[email protected]t1_dbm1_3_111 ~]$ rlwrap rman target / auxiliary sys/04181123@earth_m2

Recovery Manager: Release 11.2.0.4.0 - Production on Wed Nov 23 20:05:54 2016

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database: POWERDES (DBID=3481287162)

connected to auxiliary database: POWERDES (not mounted)

RMAN>

在rman命令行里面执行恢复命令:

run {
allocate auxiliary channel c1 devicetype disk;
allocate auxiliary channel c2 devicetype disk;
duplicate target database for standbynofilenamecheck dorecover;
release channel c1;
release channel c2;
}
#nofilenamecheck:必须指定NOFILENAMECHECK参数,避免覆盖primary数据库的当前的数据文件。另外主从路径一致,不需要执行文件路径以及check了
#release :这是关闭 前两行开启的通道

执行过程比较漫长,屏幕滚动信息比较多,这里不贴出来了,省略过……

执行命令后,需要很长时间,需要等待,因为需要写入文件到备库的数据文件目录里面,找个时候,在备库的alert log后台有如下记录日志,表明正在写数据文件:


Full restore complete of datafile 4 /oracle/app/oracle/oradata/powerdes/users01.dbf.  Elapsed time: 0:00:00

checkpoint is 32945676

last deallocation scn is 3

Wed Nov 23 20:14:42 2016

Full restore complete of datafile 3 /oracle/app/oracle/oradata/powerdes/undotbs01.dbf.  Elapsed time: 0:00:05

checkpoint is 32945676

last deallocation scn is 32897307

Undo Optimization current scn is 32934775

Wed Nov 23 20:15:50 2016

Full restore complete of datafile 5 /oracle/app/oracle/oradata/powerdes/example01.dbf.  Elapsed time: 0:01:18

checkpoint is 32945676

last deallocation scn is 32806636

…………

6、ORA-01152:问题

最后rman命令行里面duplicate命令执行完,窗口界面上有如下报错信息:


Signalling error 1152 for datafile 1!

Errors in file /oracle/app/oracle/diag/rdbms/earth_m2/powerdes/trace/powerdes_pr00_4069.trc:

ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below

ORA-01152: file 1 was not restored from a sufficiently old backup

ORA-01110: data file 1: ‘/oracle/app/oracle/oradata/powerdes/system01.dbf‘

ORA-1547 signalled during: alter database recover cancel...

^C

有报错没有关系,接下来直接开始应用日志,启动归档日志传输,通过应用归档日志来保证主备数据的一致性:


# 先开始启动传输开始应用日志

SQL> alter database recover managed standby database using current logfile disconnect from session;

Database altered.

SQL># 实时观察应用日志状态

SQL> select sequence#,applied from v$archived_log order by sequence# asc;

……

SEQUENCE# APPLIED

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

2334 YES

2335 YES

2301 rows selected.

SQL> # 等观察应用日志结束后,退出日志传输

SQL> alter database recover managed standby database cancel;

Database altered.

SQL> # 将备库从mount启动到open状态

SQL> alter database open;

Database altered.

SQL> # 查看备库状态,就会变成READ ONLY

SQL> select database_role,open_mode from v$database;

DATABASE_ROLE     OPEN_MODE

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

PHYSICAL STANDBY READ ONLY

SQL> # 然后再次启动日志应用

SQL> alter database recover managed standby database using current logfile disconnect from session;

Database altered.

SQL>  # 查看open_mode,有了READ ONLY WITH APPLY字样,OK

SQL> select database_role,open_mode from v$database;

DATABASE_ROLE     OPEN_MODE

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

PHYSICAL STANDBY READ ONLY WITH APPLY

SQL>

至此,Data Guard备库修复完成,如果遇到了ORA-01152问题,不需要慌张,可以试试应用日志来恢复数据。

时间: 2024-10-12 07:08:34

ORACLE 11g 用Duplicate恢复Data Guard 备库详细过程的相关文章

Oracle 11gR2 Database和Active Data Guard迁移案例

客户一套核心系统由一台Oracle Database 11.2.0.3.4单机和一台Active Data Guard组成,分别运行在两台PC服务器上,Oracle Linux 5.8 x86_64bit操作系统,两台服务器都未接存储设备:由于原有设备老旧等原因,现在要将这套Oracle数据库系统(主库和ADG库)迁移到新采购的两台服务器上,不跨版本,也不跨平台.为了最小化停机时间,我们先用目前最新的RMAN 0级备份在两台新服务器上restore database,之后将到目前为止的所有1级备

如何使用 RMAN 增量备份恢复 data guard log gap(日志断档)

主库查询最小scn 信息: SQL> col current_scn for 999999999999999 SQL>  SELECT CURRENT_SCN FROM V$DATABASE; select min(fhscn) from x$kcvfh; select min(f.fhscn) from x$kcvfh f, v$datafile d where f.hxfil =d.file# and d.enabled != 'READ ONLY'     ; CURRENT_SCN -

[Oracle维护工程师手记系列]Data Guard Broker中改属性是否需要两侧分别执行?

Data Guard Broker中改属性是否需要两侧分别执行? Data Guard Broker有一些属性,可以通过 show configuration 看到.我有时会想,这些个属性,是否是分别属于primary 和 standby,如果想要修改,是否需要分别登陆到primary 和 standby ,来分别修改呢? 这也是很多客户经常有的疑问.故此我进行了如下的实验. 先看看primary 端的 属性值: -bash-4.1$ dgmgrl /DGMGRL for Linux: Vers

ORACLE 11G通过SCN做增量备份修复standby库详细过程

背景描述:Oracle 的standby库后台alert报错,如下: ORA-00354: corrupt redo log block header ORA-00353: log corruption near block 10240change 11125950022 time 05/08/2015 22:00:41 ORA-00334: archived log:'/data/oracle/oradgdata/standby_archive/1_32350_821708334.dbf' R

ORACLE 11G DataGuard Failover后如何修复standby库

failover后的问题场景:由于做failover测试,一个standby已经被我变成了primary库,如何将这个新的primary库(原来的standby)变回来重新成为standby两个都是primary,p1,p2,如何将一个primary库1设置成p1,而另外一个primary库p2设置成p1的standby库呢? 1,问题描述原来的primary库:SQL> select open_mode,database_role from v$database; OPEN_MODE    

Oracle 11g 异机恢复参考文档

  原库 目标库 操作系统 CentOS 6.4 CentOS 6.4 主机名 sht-sgmhadoopnn-01 sht-sgmhadoopnn-02 IP 172.16.101.55 172.16.101.56 数据库版本 11.2.0.4.0 11.2.0.4.0 $ORACLE_BASE /u01/app/oracle /u01/app/oracle $ORACLE_HOME /u01/app/oracle/product/11.2.0/db_1 /u01/app/oracle/pro

oracle 11g登录em,“出现内部错误,有关详细信息,请查看日志文件。”

今天,登录oracle数据库em的时候,出现了这样的画面. 我找了很多资料也没找到解决办法.在经过一番研究之后发现,可能是我昨天更改了我计算机的名称,导致了我的em不能登录. 解决办法:恢复以前的计算机名即可. 步骤:1.打开控制面板->系统和安全->系统 2.找到计算机名.域和工作组设置,点击更改设置 3.在弹出窗口(计算机名)下,点击更改: 4.更改计算机名: 5.按确定保存之后,重启. 6.重新登录em即可. 当然此类方法可能只试用更改过计算机名称

ORACLE 11g 通过odbc建立连接到mysql库的database link

以前做过在oracle通过gateway建立到sqlserver的database link(详情参见:http://blog.csdn.net/mchdba/article/details/52719278),现在需要无缝访问mysql,所以也需要建立类似这样的连接通道. 1.分配mysql账号 先在mysql库上建立连接账号: GRANT SELECT ON test.* TO [email protected]'192.168.129.%' IDENTIFIED BY 'data_quer

ORACLE 11g 实现伪审计用户<登陆退出>的详细记录

需求就是需要记录用户登陆登出的记录,包括时间以及连接ip地址以及连接方式等等,这样有助于跟踪分析问题,特别是一些人为无意识的dml操作导致数据丢失.数据混乱的问题追踪,还是非常有效的.大家知道Oracle库开启了审计audit后,肯定有办法查到问题,但是审计比较消耗资源,所以可以通过触发器之类的来间接实现这个功能. 1.建记录表 -- Create table create table UC_LOGON_OFF ( user_id VARCHAR2(30), session_id NUMBER(