暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle | Data Guard Broker 实战及管理(四)

数据库实用技能 2021-04-19
1086


数据库转换的基本概念



转换的类型

switchover

switchover是primary数据库和它的一个standby数据库之间角色的切换,通常是有计划的数据库转换,保证不会有数据丢失。

Failover

failover发生在primary数据库失败之后,它的一个standby接替它成为primary数据库。failover通常发生primary数据库不可恢复的情况下,根据数据库保护模式的不一样failover可能会有数据丢失。

转换目标的选择

对switchover操作来说,遵循以下的步骤

  1. 首先选择未应用的redo的standby,这个可以通过SHOW DATABASE db_unique_name RecvQEntries看到。

  2. 对于物理和逻辑standby同时存在时,优先选择redo apply queue最小的物理standby,因为物理standby在转换之后所有的standby都能正常工作,而转换到逻辑standby之后同一组里面的物理standby将要重建。

对failover操作来说,遵循以下的步骤

  1. 为降低数据丢失的数量,首先要选择应用日志最多的standby。

  2. 对于物理和逻辑standby同时存在时,优先选择物理standby,因为物理standby在转换之后所有的standby都能正常工作,而转换到逻辑standby之后同一组里面的standby将要重建。另外一个如果逻辑standby使用DBMS_LOGSTDBY.SKIP忽略了一部分数据库话也会造成数据丢失。

Data Guard转换的三个层次

第一个层次是在没有配置broker的环境中,在这种环境下,如果要进行数据库的角色却换的话通常需要3个步骤:

  1. 首先是检查data guard环境中的数据库是否满足转换的条件。

  2. 然后登陆到primary数据库运行sql转换角色,再重启primary数据库使其变成standby。

  3. 再登录到要转换的standby数据库上,运行sql转换角色,再重新启动standby以变成新的primary。

第二个层次是配置了broker但是没有配置FSF(fast-start failover)的环境中,在这里做switchover和failover都只需要一个简单的命令,剩下的重启primary和standby的操作就交给broker去做了。

第三个层次是配置了FSF的机器,这时候数据库的状态由FSF Observer监控着,一旦primary数据库出现了问题需要failover操作,FSF会自动进行数据库的转换,根本就不需要人来参与了。

Broker管理下的switchover和failover



switchover

broker管理下的switchover的过程

  1. 检查primary和standby是否online,是否有错误,如果有错误则switchover失败。

  2. 如果primary是RAC,则关掉RAC中所有不参与switchover的instance。

  3. 将primary数据库转换成standby数据库,然后将目标standby数据库转换成新的primary数据库。

  4. 更新broker控制文件记录转换之后的数据库角色信息。

  5. 如果新的standby是物理standby的话将会重启之,然后开始redo log应用。RAC环境中将会重启那些被关闭的instance。

  6. 如果是物理standby环境的话重启新的primary数据库然后开始rodo log的传送到其他的standby中。
    最后broker会确认转换之后的新primary和standby都工作正常,redo log传送和应用都正常。对于那些没有参与switchover的standby将会保持不变。

将primary switchover standby,standby switchover primary

---查看数据库状态                                                                                                  

Primary:

Standby:

DGMGRL> switchover to stoms

立即执行切换, 请稍候...

新的主数据库 "stoms" 正在打开...

操作要求关闭实例 "oms" (在数据库 "oms" 上)

正在关闭实例 "oms"...

ORA-01031: insufficient privileges

警告: 您不再连接到 ORACLE。

请执行以下步骤以完成切换:

关闭实例 "oms" (属于数据库 "oms")

启动并装载实例 "oms" (属于数据库 "oms")

DGMGRL>

----查看数据库状态

primary:

standby:

主备已经正常切换。

---查看日志应用情况

Primary:

Standby:

DGMGRL> show configuration

Configuration - dg_oms

Protection Mode: MaxPerformance

Databases:

stoms - Primary database

oms - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:

SUCCESS

DGMGRL>

注意:切换后从库最好从新启动应用,否则将提示以下错误:

DGMGRL> show configuration

Error:

Configuration - dg_oms

Protection Mode: MaxPerformance

Databases:

oms - Primary database

stoms - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:

ORA-16570: database needs restart

ORA-06512: at "SYS.X$DBMS_DRS", line 228

ORA-06512: at line 1

DGM-17017: unable to determine configuration status

failover

完全failover

进行完全failover操作的是很broker会竟可能的恢复数据,同时在failover完成之后会根据情况尽可能的将没有参与failover的standby变成新的primary的可用的standby。

立即failover

立即failover的操作开始之后broker不再去试图恢复更多的数据,另一个就是failover完成之后所有没有参与failover的standby都要重新启用。

调用这两种failover的命令如下

-- 完全failover

FAILOVER TO standby_database_name;

-- 立即failover

FAILOVER TO standby_database_name IMMEDIATE;

broker执行完全failover的过程

  1. 检查primary是否可用,可用的话给出一条警告信息。

  2. 确认目标standby可用,不可用的话failover失败。RAC环境中将关闭standby的其他不参与的instance。

  3. 等待目标standby完成还在队列中的redo信息之后关闭redo log apply或是sql apply。

  4. 将目标standby转换成新的primary。

    • 将新的primary数据库打开为读写模式。

    • 检查其他的standby是否能成为新primary的standby,如果可以的话则该standby的状态保证不变,否则则需要re-enable。

    • 启动redo传送服务将redo传送给那些不需要re-enable的standby数据库。

  5. 如果是RAC环境则重启那些之前关闭的instance。

broker执行立即failover的过程

  1. 确认目标standby可用,不可用的话failover失败。RAC环境中将关闭standby的其他不参与的instance。

  2. 立即停止redo log apply或是sql apply,不管是否还有可恢复的数据,这样可能会造成数据丢失。

  3. 将目标standby转换成新的primary并打开到读写模式,并启动redo传送服务。

-- 完全failover

DGMGRL> failover to stoms; ----/备库上执行///-------

Performing failover NOW, please wait...

Failover succeeded, new primary is "stoms"

DGMGRL> show configuration

Configuration - dg_oms

Protection Mode: MaxPerformance

Databases:

stoms - Primary database

oms - Physical standby database (disabled)

ORA-16661: the standby database needs to be reinstated

Fast-Start Failover: DISABLED

Configuration Status:

SUCCESS

从上面的状态可以看到此时的新standby是不可用的,处于disabled状态。


角色转换之后的数据库的启用



在角色转换之后可能还需要进行额外的操作来启用被禁用的数据库,操作已知data guard的类型不同需要启用数据库情况也不同。

转换操作

reinstate或recreate 有问题的primary数据库

重新启用没有参与failover的standby

switchover到物理standby

不需要其他操作

不需要其他操作

switchover到逻辑standby

不需要其他操作

所有物理standby需要recreate

完全failover到物理standby

如果启用了flashback而且retention足够的话可以reinstate,否则只能recreate

对于物理standby如果启用了flashback而且retention足够的话可以reinstate,否则只能recreate
对于逻辑standby必须recreate

完全failover逻辑standby

如果启用了flashback而且retention足够的话可以reinstate,否则只能recreate

所有standby都会被disabled,都需要recreate

立即failover到物理standby或逻辑standby

必须要recreate

所有standby都会被disabled,都需要recreate


Reinstate操作

在broker中进行reinstate数据库操作只需要运行一个命令就行了,不过前提是配置了flashback以及足够的retention。

REINSTATE DATABASE db_unique_name;

基本步骤是:

  1. 重启数据库到mount状态

  2. 使用dgmgrl连接到primary数据库

  3. 运行REINSTATE DATABASE命令


文章转载自数据库实用技能,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论