zoukankan      html  css  js  c++  java
  • DG 逻辑standby角色转换

    逻辑standby之switchover

    要在primary和逻辑standby之间切换角色,一般是从操作primary开始。

    提示:如果primary或逻辑standby是rac结构,切记只保留一个实例启动,其它实例全部shutdown.等角色转换操作完成之后再启动其它实例,角色转换的操作会自动传播到这些实例上,并不需要你再对这些实例单独做处理。

    一、准备工作

    1. 检查primary和逻辑standby的初始化参数设置,常规的检查包括:

    - 确保fal_server, fal_client值设置正确

    - 确保log_archive_dest_n参数设置正确

    PRIMARY> show parameter fal
    
    PRIMARY> show parameter name_convert
    
    PRIMARY> show parameter log_archive_dest

    如果需要修改其中的参数,可通过以下方式:

    PRIMARY> alter system set log_archive_dest_2='...\std\ valid_for=(standby_logfiles, standby_role) db_unique_name=orcl';

    注意:xx_file_name_convert这两个参数无法动态修改,因此我们首先修改spfile,然后再重启一下数据库

    然后再以同样的方式查看逻辑standby数据库

    2. 检查primary数据库是否配置了standby redologs

    PRIMARY> select * from v$standby_log;

    如果没有则创建:

    PRIMARY> alter database add standby logfile group 4 ('c:\oradata\orcl\standbyrd01.log') size 20m;

    二、检查primary数据库状态

    PRIMARY> select switchover_status from v$database;

    三、准备转换primary为逻辑standby

    执行下列语句,将primary置为准备转换的状态:

    PRIMARY> alter database prepare to switchover to logical standby;
    
    PRIMARY> select switchover_status from v$database;

    四、准备转换逻辑standby为primary

    STANDBY> alter database prepare to switchover to primary;
    
    STANDBY> select switchover_status from v$database;

    五、再次检查primary数据库状态

    PRIMARY> select switchover_status from v$database;

    逻辑standby执行完prepare命令之后,就会发生相应的LogMiner字典数据,只有它正常生成并发送至当前的primary,转换操作才能够继续下去。不然当前的primary数据库在转换完之后,可能就失去了从新的primary接收redo数据的能力了。

    如果上述查询的返回结果不是:To logical standby就需要取消此次转换,检查原因,然后重新操作。

    分别在primary和逻辑standby执行:

    ALTER DATABASE PREPARE TO SWITCHOVER CANCEL;

    六、转换primary为逻辑standby

    PRIMARY> alter database commit to switchover to logical standby;

    七、再次检查逻辑standby状态

    STANDBY> select switchover_status from v$database;

    八、转换逻辑standby为primary

    最后的工作总会在逻辑standby上操作:

    STANDBY> alter database commit to switchover to primary;

    九、启动新逻辑standby的sql应用

    alter database start logical standby apply;

    逻辑standby之failover

    一、准备工作

    1. 检查及处理丢失的归档

    standby> select max(sequence#) from v$archived_log;
    primary> select sequence#, applied from dba_logstdby_log;

    提示,如果primary数据库已经无法打开,只好直接到磁盘上查看归档目录中的序号来与standby端做比较了。如果不同序号,则将primary尚未发送至standby的归档文件手工复制到待转换的逻辑standby服务器,然后在standby端通过ALTER DATABASE REGISTER LOGICAL LOGFILE;命令将文件手工注册。

    2. 检查待转换逻辑standby的日志应用情况

    STANDBY> select applied_scn, latest_scn from v$logstdby_progress;

    如果两值一至,表示所有接收到的归档都已经应用了。

    3. 检查及修正待转换逻辑standby的初始化参数配置

    standby> show parameter log_archive_dest
    ....

    二、激活新的primary数据库

    首先查看当前操作的角色

    sql> select database_role, force_logging from v$database;

    如果当前force_logging为no,务必执行:alter database force logging;

    转换standby角色为primary

    sql> alter database activate logical standby database finish apply;

    该语句主要是停止待转换的逻辑standby中RFS进程,并应用完当前所有已接收但并未应用的redo数据,然后停止sql应用,将数据库转换成primary角色。

    三、修复其它standby

    1. 在各个原逻辑standby中创建数据库链,连接到新的primary

      连接新primary的用户必须拥有SELECT_CATALOG_ROLE角色。

    jssldg> alter session disable guard;
    
    jssldg> create database link getjssweb connect to jss identified by jss using 'orcl';
    
    jssldg> alter session enable guard;

    2. 重新启动sql应用

    在各个逻辑standby执行下列语句启动sql应用(注意更新dblinkName):

    jssldg> alter database start logical standby apply new primary getjssweb;

    如果出现ORA-16109错误,那么必须重建逻辑standby.

    PRIMARY> select max(sequence#) from v$archived_log;
    standby> select sequence#, applied from dba_logstdby_log;

    如果日志已经传输过去,但是逻辑standby并没有开始应用(Applied=No),是怎么回事?

    a). 确认standby的各进程状态:

    standby> select process, status, group#, thread#, sequence#, block#, blocks from v$managed_standby;

    b). 手工查询新primary生成的归档日志情况:

    primary> select sequence#,name,completion_time from v$archived_log where sequence#>855;

    c). 验证传输过来的scn与最后应用的scn:

    standby> select applied_scn, latest_scn from v$logstdby_progress;

    d). 如果应用的scn与最后的scn确实不匹配,就把所有可疑的传输到standby的归档文件手工复制到standby,然后通过alter命令注册一下:

    standby> alter database register logical logfile 'c:\oradata\jssldg\std\xxxx.arc';

    e). 再次查看应用状态:

    standby> select sequence#, applied from dba_logstdby_log;
  • 相关阅读:
    还不知道spring的RestTemplate的妙用吗
    【学习笔记】机器学习之特征工程
    《饥饿的盛世》总结
    我是如何解决java.security.cert.CertPathValidatorException异常的
    《机器学习
    2018年总结
    元类实现ORM
    元类
    python中的装饰器
    python中的闭包
  • 原文地址:https://www.cnblogs.com/landexia/p/2624981.html
Copyright © 2011-2022 走看看