欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Data Guard之逻辑备库的故障切换(logical standby failover)

程序员文章站 2022-05-08 12:12:39
...

Oracle Data Guard 用来保护Oracle数据,可提供*别的数据保护和可用性的同时,使Oracle数据库保持最卓越的性能。它的运行遵循一个原则:传输重做数据,然后应用重做数据。

它分成两种实现方式,分别为逻辑备库(logical standby)和物理备库(physical standby),用于不同的应用场景。如逻辑备库用于数据库的读写分离,物理备库用于数据库异地灾备。

Oracle 10g 逻辑备库中 ,如主库出现故障,备库也是可以迅速切换成主库使用。

 

参考oracle 官方文档http://docs.oracle.com/cd/B19306_01/server.102/b14239/role_management.htm7.3.2 Failovers Involving a Logical Standby Database 章节,切换过程介绍的很详细。

 

(mixi西游 @mikixyou 文档,原文链接: http://mikixiyou.iteye.com/blog/1530120 )

 

这里总结成下列三步:

 

第一步,将逻辑备库的应用模式关闭,近可能应用完所有的归档日志文件,使数据丢失度尽量小。

使用该SQL 检查日志的应用情况。

SELECT APPLIED_SCN, LATEST_SCN FROM V$LOGSTDBY_PROGRESS;

select to_char(applied_scn),to_char(latest_scn) from v$logstdby_progress;

如果两个值相等,那么继续下一步吧。

如果SQL 应用模式不是活动状态,那么可以启用它。

SQL> ALTER DATABASE START LOGICAL STANDBY APPLY FINISH;

 

Database altered.

SQL 应用完毕后,关闭SQL 应用模式。这里我直接重启了一下数据库。

SQL> alter database open;

 

Database altered.

第二步,将逻辑备用库转换为主库

SQL> ALTER DATABASE ACTIVATE LOGICAL STANDBY DATABASE FINISH APPLY;

 

Database altered.

这个语句停止RFS 进程,应用所有的standby 重做日志文件中的重做日志,然后停止SQL 应用,将备库切换成主库。

如果FINISH APPLY 不指定,那么将会不应用standby 重做日志文件中的重做日志信息。

 

第三步,检查数据库状态

SQL> select database_role from v$database;

 

DATABASE_ROLE

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

PRIMARY

 

SQL> show parameter name

 

NAME                                 TYPE        VALUE

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

db_file_name_convert                 string

db_name                              string      webreader

db_unique_name                       string      webdg

global_names                         boolean     FALSE

instance_name                        string      webreader

lock_name_space                      string

log_file_name_convert                string

service_names                        string      webdg

SQL> exit

数据库已经转换成primary 角色了,但数据库名称还是逻辑备库的数据库名称。虽然数据库的数据都在,数据库也可以访问,但就是有点不爽。这数据库名称能否修改成原来的主库一致的名称呢?能的话,又该如何修改呢?

 

请参考链接: http://mikixiyou.iteye.com/blog/1530140 使用nib修改Oracle数据库名称

 

这是正常情况下的故障切换操作,如重做数据日志不能完全应用,那么又该如何实现?