data guard物理备份方式中的switchover转换

切换分为switchover和failover,前者是无损切换,不会丢失数据,而后者则有可能会丢失数据,并且切换后原primary 数据库也不再是该data guard 配置的一部分了.针对不同standby(逻辑或物理)的处理方式也不尽相同

角色转换前的准备工作
检查各数据库的初始化参数,主要确认对不同角色相关的初始化参数都进行了正确的配置。
确保可能成为primary 数据库的standby 服务器已经处于archivelog 模式。
确保standby 数据库的临时文件存在并匹配primary 数据库的临时文件
确保standby 数据库的RAC 实例只有一个处于open 状态。(对于rac 结构的standby 数据库,在角
色转换时只能有一个实例startup。其它rac 实例必须统统shutdown,待角色转换结束后再startup)

Switchover:
无损转换,通常是用户手动触发或者有计划的让其自动触发,比如硬件升级啦,软件升级啦之类的。
通常它给你带来的工作量非常小并且都是可预计的。其执行分两个阶段,第一步, primary 数据库转换为
standby 角色,第二步,standby 数据库(之一)转换为primary 角色,primary 和standby 只是简单的角色互换.
Failover:
不可预知原因导致primary 数据库故障并且短期内不能恢复就需要failover。
在执行failover 之前,尽可能将原primary 数据库的可用redo 都复制到standby 数据库。
注意,如果要转换角色的standby 处于maximum protection 模式,需要你首先将其切换为maximum
performance模式.转换standby 数据库到MAXIMIZE PERFORMANCE 执行下列SQL 即可:
SQL> ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;
等standby 切换为新的primary 之后,你可以再随意更改数据库的保护模式。
maximum protection 模式需要确保绝无数据丢失,因此其对于提交事务对应的redo 数据一致性要求非常高,
另外,如果处于maximum protection 模式下primary 数据库仍然与standby 数据库有数据传输,此时alter
database 语句更改standby 数据库保护模式会失败,这也是由maximum protection 模式特性决定的。

下面演示switchover的过程:
一、物理standby的Switchover
注意操作步骤的先后,很关键的哟。
1、检查是否支持switchover 操作–primary 数据库操作

SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
TO STANDBY

在第一次switch的时候看primary上的switchover_status字段上的值是session active。standby上面的该字段的值是not allowed,这个第一次没关系:

NOT ALLOWED - Either this is a standby database and the primary database has
not been switched first, or this is a primary database and there are no standby databases.

SESSIONS ACTIVE - Indicates that there are active SQL sessions attached to
the primary or standby database that need to be disconnected before the
switchover operation is permitted.

SWITCHOVER PENDING - This is a standby database and the primary database
switchover request has been received but not processed.

SWITCHOVER LATENT - The switchover was in pending mode, but did not complete
and went back to the primary database.

TO PRIMARY - This is a standby database, with no active sessions, that is
allowed to switch over to a primary database.

TO STANDBY - This is a primary database, with no active sessions, that is
allowed to switch over to a standby database.

RECOVERY NEEDED - This is a standby database that has not received the
switchover request.

During normal operations it is acceptable to see the following values for
SWITCHOVER_STATUS on the primary to be SESSIONS ACTIVE or TO STANDBY.
During normal operations on the standby it is acceptable to see the values
of NOT ALLOWED or SESSIONS ACTIVE.

2、启动switchover –primary 数据库操作
说明:
主库需要注意事项
A 如果switchover_status为TO_STANDBY说明可以转换
直接转换

alter database commit to switchover to physical standby;

B 如果switchover_status为SESSIONS ACTIVE 则关闭会话

SQL>alter database commit to switchover to physical standby with session shutdown;

在备库中操作,查看备库

SQL> select switchover_status from v$database;

A 如果switchover_status为TO_PRIMARY 说明标记恢复可以直接转换为primary库

SQL>alter database commit to switchover to primary

B 如果switchover_status为SESSION ACTIVE 就应该断开活动会话

SQL>alter database commit to switchover to primary with session shutdown;

C 如果switchover_status为NOT ALLOWED 说明切换标记还没收到,此时不能
执行转换。

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

[oracle@weblogic28 ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Mon Dec 3 10:09:33 2012

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


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options

SQL> select switchover_status from v$database;

SWITCHOVER_STATUS
--------------------
SESSIONS ACTIVE

SQL> alter database commit to switchover to physical standby with session shutdown;

Database altered.

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

3、重启动到mount –原primary 数据库操作

SQL> shutdown immediate;
ORA-01507: database not mounted


ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.

Total System Global Area 6442450944 bytes
Fixed Size                  2030368 bytes
Variable Size            1090520288 bytes
Database Buffers         5335154688 bytes
Redo Buffers               14745600 bytes
Database mounted.

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

[oracle@weblogic29 ~]$ sqlplsu /as sysdba
-bash: sqlplsu: command not found
[oracle@weblogic29 ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Mon Dec 3 10:09:24 2012

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


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options

SQL> select switchover_status from v$database;

SWITCHOVER_STATUS
--------------------
TO PRIMARY

此时待转换standby 数据库switchover_status 列值应该是”TO_PRIMARY”,如否则检查其初始化参数文件中的设置,提示一下,比着原primary 数据库的初始化参数改改。

5、转换角色到primary –待转换standby 数据库操作
通过下列语句转换standby 到primary 角色:

SQL> alter database commit to switchover to primary;

Database altered.

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

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

SQL> alter database open;

Database altered.

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

7、验证一下
新的primary 数据库

SQL> show parameter db_unique

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_unique_name                       string      jyrac1

SQL> alter  system  switch  logfile;

System altered

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

MAX(SEQUENCE#)
--------------
           140

新的standby 数据库

SQL> show parameter db_unique

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_unique_name                       string      jytest
SQL>

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

MAX(SEQUENCE#)
--------------
           140

转换成功。

SQL> alter database recover managed standby database disconnect from session;

发表评论

电子邮件地址不会被公开。