运维联盟俱乐部

 找回密码
 立即注册
查看: 3920|回复: 0

[日常管理] 18c & 19c Physical Standby Switchover Best Practices using SQL*Plus

[复制链接]
  • TA的每日心情
    开心
    2023-8-9 11:05
  • 发表于 2023-3-20 15:40:21 | 显示全部楼层 |阅读模式
    18c & 19c Physical Standby Switchover Best Practices using SQL*Plus (Doc ID 2485237.1)
    1.主备库应该是同样的数据库版本
    2.检查确认数据库日志中没有异常报错,查看数据库日志或者查询v$diag_alert_ext视图
    3.查询v$database_block_corruption & v$nonlogged_block没有坏块
    4.检查主备之间日志传送和应用状态
    主库:
    1. col DEST_NAME for a20
    2. col DESTINATION for a25
    3. col ERROR for a15
    4. col ALTERNATE for a20
    5. set lines 1000
    6. select DEST_NAME,DESTINATION,ERROR,ALTERNATE,TYPE,status,VALID_TYPE,VALID_ROLE from V$ARCHIVE_DEST where STATUS <>'INACTIVE';
    复制代码
    1. SELECT thread#
    2.         ,max(sequence#) "Last Primary Seq Generated"
    3. FROM gv$archived_log val
    4.         ,gv$database vdb
    5. WHERE val.resetlogs_change# = vdb.resetlogs_change#
    6. GROUP BY thread#
    7. ORDER BY 1;
    复制代码
    备库:
    1. SELECT thread#
    2.         ,max(sequence#) "Last Standby Seq Received"
    3. FROM gv$archived_log val
    4.         ,gv$database vdb
    5. WHERE val.resetlogs_change# = vdb.resetlogs_change#
    6. GROUP BY thread#
    7. ORDER BY 1;
    复制代码
    1. select thread#, max(sequence#) "Last Standby Seq Applied"
    2. from gv$archived_log val, gv$database vdb
    3. where val.resetlogs_change# = vdb.resetlogs_change#
    4. and val.applied in ('YES','IN-MEMORY')
    5. group by thread# order by 1;
    复制代码
    5.参数设置检查
    1. set lines 180 pages 2000 feedback off
    2. col name for a40
    3. col value for a60
    4. SELECT name
    5.         ,value
    6.         ,DECODE(isdefault, 'FALSE', isdefault, isdefault) isdefault
    7.         ,DECODE(isdefault, 'FALSE', issys_modifiable, issys_modifiable) issys_modifiable
    8. FROM v$parameter
    9. WHERE name IN (
    10.                 'db_unique_name'
    11.                 ,'db_name'
    12.                 ,'service_names'
    13.                 ,'fal_client'
    14.                 ,'fal_server'
    15.                 ,'standby_file_management'
    16.                 ,'log_archive_config'
    17.                 ,'remote_login_passwordfile'
    18.                 ,'db_file_name_convert'
    19.                 ,'log_file_name_convert'
    20.                 ,'log_archive_format'
    21.                 ,'instance_name'
    22.                 ,'compatiable'
    23.                 ,'db_create_file_dest'
    24.                 ,'db_create_online_log_dest_1'
    25.                                 ,'db_recovery_file_dest'
    26.                                 ,'db_recovery_file_dest_size'
    27.                 );
    复制代码
    5.确认没有gap
    1. SELECT thread#
    2.         ,max(sequence#) "Last Standby Seq Applied"
    3. FROM gv$archived_log val
    4.         ,gv$database vdb
    5. WHERE val.resetlogs_change# = vdb.resetlogs_change#
    6.         AND val.applied IN (
    7.                 'YES'
    8.                 ,'IN-MEMORY'
    9.                 )
    10. GROUP BY thread#
    11. ORDER BY 1;
    复制代码
    6.确认mrp状态
    1. select process,status,thread#,sequence# from v$managed_standby where process like 'MRP%';
    复制代码
    启停mrp命令参考
    1. ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

    2. ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
    复制代码
    7.检查数据文件状态
    1. SELECT NAME FROM V$DATAFILE WHERE STATUS='OFFLINE';
    复制代码
    如果有offline的需要online
    1. ALTER DATABASE DATAFILE 'datafile-name' ONLINE;
    复制代码
    8.检查临时数据文件
    1. select tf.name filename, bytes, ts.name tablespace from v$tempfile tf, v$tablespace ts where tf.ts#=ts.ts#;
    复制代码
    如果有必要,增加临时数据文件
    9.检查redo和standby redo
    1. set lines 150
    2. col member for a50
    3. select a.thread#,a.group#,a.bytes,a.blocksize,b.type,a.status,b.member from v$log a,v$logfile b where a.group#=b.group#;
    复制代码
    1. set lines 150
    2. col member for a50
    3. select a.thread#,a.group#,a.bytes,a.blocksize,b.type,a.status,b.member from v$standby_log a,v$logfile b where a.group#=b.group#;
    复制代码

    主库redo的状态为INACTIVE,ACTIVE,CURRENT,备库redo的状态为UNUSED, CLEARING or CLEARING_CURRENT,standby redo的状态为 UNASSIGNED或者ACTIVE
    如果输出有不同的结果,则需要手动清空ORL,如果需要在待机状态下清除ORL或SRL,则必须停止托管恢复进程。在切换期间,如果之前没有清除orl,则orl将被清除,但切换将需要花费大量时间来完成。切换会话将等待15个min完成,否则将发生超时。如果切换因超时而终止,则重试,直到切换成功。
    清空命令为
    1. ALTER DATABASE CLEAR LOGFILE GROUP <ORL GROUP# >;
    复制代码
    如果数据库配置为使用OMF文件进行重做日志文件或设置log_file_name_转换,则在线重做日志文件将自动清除与管理恢复过程启动。
    10.verify switchover
    主库执行,如果有报错,则要检查alert日志排查报错信息,如果返回’database altered'则表示可以切换
    1. ALTER DATABASE SWITCHOVER TO <standby db_name> VERIFY;
    复制代码
    11.switchover
    最好把主库job关闭,job_queue_processes设置为0可以关闭job,scheduler
    1. alter system set job_queue_processes=0 sid='*';
    复制代码
    如果dg监听和业务监听是分开的,最好停止业务监听,同时杀掉local=no的进程
    1. ps -ef|grep LOCAL=NO|grep -v grep|awk '{print $2}'|xargs -i kill -9 {}
    复制代码
    主库执行
    1. ALTER DATABASE SWITCHOVER TO <standby db_name>;
    复制代码
    新主库执行
    1. ALTER DATABASE OPEN;
    复制代码
    新备库执行
    1. startup;
    2. ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
    复制代码
    12.再次检查切换后主备之间的同步状态



    回复

    使用道具 举报

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

    本版积分规则

    运维联盟俱乐部 ( 冀ICP备19036648号 )

    GMT+8, 2024-5-17 15:41 , Processed in 0.048826 second(s), 21 queries , Gzip On.

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

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