
Oracle 数据库中最核心和常用的十个数据字典视图和动态性能视图。这些视图是 DBA 管理和维护数据库的“眼睛”,提供了从逻辑存储到性能指标的全方位洞察。
以下是我们将详细介绍的10个关键视图:
- V$SESSION
- V$SQL
- DBA_TABLES / DBA_SEGMENTS
- DBA_DATA_FILES / DBA_FREE_SPACE
- V$DATABASE
- VLOG/VLOG / VLOG/VLOGFILE
- V$ARCHIVED_LOG
- V$LOCK
- V$SESSION_WAIT
- DBA_USERS / V$PWFILE_USERS
1. V$SESSION
- 官方/专业解释: 这是一个动态性能视图(Dynamic Performance View),它显示当前实例中每个会话(Session)的详细信息。会话是用户进程和数据库实例之间的一个特定连接。
- 通俗解释: 就像数据库的 “实时在线用户列表” 或 “任务管理器” 。你可以看到谁连上了数据库,他们在执行什么程序,正在运行什么SQL,以及他们的状态(是活跃的还是正在等待)。
- 主要作用:
- 查看当前所有会话的连接信息。
- 诊断阻塞和锁等待。
- 终止异常或资源占用过高的会话。
- 跟踪特定会话的执行情况。
- 关键字段:
SID,SERIAL#: 会话的唯一标识符(终止会话时需要这两个值)。USERNAME: 登录的数据库用户名。STATUS: 会话状态(ACTIVE-正在执行,INACTIVE-空闲,KILLED-被标记终止)。MACHINE,PROGRAM: 连接来自哪台机器和什么程序(如sqlplus.exe)。SQL_ID: 正在执行的最新SQL语句的ID(可与V$SQL关联)。BLOCKING_SESSION: 阻塞当前会话的SID(用于排查锁等待)。
- 常用查询示例:
-- 查看所有活动会话 SELECT sid, serial#, username, status, machine, program, sql_id FROM v$session WHERE status = 'ACTIVE'; -- 查找正在被阻塞的会话 SELECT sid, serial#, username, blocking_session, wait_class, seconds_in_wait FROM v$session WHERE blocking_session IS NOT NULL; -- 终止指定会话 (请谨慎操作!) ALTER SYSTEM KILL SESSION '123, 56789'; -- 其中123是SID, 56789是SERIAL#
2. V$SQL
- 官方/专业解释: 动态性能视图,缓存了在共享池(Shared Pool)中所有已解析并执行过的SQL语句的统计信息。SQL语句只有在被硬解析后才会被加载到这里。
- 通俗解释: 数据库的 “SQL执行历史记录仪” 或 “SQL排行榜” 。它记录了每条SQL执行了多久、读了多少数据、执行了多少次,帮你快速找出最耗资源的“问题SQL”。
- 主要作用:
- 识别高负载、低效的SQL语句进行调优。
- 查看SQL语句的执行计划(需要与
DBMS_XPLAN包结合)。 - 分析SQL的资源配置(如CPU、IO消耗)。
- 关键字段:
SQL_ID: SQL语句的唯一标识。SQL_TEXT: SQL文本的前1000个字符(完整文本可用DBMS_LOB.SUBSTR查看SQL_FULLTEXT字段)。EXECUTIONS: 执行次数。ELAPSED_TIME: 总耗时(微秒)。CPU_TIME: 消耗的CPU时间(微秒)。DISK_READS: 物理读次数。BUFFER_GETS: 逻辑读次数(一致性读)。
- 常用查询示例:
-- 找出平均单次执行逻辑读最高的SQL(可能缺少索引或全表扫描) SELECT sql_id, sql_text, executions, disk_reads, buffer_gets, ROUND(buffer_gets / executions, 2) avg_gets_per_exec FROM v$sql WHERE executions > 0 ORDER BY avg_gets_per_exec DESC; -- 查看某条特定SQL的详细信息 SELECT * FROM v$sql WHERE sql_id = 'ayr58h1qvg3up';
3. DBA_TABLES 和 DBA_SEGMENTS
- 官方/专业解释: 数据字典视图,显示数据库中所有表(DBA_TABLES)和所有段(DBA_SEGMENTS)的元数据信息。
DBA_TABLES包含表的逻辑属性,而DBA_SEGMENTS包含段的物理存储属性。 - 通俗解释:
DBA_TABLES: 数据库的 “表属性清单” ,记录了表有多少行、有多少列等定义信息。DBA_SEGMENTS: 数据库的 “表空间占用清单” ,记录了表实际占用了多少MB的磁盘空间。
- 主要作用:
- 查询表的存储属性(表空间、存储参数)。
- 分析表的空间使用情况和高水位线(HWM)。
- 管理数据库对象的存储。
- 关键字段 (DBA_TABLES):
TABLE_NAME,OWNER: 表名和属主。TABLESPACE_NAME: 所在的表空间。NUM_ROWS,LAST_ANALYZED: 统计信息中的行数和最后分析时间。
- 关键字段 (DBA_SEGMENTS):
SEGMENT_NAME,SEGMENT_TYPE,OWNER: 段名、类型(TABLE, INDEX)、属主。TABLESPACE_NAME: 所在的表空间。BYTES,BLOCKS: 段占用的字节数和块数。EXTENTS: 段包含多少个区。
- 常用查询示例:
-- 查看某个用户下所有表的大小 (MB) SELECT owner, segment_name AS table_name, ROUND(bytes/1024/1024, 2) AS size_mb FROM dba_segments WHERE owner = 'SCOTT' AND segment_type = 'TABLE' ORDER BY size_mb DESC; -- 查看表的行数和最后分析时间 SELECT table_name, num_rows, last_analyzed FROM dba_tables WHERE owner = 'SCOTT';
4. DBA_DATA_FILES 和 DBA_FREE_SPACE
- 官方/专业解释: 数据字典视图,显示所有数据文件(DBA_DATA_FILES)的信息以及表空间中的空闲空间(DBA_FREE_SPACE)信息。
- 通俗解释:
DBA_DATA_FILES: 数据库的 “数据文件清单” ,记录了每个文件在哪里、有多大。DBA_FREE_SPACE: 数据库的 “剩余空间分布图” ,记录了每个表空间还有多少空闲位置可用。
- 主要作用:
- 监控数据库文件的增长和分布。
- 监控表空间使用率,预警空间不足。
- 关键字段 (DBA_DATA_FILES):
FILE_NAME: 数据文件的物理路径。TABLESPACE_NAME: 所属表空间。BYTES,MAXBYTES,AUTOEXTENSIBLE: 当前大小、最大可扩展大小、是否自动扩展。
- 常用查询示例:
-- 计算每个表空间的总大小、已使用空间、空闲空间和使用率 SELECT df.tablespace_name, ROUND(SUM(df.bytes)/1024/1024) total_mb, ROUND(SUM(fs.bytes)/1024/1024) free_mb, ROUND((SUM(df.bytes) - SUM(fs.bytes))/1024/1024) used_mb, ROUND((1 - (SUM(fs.bytes) / SUM(df.bytes))) * 100, 2) pct_used FROM dba_data_files df JOIN dba_free_space fs ON df.tablespace_name = fs.tablespace_name GROUP BY df.tablespace_name ORDER BY pct_used DESC;
5. V$DATABASE
- 官方/专业解释: 动态性能视图,显示当前已挂载(Mounted)或打开(Open)的数据库的概要信息,这些信息主要来自控制文件。
- 通俗解释: 数据库的 “身份证” 和 “基本档案” 。一眼就能看到数据库的名字、创建时间、运行模式、日志模式等最关键的身份信息。
- 主要作用:
- 获取数据库的基本信息。
- 检查数据库是否处于归档模式(ARCHIVELOG)或非归档模式(NOARCHIVELOG)。
- 检查数据库的保护模式。
- 关键字段:
NAME: 数据库名(DB_NAME)。DBID: 数据库唯一标识符。CREATED: 创建时间。LOG_MODE: 归档模式(ARCHIVELOG/NOARCHIVELOG)。OPEN_MODE: 打开模式(READ WRITE,MOUNTED,READ ONLY)。
- 常用查询示例:
-- 查看数据库核心信息 SELECT name, dbid, created, log_mode, open_mode FROM v$database; -- 检查数据库是否处于归档模式 (对于备份至关重要) SELECT log_mode FROM v$database; -- 如果输出是 'ARCHIVELOG',则表示已开启归档。
6. VLOG和VLOG 和 VLOG和VLOGFILE
- 官方/专业解释:
V$LOG: 显示在线重做日志组(Redo Log Group)的信息。V$LOGFILE: 显示在线重做日志组对应的成员文件(Member File)的物理信息。
- 通俗解释:
V$LOG: 查看 “日志组” 的状态,比如当前正在使用哪个组写日志。V$LOGFILE: 查看每个日志组由哪些具体的 “日志文件” 组成。
- 主要作用:
- 监控重做日志的切换频率和状态。
- 管理重做日志组和成员(添加、删除)。
- 关键字段 (V$LOG):
GROUP#: 日志组编号。STATUS: 状态(CURRENT-当前正在使用,ACTIVE-实例恢复需要,INACTIVE-不再需要)。BYTES: 日志组大小。MEMBERS: 该组有多少个成员(镜像文件)。
- 常用查询示例:
-- 查看日志组信息 SELECT group#, sequence#, bytes, members, status, archived FROM v$log ORDER BY group#; -- 查看日志文件信息 SELECT group#, member FROM v$logfile ORDER BY group#;
7. V$ARCHIVED_LOG
- 官方/专业解释: 动态性能视图,从控制文件中显示已归档的重做日志文件的历史信息。
- 通俗解释: 数据库的 “归档日志清单” 。记录了所有已经被备份出来的旧日志文件,这是执行基于时间点恢复(PITR) 的关键。
- 主要作用:
- 确认归档备份是否成功。
- 用于RMAN备份和恢复操作。
- 查询数据库的SCN和时间线历史。
- 关键字段:
NAME: 归档日志文件的完整路径名。DEST_ID: 归档目标路径的ID。SEQUENCE#: 日志序列号。FIRST_CHANGE#,NEXT_CHANGE#: 该日志文件包含的SCN范围。COMPLETION_TIME: 归档完成的时间。DELETED: 是否已被删除(例如被RMAN删除)。
- 常用查询示例:
-- 查看最近产生的归档日志 SELECT name, sequence#, completion_time, first_change#, next_change# FROM v$archived_log ORDER BY completion_time DESC;
8. V$LOCK
- 官方/专业解释: 动态性能视图,显示当前数据库持有的锁和正在请求的锁的信息。
- 通俗解释: 数据库的 “锁监控大屏” 。实时显示谁(Session)锁定了什么资源,谁又在等待这个资源。
- 主要作用:
- 诊断和解决锁冲突(阻塞)、死锁问题。
- 关键字段:
SID: 持有或请求锁的会话ID。TYPE: 锁类型(如TM-DML锁/表锁,TX-事务锁/行锁,UL-用户自定义)。ID1,ID2: 锁标识符,其含义根据锁类型不同而不同。LMODE,REQUEST: 锁模式(持有模式)和请求模式。0-None,1-Null,2-Row-S (SS),3-Row-X (SX),4-Share,5-S/Row-X (SSX),6-Exclusive
BLOCK: 指示此锁是否阻塞了另一个会话(1表示阻塞)。
- 常用查询示例:
-- 查找正在阻塞其他会话的锁 (BLOCK=1) SELECT sid, type, id1, id2, lmode, request, block FROM v$lock WHERE block = 1; -- 结合v$session查看更详细的阻塞信息 SELECT (SELECT username FROM v$session WHERE sid = l.sid) holder, l.sid, ' is blocking ', (SELECT username FROM v$session WHERE sid = l2.sid) blocker, l2.sid FROM v$lock l, v$lock l2 WHERE l.id1 = l2.id1 AND l.id2 = l2.id2 AND l.block = 1 AND l2.request > 0;
9. V$SESSION_WAIT
- 官方/专业解释: 动态性能视图,显示当前会话正在等待或最近一次等待的事件信息。它是性能调优的黄金视图。
- 通俗解释: 数据库的 “等待事件分析仪” 。告诉你数据库“慢”的时候,它到底把时间花在等什么上了(等I/O、等CPU、等网络、等锁?)。
- 主要作用:
- 诊断性能瓶颈的根本原因。
- 确定数据库主要的等待事件类型。
- 关键字段:
SID: 会话ID。EVENT: 等待事件的名称(如db file sequential read-索引读,db file scattered read-全表扫描,enq: TX - row lock contention-行锁等待)。WAIT_TIME: 等待时间。STATE: 等待状态(WAITING-正在等待,WAITED UNKNOWN TIME-等过但时间未知,WAITED SHORT TIME-等过很短时间)。P1,P2,P3: 等待事件的附加参数,其含义因事件而异(如对于db file sequential read,P1是文件号,P2是块号)。
- 常用查询示例:
-- 查看当前所有正在等待的会话及其等待事件 SELECT sid, event, wait_time, state, seconds_in_wait FROM v$session_wait WHERE state = 'WAITING' ORDER BY seconds_in_wait DESC; -- 找出系统中最重要的等待事件 SELECT event, COUNT(*), SUM(seconds_in_wait) FROM v$session_wait WHERE event IS NOT NULL GROUP BY event ORDER BY 3 DESC;
10. DBA_USERS 和 V$PWFILE_USERS
- 官方/专业解释:
DBA_USERS: 数据字典视图,显示数据库中所有用户的基本信息。V$PWFILE_USERS: 动态性能视图,显示已被授予SYSDBA、SYSOPER等特殊管理权限的用户列表。
- 通俗解释:
DBA_USERS: “数据库用户花名册” ,记录了所有用户的账户状态、默认表空间等。V$PWFILE_USERS: “超级管理员权限名单” ,记录了谁有“钥匙”能以最高权限启动和关闭数据库。
- 主要作用:
- 用户管理和安全审计。
- 管理特权用户。
- 关键字段 (DBA_USERS):
USERNAME: 用户名。USER_ID: 用户ID。ACCOUNT_STATUS: 账户状态(OPEN,LOCKED,EXPIRED)。DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE: 默认永久和临时表空间。
- 常用查询示例:
-- 查看所有用户状态 SELECT username, account_status, created, default_tablespace FROM dba_users ORDER BY created DESC; -- 解锁一个用户 ALTER USER scott ACCOUNT UNLOCK; -- 查看哪些用户有SYSDBA等权限 SELECT * FROM v$pwfile_users;
总结表
| 视图名称 | 类型 | 核心作用 | 通俗比喻 |
| :— | :— | :— | :— |
| VSESSION∗∗∣动态性能视图∣监控和管理所有数据库会话∣实时在线用户列表/任务管理器∣∣∗∗VSESSION** | 动态性能视图 | 监控和管理所有数据库会话 | 实时在线用户列表 / 任务管理器 |
| **VSESSION∗∗∣动态性能视图∣监控和管理所有数据库会话∣实时在线用户列表/任务管理器∣∣∗∗VSQL | 动态性能视图 | 分析和调优SQL语句性能 | SQL执行历史记录仪 / SQL排行榜 |
| DBA_TABLES / DBA_SEGMENTS | 数据字典视图 | 查询对象元数据和物理存储空间 | 表属性清单 / 空间占用清单 |
| DBA_DATA_FILES / DBA_FREE_SPACE | 数据字典视图 | 监控数据文件和表空间使用率 | 数据文件清单 / 剩余空间分布图 |
| VDATABASE∗∗∣动态性能视图∣获取数据库核心状态和模式∣数据库的身份证和基本档案∣∣∗∗VDATABASE** | 动态性能视图 | 获取数据库核心状态和模式 | 数据库的身份证和基本档案 |
| **VDATABASE∗∗∣动态性能视图∣获取数据库核心状态和模式∣数据库的身份证和基本档案∣∣∗∗VLOG / VLOGFILE∗∗∣动态性能视图∣管理重做日志组和成员∣日志组状态板/日志文件清单∣∣∗∗VLOGFILE** | 动态性能视图 | 管理重做日志组和成员 | 日志组状态板 / 日志文件清单 |
| **VLOGFILE∗∗∣动态性能视图∣管理重做日志组和成员∣日志组状态板/日志文件清单∣∣∗∗VARCHIVED_LOG | 动态性能视图 | 管理归档日志,用于恢复 | 归档日志清单 |
| VLOCK∗∗∣动态性能视图∣诊断和解决锁阻塞问题∣锁监控大屏∣∣∗∗VLOCK** | 动态性能视图 | 诊断和解决锁阻塞问题 | 锁监控大屏 |
| **VLOCK∗∗∣动态性能视图∣诊断和解决锁阻塞问题∣锁监控大屏∣∣∗∗VSESSION_WAIT | 动态性能视图 | 分析性能瓶颈的等待事件 | 等待事件分析仪 |
| DBA_USERS / V$PWFILE_USERS | 数据字典/动态视图 | 用户管理和特权用户管理 | 用户花名册 / 超级管理员名单 |
熟练掌握这十个视图,你就拥有了监控、管理和优化Oracle数据库的绝大部分能力。它们是DBA日常工作中最得力的工具。
欢迎关注我的公众号《IT小Chen》
121

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



