ITPub博客

首页 > 数据库 > Oracle > Dataguard Physical Standy Switchover

Dataguard Physical Standy Switchover

原创 Oracle 作者:duduyey 时间:2014-08-08 10:28:58 1 删除 编辑
什么是switchover?

dataguard switchover指的就是将dataguard 主库和备库进行角色互换,同时保证没有数据丢失。

实验具体步骤:

数据库版本:

Primary Database :  Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
Physical Standby Database: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

1. 检查是否有Log file gap(主库和备库操作)


SQL> select status, gap_status from v$archive_dest_status where dest_id = 2;

STATUS    GAP_STATUS
--------- ------------------------
VALID     NO GAP


SQL> select status, gap_status from v$archive_dest_status where dest_id = 2;

STATUS    GAP_STATUS
--------- ------------------------
VALID     NO GAP

2. 检查备库上有与主库相匹配的临时表空间文件

主库:

SQL> select file_name from dba_temp_files;

FILE_NAME
------------------------------------------------------------
/data/oracle/oradata/phyprimary/temp01.dbf

备库:

SQL> select file_name from dba_temp_files;

FILE_NAME
--------------------------------------------------------------------------------
/data/oracle/oradata/phystandby/temp01.dbf

3. 确保主库应用到归档日志没有延迟(主库操作)

SQL> select delay_mins from v$archive_dest where dest_id = 2;

DELAY_MINS
----------
         0

如果存在,使用如下语句清除延迟

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE NODELAY;


4. 确保主库和备库的切换状态

主库:

SQL> select NAME,DB_UNIQUE_NAME,DATABASE_ROLE,SWITCHOVER_STATUS,PRIMARY_DB_UNIQUE_NAME,PROTECTION_MODE from v$database;

NAME      DB_UNIQUE_NAME                 DATABASE_ROLE    SWITCHOVER_STATUS    PRIMARY_DB_UNIQUE_NAME         PROTECTION_MODE
--------- ------------------------------ ---------------- -------------------- ------------------------------ --------------------
PHYPRIMA  phyprimary                     PRIMARY          TO STANDBY                                          MAXIMUM AVAILABILITY

备库:

SQL> set linesize 200
SQL> /

NAME      DB_UNIQUE_NAME                 DATABASE_ROLE    SWITCHOVER_STATUS    PRIMARY_DB_UNIQUE_NAME         PROTECTION_MODE
--------- ------------------------------ ---------------- -------------------- ------------------------------ --------------------
PHYPRIMA  phystandby                     PHYSICAL STANDBY NOT ALLOWED          phyprimary                     MAXIMUM AVAILABILITY

NOT ALLOWED:表示还没有从主库收到switch over的请求


5. 把主库切换成备库,并重启主库到mount


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

Database altered.

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

Total System Global Area  422670336 bytes
Fixed Size                  1336960 bytes
Variable Size             335546752 bytes
Database Buffers           79691776 bytes
Redo Buffers                6094848 bytes
Database mounted.

查看日志文件,此时数据库已经变成备库状态:
Successful mount of redo thread 1, with mount id 324279998
Physical Standby Database mounted

6. 查看备库的切换状态

SQL> /

NAME      DB_UNIQUE_NAME                 DATABASE_ROLE    SWITCHOVER_STATUS    PRIMARY_DB_UNIQUE_NAME         PROTECTION_MODE
--------- ------------------------------ ---------------- -------------------- ------------------------------ --------------------
PHYPRIMA  phystandby                     PHYSICAL STANDBY SESSIONS ACTIVE      phyprimary                     MAXIMUM AVAILABILITY

由于SWITCHOVER_STATUS  状态是SESSIONS ACTIVE,所以切换时要加上WITH SESSION SHUTDOWN 

7. 切换备库到主库(备库操作),并打开新的主库(原备库)

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

Database altered.

SQL> alter database open;

Database altered.

8. 查看当前主库(原备库)和备库(原主库)的状态

当前主库:


SQL> select NAME,DB_UNIQUE_NAME,DATABASE_ROLE,SWITCHOVER_STATUS,PRIMARY_DB_UNIQUE_NAME,PROTECTION_MODE from v$database;

NAME      DB_UNIQUE_NAME                 DATABASE_ROLE    SWITCHOVER_STATUS    PRIMARY_DB_UNIQUE_NAME         PROTECTION_MODE
--------- ------------------------------ ---------------- -------------------- ------------------------------ --------------------
PHYPRIMA  phystandby                     PRIMARY          TO STANDBY           phyprimary                     MAXIMUM AVAILABILITY

当前备库:

SQL> select NAME,DB_UNIQUE_NAME,DATABASE_ROLE,SWITCHOVER_STATUS,PRIMARY_DB_UNIQUE_NAME,PROTECTION_MODE from v$database;

NAME      DB_UNIQUE_NAME                 DATABASE_ROLE    SWITCHOVER_STATUS    PRIMARY_DB_UNIQUE_NAME         PROTECTION_MODE
--------- ------------------------------ ---------------- -------------------- ------------------------------ --------------------
PHYPRIMA  phyprimary                     PHYSICAL STANDBY RECOVERY NEEDED      phystandby                     MAXIMUM AVAILABILITY

9. 最后一步,在新备库应用Redo log

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

Database altered.

10. 验证切换是否成功

新主库:


SQL> select status, gap_status from v$archive_dest_status where dest_id = 2;

STATUS    GAP_STATUS
--------- ------------------------
VALID     NO GAP

SQL> !date    
Thu Aug  7 19:19:35 PDT 2014

SQL> alter system switch logfile;

System altered.

SQL> /

System altered.

SQL> SELECT SEQUENCE#, to_char(FIRST_TIME,'YYYY-MM-DD HH24:mi:ss'), to_char(NEXT_TIME,'YYYY-MM-DD HH24:mi:ss'),applied 
  2  FROM V$ARCHIVED_LOG ORDER BY SEQUENCE# desc;

SEQUENCE# TO_CHAR(FIRST_TIME, TO_CHAR(NEXT_TIME,' APPLIED
---------- ------------------- ------------------- ---------
        40 2014-08-07 19:19:41 2014-08-07 19:19:42 NO
        40 2014-08-07 19:19:41 2014-08-07 19:19:42 YES


新备库:

SQL> !date
Thu Aug  7 19:21:42 PDT 2014

SQL> SELECT SEQUENCE#, to_char(FIRST_TIME,'YYYY-MM-DD HH24:mi:ss'), to_char(NEXT_TIME,'YYYY-MM-DD HH24:mi:ss'),applied 
  2  FROM V$ARCHIVED_LOG ORDER BY SEQUENCE# desc;

SEQUENCE# TO_CHAR(FIRST_TIME, TO_CHAR(NEXT_TIME,' APPLIED
---------- ------------------- ------------------- ---------
        40 2014-08-07 19:19:41 2014-08-07 19:19:42 YES
        39 2014-08-07 19:12:01 2014-08-07 19:19:41 YES














来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28719055/viewspace-1247683/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-07-09

  • 博文量
    31
  • 访问量
    174869