大家好,我是 JiekeXu,江湖人称“强哥”,青学会MOP技术社区主席,荣获Oracle ACE Pro称号,OpenTenBase ACE,金仓社区最具价值倡导者KVA,崖山最具价值专家YVP,IvorySQL开源社区专家顾问委员会成员,KWDB社区MVP,墨天轮MVP,墨天轮连续多年度“墨力之星”,拥有Oracle OCP/OCM认证,MySQL 5.7/8.0 OCP认证以及金仓KCA、KCP、KCM、KCSM证书,TiDB PCTA/PCTP证书、PCA、OBCA、OGCA等众多国产数据库认证证书,专注于数据库技术、系统架构及大数据运维,致力于分享最纯粹、最接地气的 DBA 实战与前沿技术洞察。如果你也对数据技术充满热忱,欢迎关注我的微信公众号“JiekeXu DBA之路”点赞、转发与评论,谢谢!

适用版本:Oracle Database 19c(12.2 及以上通用)
生产执行约定:
- 【主库】= 仅在主库执行;【备库】= 仅在备库执行;【两库】= 主备均可执行。
- 【只读】= 纯查询,任何时候均可安全执行;【管理】= DDL/管理类命令,必须在变更窗口内、评估影响后执行,禁止随手执行。
- 所有命令均使用 19c 合法语法,可直接粘贴执行;涉及
FETCH FIRST n ROWS ONLY的写法要求 12c 及以上。- 标注【⚠️ 高风险】的命令可能导致角色转换、数据保护模式变更或数据丢失风险,执行前务必逐条核对主备库状态。
前 言
上个月看到 AI 生成的各种一百条常用命令比较火,我也就尝试了一把,结果就掉坑了,写了《OGG 19c 经典架构集成模式 DBA 常用 100 条运维命令》,AI 生成的各种错误,看着挺好但命令无法执行,视图不存在,字段不存在等问题,于是又得手动一条一条验证,在测试环境跑通后在总结归纳,话了不少时间,然后有朋友就说再来一些 ADG 相关的常用命令,我想 ADG 也就那些常用 SQL 和视图,加一起也就十来个,但有朋友提了我也就硬着头皮干了,借着 AI 的能力,生搬硬套的搞了 100 条常用命令,实际上也就最后的【ADG 高频常用快速排查 SQL】是我经常使用的,节省时间的朋友可直接看最后即可。
一、环境与版本信息(1~8)
1. 查看数据库版本【两库】【只读】
SELECT banner FROM v$version;
2. 查看数据库组件版本【两库】【只读】
SELECT product, version, status FROM product_component_version;
3. 查看数据库角色与打开模式【两库】【只读】
SELECT name, db_unique_name, database_role, open_mode FROM v$database;
备库为 ADG 时
open_mode应为READ ONLY WITH APPLY。
4. 查看保护模式与保护级别【两库】【只读】
SELECT protection_mode, protection_level FROM v$database;
5. 查看 DBID / 数据库名 / 创建时间【两库】【只读】
SELECT dbid, name, created FROM v$database;
6. 查看平台与字节序【两库】【只读】
SELECT platform_name, platform_id FROM v$database;
主备跨平台(如 Linux↔AIX)时重点核对字节序是否一致。
7. 查看实例与主机信息【两库】【只读】
SELECT instance_name, host_name, version, status, logins FROM v$instance;
8. 查看 CDB / PDB 打开情况【两库】【只读】(仅 CDB 架构下在根容器执行)
SELECT con_id, name, open_mode FROM v$containers ORDER BY con_id;
二、Data Guard 配置与传输链路(9~20)
9. 查看 DG Broker 配置项【两库】【只读】(启用 Broker 时)
SELECT database, CONNECT_IDENTIFIER, DATAGUARD_ROLE,status,ENABLED FROM v$dg_broker_config;
10. 查看 Data Guard 成员清单【两库】【只读】
SELECT db_unique_name,PARENT_DBUN,DEST_ROLE,CURRENT_SCN FROM v$dataguard_config ORDER BY db_unique_name;
11. 查看所有归档目的地【两库】【只读】
SELECT dest_id, destination, status, error
FROM v$archive_dest
WHERE dest_id <= 31 AND status <> 'INACTIVE'
ORDER BY dest_id;
12. 查看归档目的地状态明细【两库】【只读】
SELECT dest_id, status, type, database_mode, recovery_mode
FROM v$archive_dest_status
WHERE dest_id <= 31
ORDER BY dest_id;
recovery_mode为MANAGED REAL TIME APPLY表示实时应用(ADG 正常形态)。
13. 查看 DG 消息日志【两库】【只读】
SELECT severity, message, timestamp
FROM v$dataguard_status
ORDER BY timestamp DESC
FETCH FIRST 30 ROWS ONLY;
14. 查看最近 DG 错误【两库】【只读】
SELECT severity, message, timestamp
FROM v$dataguard_status
WHERE severity IN ('Error', 'Fatal')
ORDER BY timestamp DESC
FETCH FIRST 20 ROWS ONLY;
15. 查看日志传输模式(SYNC/ASYNC)【两库】【只读】
SELECT dest_id, destination, transmit_mode, affirm, net_timeout
FROM v$archive_dest
WHERE dest_id <= 31 AND status <> 'INACTIVE'
ORDER BY dest_id;
最大保护/最大可用一般用
SYNC,最大性能用ASYNC。
16. 查看归档延迟设置(DELAY)【两库】【只读】
SELECT dest_id, destination, delay_mins
FROM v$archive_dest
WHERE dest_id <= 31 AND delay_mins > 0;
17. 查看归档目的地错误详情【两库】【只读】
SELECT dest_id, destination, status, error, fail_date
FROM v$archive_dest
WHERE error IS NOT NULL;
18. 查看 log_archive_dest_n 参数【两库】【只读】
set line 999
col name for a25
col value for a88
SELECT name, value
FROM v$parameter
WHERE name LIKE 'log_archive_dest%'
ORDER BY name;
19. 查看 log_archive_config 参数【两库】【只读】
SELECT value FROM v$parameter WHERE name = 'log_archive_config';
示例期望值:
DG_CONFIG=(PRIMDB,STBYDB)
20. 查看归档进程数【两库】【只读】
SELECT value FROM v$parameter WHERE name = 'log_archive_max_processes';
三、备库日志接收与应用(21~35)
21. 查看备库后台进程总览【备库】【只读】
SELECT process, status, client_process, thread#, sequence#
FROM v$managed_standby
ORDER BY process;
22. 查看 MRP 日志应用进程状态【备库】【只读】
SELECT process, status, thread#, sequence#, delay_mins
FROM v$managed_standby
WHERE process LIKE 'MRP%';
status为APPLYING_LOG表示正在应用,WAIT_FOR_LOG表示等待新日志(属正常)。
23. 查看是否实时应用【备库】【只读】
SELECT dest_id, recovery_mode
FROM v$archive_dest_status
WHERE type = 'STANDBY' AND dest_id <= 31;
24. 查看介质恢复进度【备库】【只读】
SELECT item, sofar, total, units
FROM v$recovery_progress
WHERE type = 'Media Recovery';
25. 查看传输延迟与应用延迟【两库】【只读】
SELECT name, value, unit
FROM v$dataguard_stats
WHERE name IN ('transport lag', 'apply lag');
生产巡检核心指标,单位
+hh:mm:ss。
26. 查看应用完成时间预估【备库】【只读】
SELECT name, value, unit
FROM v$dataguard_stats
WHERE name IN ('apply finish time', 'estimated startup time');
27. 查看最后收到的日志【备库】【只读】
SELECT value FROM v$dataguard_stats WHERE name = 'latest received log';
28. 查看最后应用的日志【备库】【只读】
SELECT value FROM v$dataguard_stats WHERE name = 'latest applied log';
29. 查看备库最近归档应用明细【备库】【只读】
SELECT thread#, sequence#, applied, completion_time
FROM v$archived_log
ORDER BY completion_time DESC
FETCH FIRST 15 ROWS ONLY;
30. 查看备用日志文件(Standby Redo Log)【备库】【只读】
SELECT group#, thread#, sequence#, bytes, used, status
FROM v$standby_log
ORDER BY group#;
status为ACTIVE且used接近满时表示正在接收当前日志,属正常。
31. 备库已应用的最大日志序列号【备库】【只读】
SELECT thread#, MAX(sequence#) last_applied
FROM v$archived_log
WHERE applied = 'YES'
GROUP BY thread#
ORDER BY thread#;
32. 主库已生成的最大日志序列号【主库】【只读】
SELECT thread#, MAX(sequence#) last_generated
FROM v$log_history
GROUP BY thread#
ORDER BY thread#;
33. 查看日志缺口(GAP)【备库】【只读】
SELECT * FROM v$archive_gap;
无返回行表示无缺口;有行时需尽快补传归档。
34. 手动注册缺失归档日志【备库】【管理】【⚠️ 高风险】
ALTER DATABASE REGISTER LOGFILE '/data/arch/STBYDB/1_1234_1234567890.arc';
仅在
v$archive_gap有返回且 FAL 自动补传失败时使用,路径须为备库实际可见路径。
35. 查看日志应用速率【备库】【只读】
SELECT item, sofar, units
FROM v$recovery_progress
WHERE item LIKE '%Apply Rate%';
四、同步状态与缺口监控(36~50)
36. 完整查看 DG 统计信息【两库】【只读】
set linesize 150;
set pagesize 20;
column name format a24;
column value format a20;
column unit format a30;
column TIME_COMPUTED format a30;
select name,value,unit,time_computed from v$dataguard_stats;
37. 查看 RFS 接收进程【备库】【只读】
SELECT process, status, thread#, sequence#, client_process
FROM v$managed_standby
WHERE process = 'RFS';
38. 查看归档(ARC)进程【两库】【只读】
SELECT process, status, thread#, sequence#
FROM v$managed_standby
WHERE process LIKE 'ARC%';
39. 查看 RFS 接收进度(块级)【备库】【只读】
SELECT process, thread#, sequence#, block#, blocks
FROM v$managed_standby
WHERE process = 'RFS';
40. 主库 redo 生成统计【主库】【只读】
SELECT name, value FROM v$sysstat WHERE name IN ('redo size', 'redo entries');
41. 备库 redo 应用统计【备库】【只读】
SELECT name, value FROM v$sysstat WHERE name IN ('redo size', 'redo entries');
42. 主备日志序列号对比【两库】【只读】
-- 主库执行:
SELECT thread#, MAX(sequence#) last_generated FROM v$log_history GROUP BY thread# ORDER BY thread#;
-- 备库执行:
SELECT thread#, MAX(sequence#) last_applied
FROM v$archived_log
WHERE applied = 'YES'
GROUP BY thread#
ORDER BY thread#;
两值差距持续增大即表示存在同步问题,需结合
v$archive_gap与告警日志定位。
43. 按天统计备库归档应用量【备库】【只读】
SELECT TO_CHAR(completion_time, 'YYYY-MM-DD') day, thread#, COUNT(*) logs
FROM v$archived_log
WHERE applied = 'YES'
GROUP BY TO_CHAR(completion_time, 'YYYY-MM-DD'), thread#
ORDER BY day DESC
FETCH FIRST 10 ROWS ONLY;
44. 按小时统计归档生成量(容量规划)【主库】【只读】
SELECT TO_CHAR(first_time, 'YYYY-MM-DD HH24') hour,
COUNT(*) cnt,
ROUND(SUM(blocks * block_size) / 1024 / 1024, 1) mb
FROM v$archived_log where DEST_ID=1
GROUP BY TO_CHAR(first_time, 'YYYY-MM-DD HH24')
ORDER BY hour DESC
FETCH FIRST 24 ROWS ONLY;
--按天统计主库归档量
SELECT TO_CHAR(first_time, 'YYYY-MM-DD') day,
COUNT(*) cnt,
ROUND(SUM(blocks * block_size) / 1024 / 1024, 1) mb
FROM v$archived_log where DEST_ID=1
GROUP BY TO_CHAR(first_time, 'YYYY-MM-DD')
ORDER BY day DESC
FETCH FIRST 15 ROWS ONLY;
45. 查看 alert 日志中近 1 天 ORA- 错误【两库】【只读】
SELECT originating_timestamp, message_text
FROM v$diag_alert_ext
WHERE message_text LIKE '%ORA-%'
AND originating_timestamp > SYSDATE - 1
ORDER BY originating_timestamp DESC
FETCH FIRST 30 ROWS ONLY;
46. 查看近 1 天 DG 相关告警(ORA-16xx / ORA-31xx / ORA-125xx)【两库】【只读】
SELECT originating_timestamp, message_text
FROM v$diag_alert_ext
WHERE (message_text LIKE '%ORA-16%' OR message_text LIKE '%ORA-31%' OR message_text LIKE '%ORA-125%')
AND originating_timestamp > SYSDATE - 1
ORDER BY originating_timestamp DESC
FETCH FIRST 20 ROWS ONLY;
47. 查看每个线程最后归档时间【两库】【只读】
SELECT thread#, MAX(first_time) last_arch FROM v$archived_log GROUP BY thread#;
48. 查看归档目的地有效性【两库】【只读】
col DESTINATION for a35
SELECT dest_id, destination, valid_now, valid_type, valid_role
FROM v$archive_dest
WHERE dest_id <= 31 AND status <> 'INACTIVE'
ORDER BY dest_id;
49. 查看 RAC 各实例状态【两库】【只读】
SELECT inst_id, instance_name, status, database_status FROM gv$instance ORDER BY inst_id;
50. 归档日志按线程汇总【两库】【只读】
SELECT thread#, COUNT(*) cnt, MIN(sequence#) min_seq, MAX(sequence#) max_seq
FROM v$archived_log
GROUP BY thread#
ORDER BY thread#;
五、ADG 只读查询与快照备库(51~60)
51. 确认 ADG 处于只读打开 + 实时应用状态【备库】【只读】
SELECT name, open_mode, database_role FROM v$database;
期望输出:
open_mode = READ ONLY WITH APPLY,database_role = PHYSICAL STANDBY。
52. 查看当前 SCN【两库】【只读】
SELECT to_char(current_scn) FROM v$database;
53. 查看数据库当前时间【两库】【只读】
SELECT SYSDATE FROM dual;
54. 查看 ADG 上用户会话【备库】【只读】
SELECT sid, serial#, username, program, status
FROM v$session
WHERE type = 'USER'
ORDER BY sid;
55. 查看备库恢复相关后台会话【备库】【只读】
SELECT sid, serial#, program, event, wait_class
FROM v$session
WHERE program LIKE '%MRP%' OR program LIKE '%RFS%' OR program LIKE '%ARC%';
56. 查看 undo 使用情况(ADG 报表查询撑满 undo 时排查)【备库】【只读】
SELECT begin_time, end_time, undotsn, maxquerylen
FROM v$undostat
WHERE end_time > SYSDATE - 1
ORDER BY begin_time;
57. 查看临时表空间使用【备库】【只读】
SELECT tablespace_name, ROUND(SUM(bytes) / 1024 / 1024, 1) mb
FROM dba_temp_files
GROUP BY tablespace_name;
58. 查看快照备库状态【备库】【只读】
SELECT open_mode, database_role FROM v$database;
快照备库形态下:
open_mode = READ WRITE,database_role = SNAPSHOT STANDBY(业务测试用,勿当生产主库)。
59. 快照备库转回物理备库【备库】【管理】【⚠️ 高风险】
ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
转换前必须结束快照备库上的所有读写会话,转换后重启实例并重新启动日志应用。
60. ADG 用户会话 Top 等待事件【备库】【只读】
SELECT event, COUNT(*) cnt, ROUND(SUM(seconds_in_wait)) secs
FROM v$session
WHERE type = 'USER' AND wait_class <> 'Idle'
GROUP BY event
ORDER BY secs DESC
FETCH FIRST 10 ROWS ONLY;
六、归档日志管理(61~70)
61. 查看最近归档日志文件【两库】【只读】
SELECT name, thread#, sequence#, blocks, block_size, completion_time
FROM v$archived_log
ORDER BY completion_time DESC
FETCH FIRST 20 ROWS ONLY;
62. 统计已应用归档总占用空间【备库】【只读】
SELECT ROUND(SUM(blocks * block_size) / 1024 / 1024 / 1024, 2) gb
FROM v$archived_log
WHERE applied = 'YES';
63. 按目的地统计归档数量与大小【两库】【只读】
SELECT dest_id, COUNT(*) cnt, ROUND(SUM(blocks * block_size) / 1024 / 1024, 1) mb
FROM v$archived_log
GROUP BY dest_id;
64. 查看未应用的归档【备库】【只读】
SELECT thread#, sequence#, name
FROM v$archived_log
WHERE applied = 'NO'
ORDER BY thread#, sequence#;
65. 查看快速恢复区(FRA)参数【两库】【只读】
SELECT name, value
FROM v$parameter
WHERE name IN ('db_recovery_file_dest', 'db_recovery_file_dest_size');
66. 查看 FRA 使用率【两库】【只读】
SELECT name,
ROUND(space_limit / 1024 / 1024 / 1024, 2) limit_gb,
ROUND(space_used / 1024 / 1024 / 1024, 2) used_gb,
ROUND(space_reclaimable / 1024 / 1024 / 1024, 2) reclaim_gb
FROM v$recovery_file_dest;
67. 查看归档模式【两库】【只读】
SELECT log_mode FROM v$database;
ADG 要求
log_mode = ARCHIVELOG。
68. 主库手动切换日志【主库】【管理】
ALTER SYSTEM SWITCH LOGFILE;
常用于手工触发归档以观察传输链路是否正常。
69. 主库归档当前联机日志【主库】【管理】
ALTER SYSTEM ARCHIVE LOG CURRENT;
70. 查看未删除归档的时间跨度【两库】【只读】
SELECT MIN(completion_time) oldest, MAX(completion_time) newest, COUNT(*) cnt
FROM v$archived_log
WHERE deleted = 'NO';
配合 RMAN 删除策略评估归档保留量;归档清理务必走 RMAN,禁止手工删文件。
七、角色转换与保护模式(71~85)
71. 查看当前切换状态【两库】【只读】
SELECT database_role, switchover_status FROM v$database;
主库期望
TO STANDBY/SESSIONS ACTIVE;备库期望TO PRIMARY/NOT ALLOWED。
72. 查看数据库综合状态【两库】【只读】
SELECT database_role, open_mode, protection_mode, switchover_status FROM v$database;
73. 检查主库是否具备切换条件【主库】【只读】
SELECT switchover_status
FROM v$database
WHERE switchover_status IN ('TO STANDBY', 'SESSIONS ACTIVE', 'NOT ALLOWED');
74. 切换前确认备库无日志缺口【备库】【只读】
SELECT * FROM v$archive_gap;
无返回行才允许继续执行 switchover。
75. 切换前确认 MRP 应用进程状态【备库】【只读】
SELECT process, status FROM v$managed_standby WHERE process LIKE 'MRP%';
76. 主库执行 switchover(切为备库)【主库】【管理】【⚠️ 高风险】
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
执行前必须满足 71~75 检查项;执行后主库将关闭,需
STARTUP MOUNT。
77. 备库执行 switchover(切为主库)【备库】【管理】【⚠️ 高风险】
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
执行后原备库打开为读写主库:
ALTER DATABASE OPEN;。
78. 备库启动实时日志应用【备库】【管理】
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
19c 推荐实时应用写法;若实例为 mount 状态,随后执行
ALTER DATABASE OPEN;开启 ADG 只读。
79. 备库停止日志应用【备库】【管理】
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
80. 备库打开为只读(ADG)【备库】【管理】
ALTER DATABASE OPEN;
在 mount 状态执行,打开后即为
READ ONLY WITH APPLY(配合实时应用)。
81. 设置保护模式为最大可用性【主库】【管理】【⚠️ 高风险】
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE AVAILABILITY;
需要主备库 redo 链路正常(SYNC 传输)且所有备库可达,否则可能报错或引发保护级别降级,建议通过 DGMGRL 统一管理。
82. 查看 Broker 中配置的保护模式【两库】【只读】
select DATABASE,DATAGUARD_ROLE,ENABLED,STATUS,VERSION from v$dg_broker_config;
83. 查看闪回数据库状态【两库】【只读】
SELECT flashback_on FROM v$database;
84. 主备 SCN 对比【两库】【只读】
-- 主库执行:
SELECT to_char(current_scn) FROM v$database;
-- 备库执行:
SELECT to_char(current_scn) FROM v$database;
备库 SCN 落后于主库属正常,重点应看
apply lag;若差距持续放大则异常。
85. 查看切换 / 故障切换历史【两库】【只读】
SELECT originating_timestamp, message_text
FROM v$diag_alert_ext
WHERE message_text LIKE '%Switchover%' OR message_text LIKE '%Failover%'
ORDER BY originating_timestamp DESC
FETCH FIRST 10 ROWS ONLY;
八、性能监控(86~95)
86. 备库 Top 等待事件【备库】【只读】
SELECT event, wait_class, total_waits, ROUND(time_waited_micro / 1000000, 1) secs
FROM v$system_event
WHERE wait_class <> 'Idle'
ORDER BY time_waited_micro DESC
FETCH FIRST 10 ROWS ONLY;
87. 查看恢复并行相关参数【两库】【只读】
SELECT name, value
FROM v$parameter
WHERE name IN ('recovery_parallelism', 'parallel_execution_enabled');
88. 查看 MRP 进程数量【备库】【只读】
SELECT process, COUNT(*)
FROM v$managed_standby
WHERE process LIKE 'MRP%'
GROUP BY process;
89. 查看 RFS 接收会话等待【备库】【只读】
SELECT sid, serial#, program, event, seconds_in_wait
FROM v$session
WHERE program LIKE '%RFS%';
90. 查看日志传输网络参数【两库】【只读】
SELECT dest_id, destination, transmit_mode, net_timeout, max_connections
FROM v$archive_dest
WHERE dest_id <= 31 AND status <> 'INACTIVE'
ORDER BY dest_id;
91. 查看 SGA 信息【两库】【只读】
SELECT * FROM v$sgainfo;
92. 查看 PGA 使用情况【两库】【只读】
SELECT name, ROUND(value / 1024 / 1024, 1) mb
FROM v$pgastat
WHERE name IN ('maximum PGA allocated', 'total PGA allocated');
93. 查看物理 I/O 统计【两库】【只读】
SELECT name, value
FROM v$sysstat
WHERE name IN ('physical reads', 'physical writes', 'physical read total bytes');
94. 查看主机负载(Linux / Unix)【两库】【只读】
SELECT stat_name, value
FROM v$osstat
WHERE stat_name IN ('LOAD', 'CPU_USED_TICKS')
ORDER BY stat_name;
Windows 平台无
LOAD统计,仅看CPU_USED_TICKS等指标。
95. 查看当前正在传输的日志【备库】【只读】
SELECT process, status, thread#, sequence#, client_process
FROM v$managed_standby
WHERE client_process IN ('LGWR', 'ARCH');
九、参数与日常维护(96~100)
96. 查看 DG 关键参数【两库】【只读】
SELECT name, value
FROM v$parameter
WHERE name IN ('standby_file_management', 'fal_client', 'fal_server',
'db_file_name_convert', 'log_file_name_convert', 'dg_broker_start')
ORDER BY name;
standby_file_management必须为AUTO,否则备库无法自动创建数据文件。
97. 查看归档格式与主归档目的地参数【两库】【只读】
SELECT name, value
FROM v$parameter
WHERE name IN ('log_archive_format', 'log_archive_dest_1');
98. 查看 redo 线程状态【两库】【只读】
SELECT thread#, status, enabled FROM v$thread;
99. 归档日志状态汇总【两库】【只读】
SELECT archived, applied, status, COUNT(*)
FROM v$archived_log
GROUP BY archived, applied, status
ORDER BY archived, applied;
100. ADG 核心巡检组合(一条命令完成健康检查)【两库】【只读】
-- ① 角色/打开模式/保护级别/切换状态
SELECT database_role, open_mode, protection_mode, protection_level,
switchover_status, current_scn
FROM v$database;
-- ② 传输与应用延迟(核心指标)
SELECT name, value, unit
FROM v$dataguard_stats
WHERE name IN ('transport lag', 'apply lag');
-- ③ 日志缺口(无行 = 正常)
SELECT * FROM v$archive_gap;
-- ④ 归档目的地错误(无行 = 正常)
SELECT dest_id, destination, status, error
FROM v$archive_dest
WHERE dest_id <= 31 AND status <> 'INACTIVE' AND error IS NOT NULL;
-- ⑤ 备库应用进程(APPLYING_LOG / WAIT_FOR_LOG 为正常)
SELECT process, status
FROM v$managed_standby
WHERE process LIKE 'MRP%';
巡检结论:① 角色与保护级别符合预期、② 延迟无持续增长、③④ 无输出、⑤ 状态正常,即认为 ADG 健康。
附:使用建议
- 查询类命令(标注【只读】)可在生产随时执行,不会产生锁与负载风险(大表统计类查询避开业务高峰)。
- 管理类命令(标注【管理】)务必在变更窗口内执行,并在执行前完成 71~75、33、25 等检查。
- DG 切换首选 DGMGRL:
DGMGRL> switchover to stbydb;,SQL 手工切换仅用于 Broker 不可用时的应急场景。 - 归档清理只允许 RMAN:
RMAN> delete archivelog all completed before 'sysdate-7';,禁止直接删文件。 - 本清单所有 SQL 均面向 Oracle 19c 验证过语法(12.2+ 通用);不同小版本个别视图列名如有出入,以
DESC输出为准。
附:ADG 高频常用快速排查 SQL
--0.备库常用参数查询
set lines 500 pages 999
col value for a110
col name for a30
select name,value
from v$parameter
where name in('db_name','db_unique_name',
'log_archive_config',
'log_archive_dest_1',
'log_archive_dest_2',
'log_archive_dest_3',
'log_archive_max_processes',
'fal_server',
'fal_client',
'db_file_name_convert',
'log_file_name_convert',
'standby_file_management');
select DB_UNIQUE_NAME,PARENT_DBUN,DEST_ROLE,CURRENT_SCN from V$DATAGUARD_CONFIG;
--1.查询主备的同步情况,备库执行
set linesize 150;
set pagesize 20;
column name format a13;
column value format a20;
column unit format a30;
column TIME_COMPUTED format a30;
select name,value,unit,time_computed from v$dataguard_stats where name in ('transport lag','apply lag');
--从归档日志应用情况来检查主备同步情况,主库上查询
set linesize 20o pagesize 999
col standby_tns_name format a30
select inst_id,max(sequence#),max(name) standby_tns_name
from gv$archived_log
where standby_dest='YES' and applied='YES' group by inst_id order by 1;
select inst_id,max(sequence#) from gv$archived_log where standby_dest='NO' group by inst_id order by 1;
--2.查询备库的进程状态
SELECT PROCESS, STATUS,SEQUENCE#,thread# FROM V$MANAGED_STANDBY;
SELECT PROCESS, STATUS,SEQUENCE#,thread#,blocks,block# FROM V$MANAGED_STANDBY;
SELECT PROCESS, STATUS,SEQUENCE#,thread#,blocks,block# FROM V$MANAGED_STANDBY where PROCESS='MRP0';
--在 12c 及更高版本中,V$MANAGED_STANDBY 视图已被 V$DATAGUARD_PROCESS 取代,不过还能使用。
SELECT ROLE, THREAD#, SEQUENCE#, ACTION FROM V$DATAGUARD_PROCESS;
--3.查询备库的角色
set linesize 160;
column DBNAME format a8;
column DBUNAME format a10;
column cftype format a8;
column OPEN_MODE format a25;
column DATABASE_ROLE format a18;
select name dbname,db_unique_name dbuname,controlfile_type cftype,database_role,open_mode from v$database;
--4.查询备库的日志应用模式
SELECT RECOVERY_MODE FROM V$ARCHIVE_DEST_STATUS WHERE DEST_ID=1;
--5.开启日志应用进程:
--应用stanby 实时同步
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE parallel 64 USING CURRENT LOGFILE DISCONNECT; --使用并行
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT; --19c 新语法
alter database recover managed standby database using current logfile disconnect from session; --11g 语法
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
--6.取消日志应用
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
--7.主库查看有如下错误:
SQL> select dest_id,error from v$archive_dest where DEST_ID<4;
SQL>
DEST_ID ERROR
---------- -----------------------------------------------------------------
1
2 ORA-12154: TNS:could not resolve the connect identifier specified
3
--8.查看 alert 日志中近 1 天 ORA- 错误
SELECT originating_timestamp, message_text
FROM v$diag_alert_ext
WHERE message_text LIKE '%ORA-%'
AND originating_timestamp > SYSDATE - 1
ORDER BY originating_timestamp DESC
FETCH FIRST 30 ROWS ONLY;
--用如下SQL查看备库无报错
select error from v$archive_dest where target='STANDBY';
--9. 查看主备库事件日志
col MESSAGE for a120
SELECT MESSAGE_NUM, MESSAGE FROM V$DATAGUARD_STATUS ORDER BY TIMESTAMP;
--10.其他备库查询 SQL
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
select THREAD#,count(FIRST_TIME) from v$archived_log where APPLIED='NO' group by THREAD#;
select THREAD#,min(FIRST_TIME) from v$archived_log where APPLIED='NO' group by THREAD#;
select THREAD#,min(SEQUENCE#) from v$archived_log where APPLIED='NO' group by THREAD#;
select BACKUP_COUNT from v$archived_log where THREAD#=&1 and SEQUENCE#=&2;
全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~
欢迎关注我的公众号【JiekeXu DBA之路】,一起学习新知识!
——————————————————————————
公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
ITPUB:https://blog.itpub.net/69968215
腾讯云:https://cloud.tencent.com/developer/user/5645107
——————————————————————————





