Implement Oracle Datagurad Failover

简介:

生产环境中,可能会有各种各样的原因导致数据库不能提供服务,例如数据库库的硬件故障,操作系统故障或软件bug,人为的失误(例如rm -rf /)等,在这种情况下,dataguard显得尤为重要,当主库不可用的时候,可以将备库failover成主库继续提供服务,failover和switchover不同的是,执行failover后,原有的dataguard配置将会失效且有可能会丢失部分数据,所以在生产环境中能用switchover解决的问题则应尽量采用switchover!switchover执行过程参考:http://ylw6006.blog.51cto.com/470441/849829

一:使用sql命令执行failover
1:查看当前的主库是dg1,物理备库为dg2,将主库关闭,模拟主库故障

 
  1. [oracle@dg2 ~]$ dgmgrl /  
  2. DGMGRL for Linux: Version 11.2.0.3.0 - 64bit Production  
  3. Copyright (c) 2000, 2009, Oracle. All rights reserved.  
  4. Welcome to DGMGRL, type "help" for information.  
  5. Connected.  
  6. DGMGRL> show configuration;  
  7.  
  8. Configuration - DG_BROKER_CONFIG  
  9.  
  10.   Protection Mode: MaxAvailability  
  11.   Databases:  
  12.     dg1 - Primary database  
  13.     dg2 - Physical standby database  
  14.  
  15. Fast-Start Failover: DISABLED  
  16.  
  17. Configuration Status:  
  18. SUCCESS  
  19.  
  20. SQL> select open_mode,database_role,db_unique_name,flashback_on from v$database;  
  21.  
  22. OPEN_MODE            DATABASE_ROLE    DB_UNIQUE_NAME       FLASHBACK_ON  
  23. -------------------- ---------------- -------------------- ------------------  
  24. READ WRITE           PRIMARY          dg1                  NO  
  25.  
  26. SQL> shutdown abort  
  27. ORACLE instance shut down. 

2:在备库dg2上执行failover过程,failover执行的命令和switchover类似,只是在这个过程中,主库已经不可用

 
  1. SQL> select open_mode,database_role,db_unique_name,flashback_on from v$database;  
  2.  
  3. OPEN_MODE            DATABASE_ROLE    DB_UNIQUE_NAME       FLASHBACK_ON  
  4. -------------------- ---------------- -------------------- ------------------  
  5. READ ONLY WITH APPLY PHYSICAL STANDBY dg2                  NO  
  6.  
  7. SQL> alter database recover managed standby database cancel;  
  8. Database altered.  
  9.  
  10. SQL> select open_mode,database_role,db_unique_name,flashback_on from v$database;  
  11.  
  12. OPEN_MODE            DATABASE_ROLE    DB_UNIQUE_NAME       FLASHBACK_ON  
  13. -------------------- ---------------- -------------------- ------------------  
  14. READ ONLY            PHYSICAL STANDBY dg2                  NO  
  15.  
  16. 出现这个错误说明日志并未完全的应用  
  17. SQL> alter database commit to switchover to primary;  
  18. alter database commit to switchover to primary  
  19. *  
  20. ERROR at line 1:  
  21. ORA-16139: media recovery required  
  22.  
  23. SQL> alter database recover managed standby database using current logfile disconnect from session;  
  24. Database altered.  
  25.  
  26. SQL> select open_mode,database_role,db_unique_name,flashback_on from v$database;  
  27.  
  28. OPEN_MODE            DATABASE_ROLE    DB_UNIQUE_NAME       FLASHBACK_ON  
  29. -------------------- ---------------- -------------------- ------------------  
  30. READ ONLY WITH APPLY PHYSICAL STANDBY dg2                  NO  
  31.  
  32. SQL> alter database recover managed standby database finish;  
  33. Database altered.  
  34.  
  35. SQL> alter database commit to switchover to primary;  
  36. Database altered.  
  37.  
  38. SQL> select open_mode,database_role,db_unique_name,flashback_on from v$database;  
  39.  
  40. OPEN_MODE            DATABASE_ROLE    DB_UNIQUE_NAME       FLASHBACK_ON  
  41. -------------------- ---------------- -------------------- ------------------  
  42. MOUNTED              PRIMARY          dg2                  NO  
  43.  
  44. SQL> alter database open;  
  45. Database altered.  
  46.  
  47. SQL> select open_mode,database_role,db_unique_name,flashback_on from v$database;  
  48.  
  49. OPEN_MODE            DATABASE_ROLE    DB_UNIQUE_NAME       FLASHBACK_ON  
  50. -------------------- ---------------- -------------------- ------------------  
  51. READ WRITE           PRIMARY          dg2                  NO 

二:使用datagurad broker进行failover
1:开启主库和备库的闪回功能,主要用于主库恢复后的reinstate操作,当前主库为dg2,备库为dg1

 
  1. SQL> select open_mode,database_role,db_unique_name,flashback_on from v$database;  
  2.  
  3. OPEN_MODE            DATABASE_ROLE    DB_UNIQUE_NAME       FLASHBACK_ON  
  4. -------------------- ---------------- -------------------- ------------------  
  5. READ WRITE           PRIMARY          dg2                  YES  
  6.  
  7. SQL> select open_mode,database_role,db_unique_name,flashback_on from v$database;  
  8.  
  9. OPEN_MODE            DATABASE_ROLE    DB_UNIQUE_NAME       FLASHBACK_ON  
  10. -------------------- ---------------- -------------------- ------------------  
  11. READ ONLY WITH APPLY PHYSICAL STANDBY dg1                  YES  
  12.  
  13. [oracle@dg1 ~]$ dgmgrl sys/123456@dg1  
  14. DGMGRL for Linux: Version 11.2.0.3.0 - 64bit Production  
  15.  
  16. Copyright (c) 2000, 2009, Oracle. All rights reserved.  
  17.  
  18. Welcome to DGMGRL, type "help" for information.  
  19. Connected.  
  20. DGMGRL> show configuration;  
  21.  
  22. Configuration - DG_BROKER_CONFIG  
  23.  
  24.   Protection Mode: MaxAvailability  
  25.   Databases:  
  26.     dg2 - Primary database  
  27.     dg1 - Physical standby database  
  28.  
  29. Fast-Start Failover: DISABLED  
  30.  
  31. Configuration Status:  
  32. SUCCESS 

2:关闭主库dg2,模拟主库故障

 
  1. SQL> select open_mode,database_role,db_unique_name,flashback_on from v$database;  
  2.  
  3. OPEN_MODE            DATABASE_ROLE    DB_UNIQUE_NAME       FLASHBACK_ON  
  4. -------------------- ---------------- -------------------- ------------------  
  5. READ WRITE           PRIMARY          dg2                  YES  
  6.  
  7. SQL> shutdown abort  
  8. ORACLE instance shut down.  
  9.  
  10. DGMGRL> show configuration;  
  11.  
  12. Configuration - DG_BROKER_CONFIG  
  13.  
  14.   Protection Mode: MaxAvailability  
  15.   Databases:  
  16.     dg2 - Primary database  
  17.     dg1 - Physical standby database  
  18.  
  19. Fast-Start Failover: DISABLED  
  20.  
  21. Configuration Status:  
  22. ORA-01034: ORACLE not available  
  23. ORA-16625: cannot reach database "dg2"  
  24. DGM-17017: unable to determine configuration status 

3:执行failover

 
  1. DGMGRL> failover to dg1;  
  2. Performing failover NOW, please wait...  
  3. Failover succeeded, new primary is "dg1"  
  4. DGMGRL> show configuration;  
  5.  
  6. Configuration - DG_BROKER_CONFIG  
  7.  
  8.   Protection Mode: MaxAvailability  
  9.   Databases:  
  10.     dg1 - Primary database  
  11.       Warning: ORA-16629: database reports a different protection level from the protection mode  
  12.  
  13.     dg2 - Physical standby database (disabled)  
  14.       ORA-16661: the standby database needs to be reinstated  
  15.  
  16. Fast-Start Failover: DISABLED  
  17.  
  18. Configuration Status:  
  19. WARNING 

4:重新启动原主库dg2

 
  1. SQL> startup  
  2. ORACLE instance started.  
  3.  
  4. Total System Global Area  417546240 bytes  
  5. Fixed Size                  2228944 bytes  
  6. Variable Size             352324912 bytes  
  7. Database Buffers           54525952 bytes  
  8. Redo Buffers                8466432 bytes  
  9. Database mounted.  
  10. ORA-16649: possible failover to another database prevents this database from  
  11. being opened  
  12.  
  13. SQL> select open_mode,database_role,db_unique_name,flashback_on from v$database;  
  14.  
  15. OPEN_MODE            DATABASE_ROLE    DB_UNIQUE_NAME       FLASHBACK_ON  
  16. -------------------- ---------------- -------------------- ------------------  
  17. MOUNTED              PRIMARY          dg2                  YES 

5:执行reinstate操作

 
  1. DGMGRL> reinstate database dg2;  
  2. Reinstating database "dg2", please wait...  
  3. Operation requires shutdown of instance "dg" on database "dg2"  
  4. Shutting down instance "dg"...  
  5. ORA-01109: database not open  
  6.  
  7. Database dismounted.  
  8. ORACLE instance shut down.  
  9. Operation requires startup of instance "dg" on database "dg2"  
  10. Starting instance "dg"...  
  11. Unable to connect to database  
  12. ORA-12514: TNS:listener does not currently know of service requested in connect descriptor  
  13.  
  14. Failed.  
  15. Warning: You are no longer connected to ORACLE.  
  16.  
  17. Please complete the following steps and reissue the REINSTATE command:  
  18.         start up and mount instance "dg" of database "dg2"  
  19.  
  20. SQL> conn /as sysdba  
  21. Connected to an idle instance.  
  22. SQL> startup  
  23. ORACLE instance started.  
  24.  
  25. Total System Global Area  417546240 bytes  
  26. Fixed Size                  2228944 bytes  
  27. Variable Size             352324912 bytes  
  28. Database Buffers           54525952 bytes  
  29. Redo Buffers                8466432 bytes  
  30. Database mounted.  
  31. Database opened.  
  32. SQL> select open_mode,database_role,db_unique_name,flashback_on from v$database;  
  33.  
  34. OPEN_MODE            DATABASE_ROLE    DB_UNIQUE_NAME       FLASHBACK_ON  
  35. -------------------- ---------------- -------------------- ------------------  
  36. READ ONLY            PHYSICAL STANDBY dg2                  YES  
  37.  
  38. DGMGRL> show configuration;  
  39.  
  40. Configuration - DG_BROKER_CONFIG  
  41.  
  42.   Protection Mode: MaxAvailability  
  43.   Databases:  
  44.     dg1 - Primary database  
  45.     dg2 - Physical standby database (disabled)  
  46.       ORA-16661: the standby database needs to be reinstated  
  47.  
  48. Fast-Start Failover: DISABLED  
  49.  
  50. Configuration Status:  
  51. SUCCESS  
  52.  
  53. DGMGRL> enable database dg2;  
  54. Error: ORA-16661: the standby database needs to be reinstated  
  55.  
  56. Failed.  
  57. DGMGRL> reinstate database dg2;  
  58. Reinstating database "dg2", please wait...  
  59. Reinstatement of database "dg2" succeeded  
  60.  
  61. DGMGRL> show configuration;  
  62.  
  63. Configuration - DG_BROKER_CONFIG  
  64.  
  65.   Protection Mode: MaxAvailability  
  66.   Databases:  
  67.     dg1 - Primary database  
  68.     dg2 - Physical standby database  
  69.  
  70. Fast-Start Failover: DISABLED  
  71.  
  72. Configuration Status:  
  73. SUCCESS 

总结
1:非到万不得已的情况,不使用failover,优先考虑switchover
2:若执行failover,则考虑使用sql命令完成
3:执行failover后,应及时备份数据,并重构dg环境

本文转自斩月博客51CTO博客,原文链接http://blog.51cto.com/ylw6006/855476如需转载请自行联系原作者


ylw6006

相关文章
|
Oracle 网络协议 关系型数据库
|
SQL 网络协议 Oracle
|
SQL Oracle 关系型数据库
|
SQL 关系型数据库 数据库
|
Oracle 关系型数据库 数据库
|
关系型数据库 Oracle
Oracle RAC的Failover
在Oracle RAC环境下,如果一个节点失败,怎么样保证切换到另一个节点上去呢?可在tnsnames.ora中增加如下参数: (failover_mode=(type=select)(method=basic)) 除了正在运行的事务之外的任何操作,都可以无缝地切换到另一个节点
762 0
|
负载均衡 Oracle 关系型数据库
Oracle RAC failover 测试(连接时故障转移)
    Oracle RAC 集群最突出的表现就是高可用性,这些内容主要包括load balance以及failover,通过这些技术使得单点故障不影响客户端端应用程序对数据库的正常访问,以及通过创建service实现节点间负载均衡。
1303 0
|
负载均衡 Oracle 关系型数据库
Oracle RAC failover 测试(TAF方式)
    Oracle RAC 客户端故障转移(failover),当采用TAF方式时,对于已经建立连接的客户端,在连接的实例或节点出现故障时,客户端无需再次发出连接请求,仍然可以继续之前的数据库操作,此称之为透明故障转移。
1350 0
|
负载均衡 Oracle 关系型数据库
Oracle RAC failover 测试(Server TAF方式)
    Oracle RAC中,除了基于客户端的TAF方式之外,还有基于服务器端的TAF方式,可以把服务端的TAF方式看作是客户端TAF方式的一个升级版吧。
1105 0