找回密码
立即注册
搜索
发回帖 发新帖

5296

积分

0

好友

678

主题
发表于 10 分钟前 | 查看: 2| 回复: 0

前言

上个月看到 AI 生成的各种一百条常用命令比较火,我也尝试了一把,结果掉坑里了,写了 《OGG 19c 经典架构集成模式 DBA 常用 100 条运维命令》,AI 生成的各种错误,看着挺好但命令无法执行,视图不存在,字段不存在等问题,于是又得手动一条一条验证,在测试环境跑通后再总结归纳,花了不少时间。后来有朋友说再来一些 ADG 相关的常用命令,我想 ADG 也就那些常用 SQL 和视图,加一起也就十来个,但有朋友提了我也就硬着头皮干了。借着 AI 的能力,生搬硬套搞了 100 条常用命令,实际上也就最后的【ADG 高频常用快速排查 SQL】是我经常使用的,想节省时间的朋友可直接看最后。

适用版本:Oracle Database 19c(12.2 及以上通用)

生产执行约定:

  • 【主库】= 仅在主库执行;【备库】= 仅在备库执行;【两库】= 主备均可执行。
  • 【只读】= 纯查询,任何时候均可安全执行;【管理】= DDL/管理类命令,必须在变更窗口内、评估影响后执行,禁止随手执行。
  • 所有命令均使用 19c 合法语法,可直接粘贴执行;涉及 FETCH FIRST n ROWS ONLY 的写法要求 12c 及以上。
  • 标注【⚠️ 高风险】的命令可能导致角色转换、数据保护模式变更或数据丢失风险,执行前务必逐条核对主备库状态。

一、环境与版本信息(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 健康。

附:使用建议

  1. 查询类命令(标注【只读】)可在生产随时执行,不会产生锁与负载风险(大表统计类查询避开业务高峰)。
  2. 管理类命令(标注【管理】)务必在变更窗口内执行,并在执行前完成 71~75、33、25 等检查。
  3. DG 切换首选 DGMGRL:DGMGRL> switchover to stbydb;,SQL 手工切换仅用于 Broker 不可用时的应急场景。
  4. 归档清理只允许 RMAN:RMAN> delete archivelog all completed before 'sysdate-7';,禁止直接删文件。
  5. 本清单所有 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 200 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 取代,不过 19c 还能使用。
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 conftype,database_role,open_mode from v$database;

--4.查询备库的日志应用模式
SELECT RECOVERY_MODE FROM V$ARCHIVE_DEST_STATUS WHERE DEST_ID=1;

--5.开启日志应用进程:
--应用standby 实时同步
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;

更多关于 Oracle 高可用架构中 Data Guard 配置与传输链路 的系统性实战操作,以及 查看数据库角色与打开模式 的进阶解读,可参考云栈社区相关课程。SQL 手工排查虽然灵活,但生产环境中的 Data Guard 切换与保护模式管理,仍建议优先通过 DGMGRL 统一操作,避免因手工步骤遗漏导致角色转换异常。




上一篇:MCP开发全解析:核心概念、安全模型与本地远程部署
您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-11-11 16:46 , Processed in 0.171292 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

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