度量快速开发平台-专业、快速的软件定制快开平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 1130|回复: 1
打印 上一主题 下一主题

[分享] oracle standby 详解配置四

[复制链接]

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
跳转到指定楼层
楼主
发表于 2020-4-2 17:26:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5.            角色切换
Data Guard角色切换有两种方式:switchover 和 failover。
5.1.         Switchover
5.1.1.   物理Standby
Switchover切换不会丢失数据,切换之后原先的Primary数据库和Standby数据库角色互换,并且每个数据库在Data Guard配置中仍然继续运行。切换必须从Primary数据库发起,具体步骤如下:
Step 1.  Primary数据库检查视图V$DATABASE中的SWITCHOVER_STATUS列(SELECTSWITCHOVER_STATUS FROM V$DATABASE),如果是TO STANDBY则表示可以正常切换,如果是SESSIONS ACTIVE,在切换时带上WITH SESSION SHUTDOWN 子句也可以成功切换。
  
Step 2.  Primary数据库发起switchover切换,ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY; 切换之后重启实例 SHUTDOWN IMMEDIATE; STARTUPMOUNT;
  
Step 3.  Standby数据库检查视图V$DATABASE中的SWITCHOVER_STATUS列(SELECTSWITCHOVER_STATUS FROM V$DATABASE),如果是TO PRIMARY则表示可以正常切换,如果是SESSIONS ACTIVE,在切换时带上WITH SESSION SHUTDOWN 子句也可以成功切换。
  
Step 4.  Standby数据库切换Primary数据库,ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; 如果该Standby数据库从上次启动实例之后从未以read-only模式打开过,则直接ALTER DATABASE OPEN; 否则需要重启实例 SHUTDOWNIMMEDIATE; STARTUP;
  
Step 5. 如果必要的话,重启新Standby数据库的Log Apply服务 ALTER DATABASE RECOVER MANAGED STANDBYDATABASE; (详见4.1)。
  
5.1.2.   逻辑Standby
同物理Standby一样,switchover也必须从Primary数据库发起。
Step 1.  Primary数据库检查视图V$DATABASE中的SWITCHOVER_STATUS列(SELECT SWITCHOVER_STATUS FROM V$DATABASE),如果是TO STANDBY或SESSIONS ACTIVE则表示可以正常切换。
  
Step 2. Primary数据库执行SQL语句ALTER DATABASE PREPARE TO SWITCHOVER TOLOGICAL STANDBY;这一句SQL的作用是通知当前的Primary数据库准备切换至Standby,并从新的Primary数据库接收Redo Log。 此时V$DATABASE视图中SWITCHOVER_STATUS列的状态是PREPARING SWITCHOVER。
  
Step 3.  Standby数据库执行SQL语句ALTER DATABASE PREPARE TO SWITCHOVER TOPRIMARY; 这一句SQL的作用是在Standby数据库上启动Redo传输服务,此时该Standby数据库会将Redo Log传输到当前的Primary数据库和其他的Standby数据库,但是不做应用。
  
Step 4. Primary数据库检查视图V$DATABASE中的SWITCHOVER_STATUS列,在Step3完成后(LogMiner Multiversioned Data Dictionary被当前Primary数据库接收完成),SWITCHOVER_STATUS状态将变更为TO LOGICAL STANDBY。此时可以取消switchover切换,Primary和Standby分别执行SQL语句:ALTER DATABASE PREPARE TO SWITCHOVERCANCEL;
  
Step 5. Primary数据库执行ALTER DATABASE COMMIT TO SWITCHOVER TO LOGICAL STANDBY; 切换到Standby数据库。检查视图V$DATABASE中的SWITCHOVER_STATUS列,如果是TO_PRIMARY表示切换成功。
  
Step 6.  Standby数据库执行ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; 切换到Primary数据库。
  
Step 7. 的Standby数据库(即原先的Primary数据库)执行ALTER DATABASE START LOGICAL STANDBY APPLY; 开启SQL APPLY。
  
5.2.         Failover
5.2.1.   物理Standby
如果使用了failover切换,那么故障的Primary数据库将会被踢出Data Guard配置。大部分情况下,除了将被切换成Primary数据库的那台Standby数据库,其余的Standby数据库在failover切换之后将继续在Data Guard中正常运行,不需要重启或作其他操作。在少数情况下,会需要为新的Primary数据库重做这些Standby,具体情况下面会描述到。如果要进行failover切换,请按照以下的步骤,不要使用ALTER DATABASE ACTIVATE STANDBY DATABASE;语句,否则会造成数据丢失。另外如果Data Guard不是最大保护或者最高可用的话,也会丢失部分数据。
Step 1. 解决gap(详见3.4)。如果Data Guard为最大保护或者最高可用,那么在Primary故障发生时是没有gap的,所以可以直接跳到Step4进行操作。
  
Step 2. 重复Step1直到没有gap。
  
Step 3. 待切换的Standby数据库检查视图V$ARCHIVED_LOG,查出最高的日志序列号 SELECT UNIQUE THREAD# AS THREAD, MAX(SEQUENCE#) OVER (PARTITION BYthread#) AS LAST from V$ARCHIVED_LOG; 从Primary数据库的归档日志路径下,找到任何比之前查询到的最高序列号更高的日志,并copy到Standby数据库,使用SQL语句ALTER DATABASE REGISTER PHYSICAL LOGFILE'filespec1'; 进行注册。完成之后重复Step1,确保没有gap。
  
Step 4.  从Standby数据库发起failover切换。ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE; FORCE关键字表示让RFS进程直接终止,而不等待网络超时。
  
Step 5. 执行SQL语句ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; 切换成Primary数据库。在执行完这一句SQL语句之后,目标Standby数据库将切换成Primary数据库,切换之后该数据库将无法再被作为Standby数据库,并且从老的Primary数据库再传来任何Redo也无法被应用。Data Guard中其余的Standby数据库将不需要重启,自动从新的Primary数据库接收日志并应用,当然前提是归档路径配置正确。
  
Step 6. 这一步是否需要取决于该Standby数据库从上次启动到现在是否曾经以只读模式打开,如果打开过,则需要重启,如果没有则直接open即可。
  
Step 7. 备份新的Primary数据库。
  
5.2.2.   逻辑Standby
Step 1. 将Primary数据库上会传输过来的归档日志copy到Standby数据库并注册。(详见3.4.2)
  
Step 2. 检查视图SELECT APPLIED_SCN, LATEST_SCN FROM V$LOGSTDBY_PROGRESS; 如果APPLIED_SCN和LATEST_SCN值相同,则表示Standby恢复的数据和Primary相同。如果Standby数据库没有启用SQL APPLY,则可以通过SQL语句ALTER DATABASE START LOGICAL STANDBY APPLYFINISH; 开启。
  
Step 3. 检查LOG_ARCHIVE_DEST_2是否配置,VALID_FOR属性是否正确配置。如果没有,先配置好。(详见3.3)
  
Step 4.  Standby数据库执行ALTER DATABASE ACTIVATE LOGICAL STANDBY DATABASE FINISH APPLY; 这句语句会终止RFS进程,并且将Standby Redo Log中还未应用的日志进行应用,然后停止SQL APPLY,将数据库切换为Primary数据库。如果没有加FINISH APPLY,那么Standby Redo Log中的日志将不会被应用。
  
Step 5. 在原先Data Guard配置中其余的Standby数据库上执行以下三步,重新和新的Primary数据库组成Data Guard。
1. ALTER SESSION DISABLE GUARD;
              2.创建到新Primary数据库的db link
              3.ALTER SESSION ENABLE GUARD;
  
Step 6. 在Standby数据库上执行ALTER DATABASE START LOGICAL STANDBY APPLY NEW PRIMARYdblink; 这里的dblink就是step 5创建的db link名字。
  
Step 7. 备份新的Primary数据库。


6.            Data Guard物理Standby常用视图
视图名
数据库角色
视图内容描述
V$ARCHIVE_DEST
Primary, physical
显示Data Guard配置中所有的归档路径
V$ARCHIVE_DEST_STATUS
Primary, physical
显示归档路径的配置信息和状态
V$ARCHIVE_GAP
Primary, physical
显示归档日志gap,用于在failover切换时处理归档裂缝
V$ARCHIVED_LOG
Primary, physical
显示控制文件中保存的归档日志信息
V$DATAGUARD_CONFIG
Primary, physical
列出Data Guard中所有的DB_UNIQUE_NAME和
LOG_ARCHIVE_CONFIG参数信息
V$DATAGUARD_STATS
Primary, physical
显示所有Primary上未能传输给Standby的Redo Log信息,如果在Primary上查询该视图,那么结果值将被清除。
V$DATAGUARD_STATUS
Primary, physical
显示Data Guard中的事件信息,同时这些信息也会被记录在alert.log中和其他的trace文件中
V$MANAGED_STANDBY
Physical only
显示当前Standby的所有状态信息
V$STANDBY_LOG
Primary, physical
显示所有的Standby Redo Log信息

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
沙发
 楼主| 发表于 2020-4-2 17:26:44 | 只看该作者
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-11-24 05:49 , Processed in 0.130934 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表