
以下是对 Oracle 19C ASM 中 V$ASM_CLIENT 动态性能视图的权威解析。该视图是 ASM 管理的核心组件,提供了数据库实例与 ASM 存储交互的关键信息。
1. 核心作用
V$ASM_CLIENT 跟踪连接到 ASM 实例的数据库客户端信息,主要功能包括:
- 显示当前使用 ASM 存储的所有数据库实例
- 监控数据库实例与 ASM 的连接状态
- 识别 ASM 存储的使用者和依赖关系
- 诊断数据库实例与 ASM 之间的连接问题
- 提供跨实例资源协调的可见性(RAC 环境)
📌 定位:
ASM 的"客户端管理器",实时展示哪些数据库实例正在使用 ASM 提供的存储服务。
2. 使用场景
- 存储依赖分析:识别使用特定磁盘组的数据库
- 故障转移监控:RAC 环境中跟踪实例连接状态
- 升级/迁移规划:确定受影响的数据库
- 连接诊断:解决 ORA-15025/ORA-15078 等连接错误
- 资源隔离:验证存储隔离策略(PDB/CDB)
- 安全审计:监控未授权的存储访问
3. 字段含义(Oracle 19c 官方文档定义)
| 列名 | 数据类型 | 说明 |
|---|---|---|
GROUP_NUMBER | NUMBER | 客户端关联的磁盘组编号(0 表示未绑定) |
INST_ID | NUMBER | 客户端实例 ID(RAC 环境) |
DB_NAME | VARCHAR2(30) | 数据库名称(DB_UNIQUE_NAME) |
INSTANCE_NAME | VARCHAR2(30) | 实例名称(INSTANCE_NAME) |
VERSION | VARCHAR2(60) | 客户端数据库版本(如 19.0.0.0.0) |
STATUS | VARCHAR2(15) | 连接状态:CONNECTED(已连接)DISCONNECTED(断开)BOUND(已绑定) |
SOFTWARE_VERSION | VARCHAR2(60) | 客户端软件版本(同 VERSION) |
COMPATIBLE_VERSION | VARCHAR2(60) | 客户端兼容版本(COMPATIBLE 参数值) |
HOST | VARCHAR2(64) | 客户端主机名 |
LOGON_TIME | DATE | 连接建立时间 |
CON_ID | NUMBER | 容器 ID(CDB 环境,0 表示 CDB$ROOT) |
CLIENT_TYPE | VARCHAR2(20) | 客户端类型:DATABASE(标准数据库)ASM(ASM 代理)ACFS(文件系统) |
4. 相关视图与基表
相关视图
| 视图 | 说明 |
|---|---|
GV$ASM_CLIENT | RAC 环境的全局视图(所有节点) |
V$ASM_DISKGROUP | 磁盘组信息(与 GROUP_NUMBER 关联) |
V$ASM_OPERATION | ASM 操作(可关联到客户端) |
V$INSTANCE | 数据库实例信息(客户端视角) |
基表(X$表)
X$KFFCL:V$ASM_CLIENT的底层结构-- 查看基表结构(仅供诊断) SELECT * FROM X$KFFCL WHERE kffcldbn IS NOT NULL;
5. 核心原理
客户端连接机制
关键技术细节
-
连接建立:
- 通过 ASMB 后台进程建立永久连接
- 使用
LOCAL=NO的 bequeath 连接
SELECT program FROM v$process WHERE pname = 'ASMB'; -
心跳机制:
- 每 3 秒发送心跳包
- 超时(60秒)标记为
DISCONNECTED - RAC 中通过 LMON 进程协调
-
状态转换:
BOUND→CONNECTED:完成磁盘组挂载CONNECTED→DISCONNECTED:心跳丢失/实例关闭
6. 常用 SQL 查询与操作
(1) 查看所有连接客户端
SELECT db_name,
instance_name,
host,
status,
TO_CHAR(logon_time, 'YYYY-MM-DD HH24:MI:SS') AS connect_time
FROM v$asm_client;
(2) 查找特定磁盘组的用户
SELECT c.db_name, c.instance_name, g.name AS diskgroup
FROM v$asm_client c
JOIN v$asm_diskgroup g ON c.group_number = g.group_number
WHERE g.name = 'DATA';
(3) 检测异常连接
SELECT *
FROM v$asm_client
WHERE status = 'DISCONNECTED'
AND logon_time > SYSDATE - 1; -- 24小时内断开的连接
(4) RAC 环境连接分析
SELECT inst_id, db_name, COUNT(*) instance_count
FROM gv$asm_client
WHERE status = 'CONNECTED'
GROUP BY inst_id, db_name;
(5) 验证 CDB/PDB 连接
SELECT db_name,
instance_name,
con_id,
(SELECT name FROM v$containers WHERE con_id = c.con_id) AS pdb_name
FROM v$asm_client c
WHERE con_id > 0;
(6) 强制断开客户端(谨慎使用)
ALTER SYSTEM DISCONNECT SESSION 'sid,serial#' IMMEDIATE; -- 需先查询v$session
-- 更安全方式:重启数据库实例
(7) 连接诊断(ORA-15025/15078)
-- 检查版本兼容性
SELECT db_name, compatible_version, version
FROM v$asm_client
WHERE db_name = 'PRODDB'
AND compatible_version < (SELECT compatible_version
FROM v$asm_diskgroup
WHERE name = 'DATA');
总结
- 核心作用:监控数据库实例与 ASM 的连接状态
- 关键字段:
DB_NAME/INSTANCE_NAME:客户端标识STATUS:连接健康状态LOGON_TIME:连接持续时间
- 运维价值:
- 最佳实践:
- 定期监控
STATUS='DISCONNECTED'的异常连接 - RAC 环境中确保所有节点显示一致的客户端列表
- 执行 ASM 维护前检查依赖的数据库
- 定期监控
- 注意事项:
- 客户端断开后仍可能短暂保留在视图中
ASM_POWER_LIMIT变更会影响所有连接客户端- PDB 连接在 19c 中显示为独立条目(
CON_ID > 0)
⚠️ 关键警告:
强制断开客户端可能导致:
- 数据库实例崩溃(ORA-29740)
- 数据文件脱机
- RAC 实例驱逐
务必优先通过数据库实例正常关闭!
欢迎关注我的公众号《IT小Chen》
1165

被折叠的 条评论
为什么被折叠?



