首页 > 其他 > 详细

11.2.0.3物理 Data Guard主备库切换(附加:ora-16139错误的解决)

时间:2014-03-25 17:08:36      阅读:513      评论:0      收藏:0      [点我收藏+]

 

DG分为主库和备库,我们也猜测其属于primary与standby 之间的互动,那么在primary 和standby 之间的切换:

然而切换又分为switchoverfailovers,前者是无损切换,不会丢失数据,而后者则有可能会丢失数据,并且切换后原primary数据库也不再是该data guard配置的一部分了.

 

针对不同standby(逻辑或物理)的处理方式也不尽相同。

 

 

角色转换前的准备工作:

 

1检查各数据库的初始化参数,主要确认对不同角色相关的初始化参数都进行了正确的配置。

2确保可能成为primary数据库的standby服务器已经处于archivelog模式。

3确保standby数据库的临时文件存在并匹配primary数据库的临时文件

4确保standby数据库的RAC 实例只有一个处于open 状态。(对于rac 结构的standby数据库,在角色转换时只能有一个实例startup。其它rac实例必须统统shutdown,待角色转换结束后再startup

 

 

 

Switchover

 

无损转换,通常是用户手动触发或者有计划的让其自动触发,比如硬件升级,软件升级之类的。通常它给你带来的工作量非常小并且都是可预计的。其执行分两个阶段,第一步, primary数据库转换为tandby角色,第二步,standby数据库(之一)转换为primary角色,primary standby 只是简单的角色互换,

 

Failover

不可预知原因导致primary 数据库故障并且短期内不能恢复就需要failover。如果是这种切换那你就要小心点了,有可能只是虚惊一场,但如果运气不好又没有完备的备份恢复策略而且primary 数据并非处于最大数据保护或最高可用性模式地话,这种情况下呢丢失数据有可能是难免的,并且如果其故障未能修复,那它甚至连快速修复成为standby 的机会也都失去了;

 

 

在执行failover 之前,尽可能将原primary 数据库的可用redo 都复制到standby 数据库。

注意,如果要转换角色的standby处于maximum protection模式,需要你首先将其切换为maximum performance模式

 

SQL> ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZEPERFORMANCE;

 

等standby 切换为新的primary 之后,你可以再随意更改数据库的保护模式。

 

 

maximum protection模式需要确保绝无数据丢失,因此其对于提交事务对应的redo 数据一致性要求非常高,另外,如果处于maximum protection模式的primary 数据库仍然与standby 数据库有数据传输,此时alter database语句更改standby数据库保护模式会失败,这也是由maximum protection 模式特性决定的。

 

一、物理standby的 Switchover

注意操作步骤的先后,很关键的哟。

1、检查是否支持switchover 操作--primary 数据库操作。

2、登陆primary 数据库,查询v$database 视图的switchover_status 列。

 

SQL>selects witchover_status from v$database;

 

SWITCHOVER_STATUS

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

TO STANDBY

 

如果该列值为"TO STANDBY"则表示primary数据库支持转换为standby角色,否则的话你就需要重新检查一下Data Guard配置,比如看看LOG_ARCHIVE_DEST_n之类参数值是否正确有效等等。

 

 

2、启动switchover --primary 数据库操作

首先将primary 转换为standby 的角色,通过下列语句:

 

SQL> alter database commit to switchover to physical standby

 

Database altered.

 

01:57:06  SQL>shutdown immediate;

ORA-01092: ORACLE instance terminated. Disconnection forced

 

SQL>startup mount;

ORACLE instance started.

 

Total System Global Area  417546240bytes

Fixed Size                  2228944bytes

Variable Size             289410352bytes

Database Buffers          121634816bytes

Redo Buffers                4272128bytes

Database mounted.

 

语句执行完毕后,primary数据库将会转换为standby数据库,并自动备份控制文件到trace

 

 

4、检查是否支持switchover 操作--待转换standby 数据库操作

待原primary 切换为standby 角色之后,检查待转换的standby 数据库switchover_status 列,看看是否支持角色转换。

23:10:48  SQL>select status from v$instance;

 

STATUS

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

MOUNTED

 

23:11:09  SQL>alter database open;

 

Database altered.

 

情况(1):

23:11:21  SQL>select switchover_status from v$database;

 

SWITCHOVER_STATUS

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

SWITCHOVERLATENT

(这种情况说明是需要进行redo应用,解决办法:开启MRP

23:11:29  SQL>

 

 

 

23:13:51  SQL>alter database commit to switchover toprimary;

alter databasecommit to switchover to primary

*

ERROR at line 1:

ORA-16139: mediarecovery required

 

 

23:14:49  SQL>alter database recover managed standby database disconnect  from session;

 

Database altered.

 

23:22:48  SQL> select database_role,switchover_status from v$database;

 

DATABASE_ROLE                    SWITCHOVER_STATUS

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

PHYSICALSTANDBY                 SWITCHOVERPENDING

 

(可以注意到,状态变了,说明正在应用。。。。再等一下)

 

 

23:23:02  SQL>select database_role,switchover_status  from v$database;

 

DATABASE_ROLE                    SWITCHOVER_STATUS

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

PHYSICALSTANDBY                 SWITCHOVERPENDING

 

23:23:20  SQL>r

  1* select database_role,switchover_status  from v$database

 

DATABASE_ROLE                    SWITCHOVER_STATUS

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

PHYSICALSTANDBY                 TO PRIMARY

ok,到这里说明已经完全应用了,开始进行switchover standby库)

 

23:24:53 SQL>alter database commit to switchover to primary;

 

Database altered.

 

23:28:38  SQL>select status from v$instance;

 

STATUS

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

MOUNTED

(细心的话可以注意到

1)情况1,如果执行前standby数据库是打开状态的,执行切换备库命令之后,备库是处于mount状态下,然而主库执行切换命令后是直接关闭了数据库

(2)情况二:

注意:待转换的物理standby可以处于mount 模式或open read only模式,但不能处于open read write模式。

 

 

情况(二):

23:23:20  SQL>r

  1* select database_role,switchover_status  from v$database

 

DATABASE_ROLE                    SWITCHOVER_STATUS

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

PHYSICALSTANDBY                 TO PRIMARY

 

这种情形时最容易的,直接执行就可以成功:

 

23:24:53 SQL>alter database commit to switchover to primary;

 

Database altered.

 

6、完成转换,打开新的primary 数据库

SQL>alterdatabase open;

 

Database altered.

 

注:如果数据库处于openread-only 模式的话,需要先shutdown然后直接startup即可。

 

 

7.验证新的primary:

SQL>select  max(sequence#)  from  v$archived_log;

 

MAX(SEQUENCE#)

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

            36

 

 

 

SQL>r

  1* alter system switch logfile

 

System altered.

 

 

Ok,主备库相同,说明切换成功!!

 

 

 

 

 

 

 

 

11.2.0.3物理 Data Guard主备库切换(附加:ora-16139错误的解决),布布扣,bubuko.com

11.2.0.3物理 Data Guard主备库切换(附加:ora-16139错误的解决)

原文:http://blog.csdn.net/panfelix/article/details/22071803

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!