Oracle RAC 日常运维与故障排查 100 条命令(建议收藏)

举报
Lucifer三思而后行 发表于 2026/09/16 20:36:50 2026/09/16
【摘要】 “100 条命令”系列已经写了 38 篇,接下来继续写 RAC、Data Guard、GoldenGate 这些专题。想接着看,可以收藏 ORA100 · DBA100,微信里搜索小程序 「三笠的百令册」。网站地址: Oracle RAC 日常运维与故障排查 100 条命令(建议收藏) 前言“100 条命令”系列已经写了 38 篇,接下来继续写 RAC、Data Guard、GoldenGa...

“100 条命令”系列已经写了 38 篇,接下来继续写 RAC、Data Guard、GoldenGate 这些专题。想接着看,可以收藏 ORA100 · DBA100,微信里搜索小程序 「三笠的百令册」

网站地址:

Oracle RAC 日常运维与故障排查 100 条命令(建议收藏)

前言

“100 条命令”系列已经写了 38 篇,接下来继续写 RAC、Data Guard、GoldenGate 这些专题。想接着看,可以收藏 ORA100 · DBA100,微信里搜索小程序 「三笠的百令册」

网站地址:

RAC 日常巡检除了看数据库,还要检查集群资源、节点网络、ASM 和业务服务。排查阻塞、连接分布或 gc 等待时,也需要把不同实例的信息放在一起看。

下面整理 100 条 Oracle RAC 日常运维与故障排查常用命令,主要包括:

  • 集群与节点状态
  • OCR、Voting Disk 和 ASM
  • 实例参数、SCAN、VIP 与监听
  • 业务服务和连接分布
  • 跨实例会话、锁与 SQL
  • Cache Fusion 与全局等待
  • redo、归档和诊断日志
  • 启停、服务迁移与维护检查

适用于 Linux + Oracle Database 19c + Grid Infrastructure 19c,示例采用 administrator-managed RAC。

文中的路径、实例名和服务名,用时换成自己的。执行前看一下注释,确认当前用户和环境变量。

一、集群与节点状态(1-10)

1. 查看集群节点、编号和状态

# grid;当前集群
# -s 查看节点是否活动;-t 查看是否 pinned
$GRID_HOME/bin/olsnodes -n -s -t

2. 查看当前节点名称

# grid;当前节点
$GRID_HOME/bin/olsnodes -l

3. 查看集群名称

# grid;当前集群
$GRID_HOME/bin/olsnodes -c

4. 检查当前节点的 Clusterware 组件

# grid;当前节点
$GRID_HOME/bin/crsctl check crs

5. 检查所有节点的集群服务

# grid;当前集群
$GRID_HOME/bin/crsctl check cluster -all

6. 查看集群活动版本和补丁级别

# grid;当前集群
# 滚动升级、补丁操作期间,活动版本可能尚未推进
$GRID_HOME/bin/crsctl query crs activeversion -f

7. 查看指定节点已成功启动的 GI 版本

# grid;指定节点
$GRID_HOME/bin/crsctl query crs softwareversion "$NODE_NAME"

8. 查看指定节点的 GI 补丁级别

# grid;指定节点
$GRID_HOME/bin/crsctl query crs softwarepatch "$NODE_NAME"

9. 查看本节点 GI 二进制版本

# grid;当前节点
$GRID_HOME/bin/crsctl query crs releaseversion

10. 查看本节点 Clusterware 自启动设置

# grid;当前节点
$GRID_HOME/bin/crsctl config crs

二、集群资源与依赖关系(11-20)

11. 查看集群资源状态表

# grid;当前集群
$GRID_HOME/bin/crsctl status resource -t

12. 查看指定资源的配置属性

# grid;指定资源
$GRID_HOME/bin/crsctl status resource "$RESOURCE_NAME" -p

13. 查看指定资源的运行属性

# grid;指定资源
$GRID_HOME/bin/crsctl status resource "$RESOURCE_NAME" -v

14. 查看指定资源的启动依赖

# grid;指定资源
$GRID_HOME/bin/crsctl status resource "$RESOURCE_NAME" -dependency

15. 查看指定节点的容量和详细状态

# grid;指定节点
$GRID_HOME/bin/crsctl status server "$NODE_NAME" -f

16. 查看服务器池及节点归属

# grid;当前集群
$GRID_HOME/bin/crsctl status serverpool

17. 列出 Clusterware 注册的数据库

# oracle;当前集群
$DB_HOME/bin/srvctl config database

18. 查看 RAC 数据库配置

# oracle;指定数据库
$DB_HOME/bin/srvctl config database -db "$DB_UNIQUE_NAME"

19. 查看数据库实例及 ASM 连接状态

# oracle;指定数据库的所有实例
$DB_HOME/bin/srvctl status database -db "$DB_UNIQUE_NAME" -detail

20. 查看集群 ASM 实例状态

# grid;当前集群
$GRID_HOME/bin/srvctl status asm -detail

三、OCR、Voting Disk 与 ASM 相关检查(21-30)

21. 检查 OCR 完整性

# root;集群 OCR;离线维护检查
# 按官方要求,在所有节点 CRS 栈离线的维护条件下检查
# 在线更新 OCR 时可能出现误报;root 才执行逻辑一致性检查
$GRID_HOME/bin/ocrcheck

22. 查看 OCR 备份记录

# root;集群 OCR;只列记录,不验证可恢复性
$GRID_HOME/bin/ocrconfig -showbackup

23. 检查本节点 OLR 完整性

# root;当前节点;离线维护检查
# 本节点 CRS、OHAS 栈均离线后执行
$GRID_HOME/bin/ocrcheck -local

24. 查看本节点 OLR 手工备份记录

# root;当前节点 OLR
# -local 只能与 manual 配合;其他节点需分别检查
$GRID_HOME/bin/ocrconfig -local -showbackup manual

25. 查看 Voting Disk 状态和位置

# grid;当前集群
$GRID_HOME/bin/crsctl query css votedisk

26. 查看 ASM 磁盘组空间和挂载状态

# grid;当前连接的 ASM 实例
# ORACLE_HOME 指向 GRID_HOME,ORACLE_SID 指向本节点 ASM 实例
$GRID_HOME/bin/asmcmd lsdg

27. 查看 ASM 磁盘状态和设备路径

# grid;当前连接的 ASM 实例
$GRID_HOME/bin/asmcmd lsdsk -p

28. 查看磁盘组的数据库客户端

# grid;指定磁盘组;查询 GV$ASM_CLIENT
$GRID_HOME/bin/asmcmd lsct -g "$DISKGROUP"

29. 查看磁盘组中已打开的文件

# grid;本地 ASM 客户端打开的文件
$GRID_HOME/bin/asmcmd lsof -G "$DISKGROUP"

30. 查看正在进行的 ASM 操作

# grid;当前 ASM 实例的 rebalance 等操作
$GRID_HOME/bin/asmcmd lsop

四、数据库实例与 RAC 参数(31-40)

31. 查看各实例状态和启动时间

-- 以下 SQL 默认在 CDB$ROOT 执行;非 CDB 直接在本库执行
SELECT inst_id, instance_name, host_name,
       version, status, database_status, startup_time
FROM gv$instance
ORDER BY inst_id;

32. 查看数据库名称、角色和打开模式

SELECT name, db_unique_name, database_role,
       open_mode, log_mode, cdb
FROM v$database;

33. 查看 RAC 启用参数

SELECT inst_id, name, value
FROM gv$parameter
WHERE name IN ('cluster_database', 'cluster_database_instances')
ORDER BY name, inst_id;

34. 查看实例编号、redo 线程和 UNDO 表空间

SELECT inst_id, name, value
FROM gv$parameter
WHERE name IN ('instance_number', 'thread', 'undo_tablespace')
ORDER BY inst_id, name;

35. 查看各实例监听注册参数

SELECT inst_id, name, value
FROM gv$parameter
WHERE name IN ('local_listener', 'remote_listener')
ORDER BY name, inst_id;

36. 对比各实例 SGA、PGA 配置

-- 参数值单位:字节;0 需结合所用内存管理方式判断
SELECT inst_id, name, value
FROM gv$parameter
WHERE name IN ('sga_target', 'sga_max_size',
               'pga_aggregate_target', 'pga_aggregate_limit',
               'memory_target', 'memory_max_target')
ORDER BY name, inst_id;

37. 查看各实例进程数和会话数使用情况

-- MAX_UTILIZATION 为实例启动后的峰值
SELECT inst_id, resource_name,
       current_utilization, max_utilization, limit_value
FROM gv$resource_limit
WHERE resource_name IN ('processes', 'sessions')
ORDER BY resource_name, inst_id;

38. 查看 PDB 在各实例上的打开状态

-- 在 CDB$ROOT 查询;同一 PDB 在不同实例上的状态可能不同
SELECT inst_id, con_id, name, open_mode, restricted, open_time
FROM gv$pdbs
ORDER BY con_id, inst_id;

39. 查看 SPFILE 中按实例指定的参数

-- 这里是持久化配置,当前生效值需与 GV$PARAMETER 对照
SELECT sid, name, value, ordinal
FROM v$spparameter
WHERE isspecified = 'TRUE'
  AND sid <> '*'
ORDER BY name, sid, ordinal;

40. 查看各实例的数据库与服务标识参数

-- SERVICE_NAMES 不等于完整业务服务清单;业务服务见第 51、53 条
SELECT inst_id, name, value
FROM gv$parameter
WHERE name IN ('db_name', 'db_unique_name',
               'instance_name', 'service_names')
ORDER BY name, inst_id;

五、SCAN、VIP、监听与网络(41-50)

41. 查看 SCAN 名称和 VIP 配置

# grid;当前集群
$GRID_HOME/bin/srvctl config scan

42. 查看 SCAN VIP 的运行节点

# grid;当前集群
$GRID_HOME/bin/srvctl status scan

43. 查看 SCAN Listener 配置

# grid;当前集群
$GRID_HOME/bin/srvctl config scan_listener

44. 查看 SCAN Listener 运行状态

# grid;当前集群
$GRID_HOME/bin/srvctl status scan_listener

45. 查看指定节点的 VIP 配置

# grid;指定节点
$GRID_HOME/bin/srvctl config vip -node "$NODE_NAME"

46. 查看指定节点的 VIP 运行状态

# grid;指定节点的 VIP;实际运行位置见输出
$GRID_HOME/bin/srvctl status vip -node "$NODE_NAME"

47. 查看集群公网配置

# grid;当前集群
$GRID_HOME/bin/srvctl config network

48. 查看节点监听器配置

# grid;指定节点监听资源
$GRID_HOME/bin/srvctl config listener -listener "$LISTENER_NAME"

49. 查看指定节点监听器状态

# grid;指定节点、指定监听器
$GRID_HOME/bin/srvctl status listener \
  -listener "$LISTENER_NAME" -node "$NODE_NAME"

50. 查看集群登记的网卡和网络用途

# grid;当前集群
$GRID_HOME/bin/oifcfg getif

六、服务、连接分布与负载均衡(51-60)

51. 查看业务服务的配置和首选实例

# oracle;指定数据库
$DB_HOME/bin/srvctl config service -db "$DB_UNIQUE_NAME"

52. 查看业务服务实际运行位置

# oracle;指定数据库
$DB_HOME/bin/srvctl status service -db "$DB_UNIQUE_NAME" -verbose

53. 查看活动服务及负载均衡目标

SELECT inst_id, con_id, name, network_name,
       goal, clb_goal, blocked
FROM gv$active_services
ORDER BY name, inst_id;

54. 统计各服务在不同实例上的连接数

-- ACTIVE 表示会话活跃,不能据此认定正在占用 CPU
SELECT inst_id, con_id, service_name, status,
       COUNT(*) AS sessions
FROM gv$session
WHERE type = 'USER'
GROUP BY inst_id, con_id, service_name, status
ORDER BY service_name, inst_id, status;

55. 按客户端程序检查连接是否集中

SELECT inst_id, con_id, service_name, machine, program,
       COUNT(*) AS sessions
FROM gv$session
WHERE type = 'USER'
GROUP BY inst_id, con_id, service_name, machine, program
ORDER BY sessions DESC;

56. 查看服务的累计 CPU 消耗

-- 原值单位:微秒;按服务统计的可见范围取决于统计聚合配置
-- 累计值需两次采样取差值,不能当作当前 CPU 使用率
SELECT inst_id, con_id, service_name,
       ROUND(value / 1000000, 2) AS db_cpu_seconds
FROM gv$service_stats
WHERE stat_name = 'DB CPU'
ORDER BY db_cpu_seconds DESC;

57. 查看服务最近一分钟的调用指标

-- DBTIMEPERCALL、CPUPERCALL 原值为微秒;以下换算为毫秒
SELECT inst_id, con_id, service_name, begin_time, end_time,
       ROUND(intsize_csec / 100, 1) AS interval_seconds,
       ROUND(dbtimepercall / 1000, 3) AS db_time_per_call_ms,
       ROUND(cpupercall / 1000, 3) AS cpu_per_call_ms,
       ROUND(callspersec, 2) AS calls_per_sec
FROM gv$servicemetric
WHERE intsize_csec BETWEEN 5000 AND 7000
ORDER BY service_name, inst_id;

58. 预测指定服务故障的影响

# oracle;指定服务
# 只做预测,不触发服务故障,也不验证客户端重连
$DB_HOME/bin/srvctl predict service \
  -db "$DB_UNIQUE_NAME" -service "$SERVICE_NAME" -verbose

59. 查看 Clusterware 为数据库保存的环境变量

# oracle;指定数据库
# 此处显示资源配置中的环境变量,不是当前 shell 的环境
$DB_HOME/bin/srvctl getenv database -db "$DB_UNIQUE_NAME"

60. 查看本地监听器的服务注册和处理器

# grid;当前节点的指定监听器
$GRID_HOME/bin/lsnrctl services "$LISTENER_NAME"

七、RAC 会话、锁与 SQL 排查(61-70)

61. 查看各实例当前活跃会话

-- LAST_CALL_ET 为会话进入 ACTIVE 状态后的秒数,不是当前 SQL 的精确耗时
SELECT inst_id, con_id, sid, serial#, username,
       service_name, sql_id, event, state, last_call_et
FROM gv$session
WHERE type = 'USER'
  AND status = 'ACTIVE'
ORDER BY inst_id, last_call_et DESC;

62. 查看发生阻塞的会话及阻塞实例

-- SID 需要与 INST_ID 一起定位;只使用有效阻塞标识
SELECT inst_id, con_id, sid, serial#, sql_id, event,
       blocking_instance, blocking_session
FROM gv$session
WHERE blocking_session_status = 'VALID'
ORDER BY blocking_instance, blocking_session, inst_id, sid;

63. 关联跨实例的等待会话和阻塞会话

-- 阻塞会话可能已空闲,其 SQL_ID 不一定是持锁语句
SELECT w.inst_id AS wait_inst, w.con_id AS wait_con,
       w.sid AS wait_sid, w.serial# AS wait_serial,
       w.sql_id AS wait_sql_id, w.event,
       b.inst_id AS block_inst, b.con_id AS block_con,
       b.sid AS block_sid, b.serial# AS block_serial,
       b.username, b.status, b.sql_id AS block_sql_id,
       b.prev_sql_id AS block_prev_sql_id
FROM gv$session w
LEFT JOIN gv$session b
  ON b.inst_id = w.blocking_instance
 AND b.sid = w.blocking_session
WHERE w.blocking_session_status = 'VALID'
ORDER BY block_inst, block_sid, wait_inst, wait_sid;

64. 查看各实例未结束事务及 UNDO 使用量

-- USED_UBLK 是 UNDO 块数,不是字节;START_TIME 为事务开始时间
SELECT s.inst_id, s.con_id, s.sid, s.serial#, s.username,
       s.status, s.sql_id, t.start_time,
       t.used_ublk, t.used_urec
FROM gv$transaction t
JOIN gv$session s
  ON s.inst_id = t.inst_id
 AND s.saddr = t.ses_addr
 AND s.con_id = t.con_id
ORDER BY t.used_ublk DESC;

65. 查看正在等待获取锁的请求

-- REQUEST > 0 表示锁请求;不能仅凭 ID1、ID2 认定阻塞者
SELECT inst_id, con_id, sid, type, id1, id2,
       lmode, request, block, ctime
FROM gv$lock
WHERE request > 0
ORDER BY type, id1, id2, inst_id;

66. 查看业务 PDB 中被锁定的对象

-- 先连接目标业务 PDB;非 CDB 可在本库执行
-- LOCKED_MODE 为对象上的 TM 锁模式,不是行锁数量
SELECT l.inst_id, l.con_id, l.session_id AS sid,
       l.oracle_username, o.owner, o.object_name,
       o.object_type, l.locked_mode
FROM gv$locked_object l
JOIN dba_objects o ON o.object_id = l.object_id
WHERE l.con_id = TO_NUMBER(SYS_CONTEXT('USERENV', 'CON_ID'))
ORDER BY o.owner, o.object_name, l.inst_id;

67. 对比同一 SQL 在不同实例上的子游标

-- :sql_id 为目标 SQL;:con_id 为目标容器,非 CDB 为 0
-- ELAPSED_TIME 为游标累计微秒,含并行进程累计时间
SELECT inst_id, con_id, sql_id, child_number,
       plan_hash_value, executions,
       ROUND(elapsed_time / 1000000, 2) AS elapsed_seconds,
       buffer_gets, disk_reads, last_active_time
FROM gv$sql
WHERE sql_id = :sql_id
  AND con_id = :con_id
ORDER BY inst_id, child_number;

68. 查看指定 SQL 当前在哪些实例执行

SELECT inst_id, con_id, sid, serial#, service_name,
       sql_id, sql_child_number, sql_exec_start,
       sql_exec_id, event, state
FROM gv$session
WHERE sql_id = :sql_id
  AND con_id = :con_id
  AND status = 'ACTIVE'
ORDER BY inst_id, sid;

69. 查看指定实例中游标的实际执行计划

-- 连接第 67 条查到的实例和容器后执行;此函数不跨实例取计划
-- ALLSTATS LAST 仅在已收集执行统计时显示实际行数等信息
SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(
    :sql_id, :child_number, 'ALLSTATS LAST'));

70. 查看并行执行进程与协调会话所在实例

SELECT inst_id AS worker_inst, con_id,
       sid AS worker_sid, serial# AS worker_serial,
       qcinst_id, qcsid, qcserial#,
       server_group, server_set, server#, degree, req_degree
FROM gv$px_session
ORDER BY qcinst_id, qcsid, inst_id, server_set, server#;

八、Cache Fusion、全局等待与实例间通信(71-80)

71. 查看数据库实际使用的集群互连

SELECT inst_id, name, ip_address, is_public, source
FROM gv$cluster_interconnects
ORDER BY inst_id, name;

72. 查看各实例累计 gc 等待

-- 累计值:排查当前问题应取两次采样的差值
-- TIME_WAITED_MICRO 原值为微秒,以下换算为秒
SELECT inst_id, con_id, event, total_waits,
       ROUND(time_waited_micro / 1000000, 2) AS waited_seconds,
       ROUND(time_waited_micro / NULLIF(total_waits, 0) / 1000, 3)
           AS avg_wait_ms
FROM gv$system_event
WHERE event LIKE 'gc %'
ORDER BY waited_seconds DESC;

73. 查看当前正在等待 gc 事件的会话

-- STATE = WAITING 才表示当前正在等待
SELECT inst_id, con_id, sid, serial#, sql_id, event,
       p1text, p1, p2text, p2, p3text, p3,
       wait_time_micro AS current_wait_us
FROM gv$session
WHERE state = 'WAITING'
  AND event LIKE 'gc %'
ORDER BY wait_time_micro DESC;

74. 查看实例之间的块传输统计

-- INST_ID 是接收实例,INSTANCE 是发送实例
-- CR_BLOCK、CURRENT_BLOCK 不含 busy、congested 类别,勿当作总数
SELECT inst_id AS receiver_inst, instance AS sender_inst,
       con_id, class, cr_block, cr_busy, cr_congested,
       current_block, current_busy, current_congested, lost
FROM gv$instance_cache_transfer
ORDER BY receiver_inst, sender_inst, class;

75. 查找全局缓存等待较多的对象

-- 段统计为累计值;当前热点需两次采样比较增量
SELECT inst_id, con_id, owner, object_name, subobject_name,
       object_type, statistic_name, value
FROM gv$segment_statistics
WHERE statistic_name = 'gc buffer busy'
  AND value > 0
ORDER BY value DESC
FETCH FIRST 30 ROWS ONLY;

76. 查看各实例接收的全局缓存块数

-- 实例启动以来累计块数;传输速率需按采样间隔取差值
SELECT inst_id, con_id, name, value
FROM gv$sysstat
WHERE name IN ('gc cr blocks received', 'gc current blocks received')
ORDER BY name, inst_id;

77. 查看各实例提供给其他实例的缓存块数

-- 累计块数;与接收端统计结合观察读写访问分布
SELECT inst_id, con_id, name, value
FROM gv$sysstat
WHERE name IN ('gc cr blocks served', 'gc current blocks served')
ORDER BY name, inst_id;

78. 查看 GCS、GES 相关后台进程

SELECT inst_id, pname, spid, program, tracefile
FROM gv$process
WHERE pname IN ('LMON', 'LMD0', 'LCK0', 'LMHB')
   OR pname LIKE 'LMS%'
ORDER BY inst_id, pname;

79. 对比各实例最近一分钟的 CPU 和负载指标

-- 保留 METRIC_UNIT,避免把速率、百分比和会话数混为一谈
SELECT inst_id, con_id, begin_time, end_time,
       metric_name, ROUND(value, 2) AS metric_value, metric_unit
FROM gv$sysmetric
WHERE intsize_csec BETWEEN 5000 AND 7000
  AND (metric_name LIKE '%CPU%'
       OR metric_name = 'Average Active Sessions')
ORDER BY metric_name, inst_id;

80. 查看动态重主(DRM)统计

-- 实例启动以来累计值;REMASTER_TIME 原值单位为百分之一秒
SELECT inst_id, con_id, remaster_type, remaster_ops,
       ROUND(remaster_time / 100, 2) AS remaster_seconds,
       remastered_objects, current_objects
FROM gv$dynamic_remaster_stats
ORDER BY inst_id, remaster_type;

九、redo 线程、归档与诊断日志(81-90)

81. 查看 redo 线程与实例的对应关系

-- 在主库查询;V$THREAD 在物理备库上不返回有意义的线程信息
SELECT thread#, instance, status, enabled,
       groups, current_group#, sequence#, open_time
FROM v$thread
ORDER BY thread#;

82. 按线程查看 online redo 状态

SELECT thread#, group#, sequence#,
       ROUND(bytes / 1024 / 1024) AS size_mb,
       members, status, archived, first_time
FROM v$log
ORDER BY thread#, group#;

83. 查看 redo 日志成员及文件状态

-- STATUS 为空通常表示该成员处于使用状态,不能当作缺失
SELECT group#, type, member, status, is_recovery_dest_file
FROM v$logfile
ORDER BY group#, member;

84. 查看各实例归档目的地的错误

SELECT inst_id, dest_id, dest_name, status, type,
       destination, archived_thread#, archived_seq#, error
FROM gv$archive_dest_status
WHERE status <> 'INACTIVE'
ORDER BY inst_id, dest_id;

85. 查看各线程最近归档到本地的序列

-- 只看当前 incarnation 的本地归档记录;不证明文件仍可读
SELECT dest_id, thread#, MAX(sequence#) AS last_archived_sequence
FROM v$archived_log
WHERE standby_dest = 'NO'
  AND archived = 'YES'
  AND name IS NOT NULL
  AND resetlogs_change# = (SELECT resetlogs_change# FROM v$database)
GROUP BY dest_id, thread#
ORDER BY dest_id, thread#;

86. 按小时统计各线程的日志切换量

-- 按 FIRST_TIME 归属小时,估算切换频率;受控制文件历史保留影响
-- 使用 V$,避免 GV$ 在各实例上重复返回同一控制文件记录
SELECT thread#, TO_CHAR(first_time, 'YYYY-MM-DD HH24') AS log_hour,
       COUNT(*) AS log_count
FROM v$log_history
WHERE first_time >= SYSDATE - 1
  AND resetlogs_change# = (SELECT resetlogs_change# FROM v$database)
GROUP BY thread#, TO_CHAR(first_time, 'YYYY-MM-DD HH24')
ORDER BY log_hour, thread#;

87. 查看各实例 ADR 和日志目录

SELECT inst_id, name, value
FROM gv$diag_info
WHERE name IN ('ADR Base', 'ADR Home', 'Diag Trace', 'Diag Alert')
ORDER BY inst_id, name;

88. 列出本节点数据库 ADR Home

# oracle;当前节点、当前 ADR base
$DB_HOME/bin/adrci exec="show homes"

89. 查看指定数据库实例最近 100 行告警日志

# oracle;本节点的指定数据库 ADR Home
# DB_ADR_HOME 使用第 88 条输出的相对 homepath
$DB_HOME/bin/adrci exec="set homepath $DB_ADR_HOME; show alert -tail 100 -term"

90. 收集本节点 Clusterware 诊断信息

# root;当前节点;诊断收集
# 会写诊断包并消耗磁盘空间;先确认可用空间
cd "$GRID_HOME/bin" || exit 1
./diagcollection.pl --collect --crs

十、启停、服务迁移与维护检查(91-100)

91. 停止本节点 Clusterware

# root;当前节点
# 维护操作:影响本节点 GI 栈及其管理的资源,可能触发其他节点接管
# 先迁移业务并确认承载能力;无 -f 时资源无法停止会报错
$GRID_HOME/bin/crsctl stop crs

92. 启动本节点 Clusterware

# root;当前节点
# 资源会按配置的启动策略拉起;完成后检查第 4、11、19、52 条
$GRID_HOME/bin/crsctl start crs

93. 停止指定数据库实例

# oracle;指定实例及其服务
# IMMEDIATE 会断开该实例连接并回滚未提交事务;先处理业务服务
$DB_HOME/bin/srvctl stop instance \
  -db "$DB_UNIQUE_NAME" -instance "$INSTANCE_NAME" -stopoption IMMEDIATE

94. 启动指定数据库实例

# oracle;指定实例
$DB_HOME/bin/srvctl start instance \
  -db "$DB_UNIQUE_NAME" -instance "$INSTANCE_NAME"

95. 停止指定实例上的业务服务

# oracle;指定实例上的指定服务
# 维护操作:停止该实例上的服务入口;排空超时为 300 秒
# 不使用 -force,已有会话可能继续保留;完成后检查连接分布
$DB_HOME/bin/srvctl stop service \
  -db "$DB_UNIQUE_NAME" -service "$SERVICE_NAME" \
  -instance "$INSTANCE_NAME" -drain_timeout 300

96. 在指定实例上启动业务服务

# oracle;指定实例上的指定服务
# 目标实例需符合该服务的配置;启动后检查注册和应用连接
$DB_HOME/bin/srvctl start service \
  -db "$DB_UNIQUE_NAME" -service "$SERVICE_NAME" -instance "$INSTANCE_NAME"

97. 把业务服务迁移到另一个实例

# oracle;指定服务;源实例到目标实例
# 适用于 administrator-managed RAC;目标需在首选或可用实例列表
# 不使用 -force;现有会话未必随服务迁走,客户端需支持相应排空机制
$DB_HOME/bin/srvctl relocate service \
  -db "$DB_UNIQUE_NAME" -service "$SERVICE_NAME" \
  -oldinst "$OLD_INSTANCE" -newinst "$NEW_INSTANCE" -drain_timeout 300

98. 停止整个 RAC 数据库

# oracle;指定数据库的所有实例
# 高影响维护操作:停止该数据库所有实例及服务,造成整库业务中断
# IMMEDIATE 会断开连接并回滚未提交事务
$DB_HOME/bin/srvctl stop database -db "$DB_UNIQUE_NAME" -stopoption IMMEDIATE

99. 启动整个 RAC 数据库

# oracle;指定数据库
# 启动已启用的实例;完成后检查实例、PDB、服务及应用连接
$DB_HOME/bin/srvctl start database -db "$DB_UNIQUE_NAME"

100. 检查所有节点的网络连通性

# grid;当前集群
# 只做连通性验证;不能代替持续丢包、带宽与时延测试
$GRID_HOME/bin/cluvfy comp nodecon -n all -verbose

总结

RAC 排障时,先确认问题发生在哪个节点、实例和服务,再查会话、SQL 与等待事件。累计统计要看采样增量,服务调整后还要核对监听注册和实际连接分布。

更多数据库命令,见 ORA100 · DBA100

也可以在微信搜索小程序 「三笠的百令册」

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。