zoukankan      html  css  js  c++  java
  • ORACLE Physical Standby DG 之switch over

    DG架构图如下:

    计划,切换之后的架构图:

    DG切换:


    主备切换:
    这里所有的数据库数据文件、日志文件的路径是一致的

    【旧主库】主库primarydb切换为备库standby3
    主库检查switchover_status列的状态,是否支持switchover操作:如果该列值为"TO STANDBY"则表示primary 数据库支持转换为standby 角色
    prod> select switchover_status from v$database;
    SWITCHOVER_STATUS
    --------------------
    TO STANDBY
    SQL> alter database commit to switchover to physical standby ;
    SQL> select instance_name,status from v$instance;
    SQL> shutdown immediate

    【新建备库】新建备库standby3切换为主库

    检查v$database视图的switchover_status列的状态,是否支持switchover操作:
    SQL> select switchover_status from v$database;
    SWITCHOVER_STATUS
    --------------------
    TO PRIMARY

    SQL> alter database commit to switchover to primary ; --------此时此库可以处于mount模式或open read only模式
    SQL> alter database open; -----至此该库转换成为Primary库
    SQL> alter system switch logfile; 切日志
    SQL> select max(sequence#) from v$archived_log;


    新主库spfile修改:

    alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(primarydb,standby1,standby2,standby3,cascade)'

    alter system set log_archive_dest_1 = 'location=/data/app/oracle/arch valid_for=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=primarydb';
    alter system set log_archive_dest_2 = 'SERVICE=standby1 SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby1';
    alter system set log_archive_dest_3 = 'SERVICE=standby2 SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby2';
    alter system set log_archive_dest_4 = 'SERVICE=standby3 SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby3';
    alter system set log_archive_dest_5 = 'SERVICE=cascade SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=cascade';

    alter system set FAL_CLIENT='primarydb';
    alter system set FAL_SERVER='standby1','standby2','standby3','cascade';


    在主备库创建静态listener和tnsnames.ora,远程连接测试

    将新主库密码文件拷贝到各个新备库,并改名为orapwinstance_name
    备库1:
    修改密码文件cd $ORACLE_HOME/dbs mv orapwprimarydb orapwstandby1

    alter system set FAL_SERVER=primarydb;

    alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(primarydb,standby1)'
    alter system set log_archive_dest_2 = 'SERVICE=primarydb SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=primarydb';

    备库2:
    修改密码文件cd $ORACLE_HOME/dbs mv orapwprimarydb orapwstandby2

    alter system set FAL_SERVER=primarydb;

    alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(primarydb,standby2)'
    alter system set log_archive_dest_2 = 'SERVICE=primarydb SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=primarydb';

    备库3:
    备库3为先前主库:修改密码文件cd $ORACLE_HOME/dbs mv orapwprimarydb orapwstandby3
    启动数据库到mount
    SQL>startup mount
    开启备库为应用日志模式状态
    alter database recover managed standby database using current logfile disconnect from session;

    alter system set FAL_SERVER=primarydb;

    alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(primarydb,standby3)'

    alter system set log_archive_dest_2 = 'SERVICE=primarydb SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=primarydb';
    #指向级联备库的参数LOG_ARCHIVE_DEST_3='SERVICE=cascade SYNC VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=cascade’;
    #因为之前的DG架构为一主三备库,所以应将不需要的归档日志路径log_archive_dest_state_3设置为defer
    alter system set log_archive_dest_state_3=defer;


    备库4:cascade
    修改密码文件cd $ORACLE_HOME/dbs mv orapwprimarydb orapwcascade

    alter system set FAL_SERVER=primarydb;

    alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(primarydb,cascade)'
    alter system set log_archive_dest_2 = 'SERVICE=primarydb SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=primarydb';

    采坑:
    一:主备库日志缺口:
    FAL[client]: Failed to request gap sequence
    GAP - thread 1 sequence 10894-10894
    DBID 1016818008 branch 918555866
    FAL[client]: All defined FAL servers have been attempted.
    ------------------------------------------------------------
    Check that the CONTROL_FILE_RECORD_KEEP_TIME initialization
    parameter is defined to a value that's sufficiently large
    enough to maintain adequate log switch information to resolve
    archivelog gaps.
    ------------------------------------------------------------

    这里的解决方式是:
    在主库拷贝相应的日志到备库,然后在备库注册:
    alter database register logfile '/data/app/oracle/arch/1_3120_948067048.dbf';

    二:主库可以远程连接备库,但是主库报错ORA16191

    Error 1017 received logging on to the standby
    ------------------------------------------------------------
    Check that the primary and standby are using a password file
    and remote_login_passwordfile is set to SHARED or EXCLUSIVE,
    and that the SYS password is same in the password files.
    returning error ORA-16191
    ------------------------------------------------------------

    密码文件需要在主库生成,然后拷贝之备库,然后在备库重命名。注意orapw文件的权限。

    三:主库不能往新建的备库传日志


    log_archive_dest_state_3默认是enable,但是也需要重新配置一下
    alter system set log_archive_dest_state_3=enable;

  • 相关阅读:
    【leetcode】1228.Missing Number In Arithmetic Progression
    【leetcode】1227. Airplane Seat Assignment Probability
    【leetcode】1224. Maximum Equal Frequency
    【leetcode】1222. Queens That Can Attack the King
    【leetcode】1221. Split a String in Balanced Strings
    【leetcode】1219. Path with Maximum Gold
    【leetcode】1220. Count Vowels Permutation
    【leetcode】1218. Longest Arithmetic Subsequence of Given Difference
    【leetcode】1217. Play with Chips
    2018.11.27 元器件选型(2)- 连接器
  • 原文地址:https://www.cnblogs.com/elontian/p/9430262.html
Copyright © 2011-2022 走看看