Oracle数据库最常见的10个视图有哪些?

在这里插入图片描述
Oracle 数据库中最核心和常用的十个数据字典视图和动态性能视图。这些视图是 DBA 管理和维护数据库的“眼睛”,提供了从逻辑存储到性能指标的全方位洞察。

以下是我们将详细介绍的10个关键视图:

  1. V$SESSION
  2. V$SQL
  3. DBA_TABLES / DBA_SEGMENTS
  4. DBA_DATA_FILES / DBA_FREE_SPACE
  5. V$DATABASE
  6. VLOG/VLOG / VLOG/VLOGFILE
  7. V$ARCHIVED_LOG
  8. V$LOCK
  9. V$SESSION_WAIT
  10. 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 和 VLOGVLOGFILE

  • 官方/专业解释
    • 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: 动态性能视图,显示已被授予SYSDBASYSOPER等特殊管理权限的用户列表。
  • 通俗解释
    • 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

Oracle 数据库作为关系型数据库管理系统,其 SQL 语句和 PL/SQL 编程功能广泛应用于数据定义、数据操作、事务控制和数据库管理等领域。以下是常见的 Oracle 数据库 SQL 语句分类及示例: ### 数据定义语言(DDL) 用于创建、修改和删除数据库对象,如表、索引、视图等。 - 创建表: ```sql CREATE TABLE employees ( id NUMBER PRIMARY KEY, name VARCHAR2(100), salary NUMBER ); ``` - 修改表结构: ```sql ALTER TABLE employees ADD (department_id NUMBER); ``` - 删除表: ```sql DROP TABLE employees; ``` ### 数据操作语言(DML) 用于操作数据库中的数据,包括插入、更新和删除记录。 - 插入数据: ```sql INSERT INTO employees (id, name, salary) VALUES (1, 'John Doe', 50000); ``` - 更新数据: ```sql UPDATE employees SET salary = 55000 WHERE id = 1; ``` - 删除数据: ```sql DELETE FROM employees WHERE id = 1; ``` ### 数据查询语言(DQL) 用于从数据库中检索数据。 - 查询所有列: ```sql SELECT * FROM employees; ``` - 查询特定列并添加条件: ```sql SELECT name, salary FROM employees WHERE salary > 50000; ``` ### 事务控制语言(TCL) 用于管理事务的提交、回滚等操作。 - 提交事务: ```sql COMMIT; ``` - 回滚事务: ```sql ROLLBACK; ``` ### 数据控制语言(DCL) 用于控制数据库的访问权限。 - 授予权限: ```sql GRANT SELECT, INSERT ON employees TO user1; ``` - 撤销权限: ```sql REVOKE INSERT ON employees FROM user1; ``` ### 其他常用命令 - 查看表结构: ```sql DESCRIBE employees; ``` - 使用 PL/SQL 块执行复杂逻辑: ```sql BEGIN FOR i IN 1..10 LOOP INSERT INTO test_table (id, value) VALUES (i, 'Test' || i); END LOOP; END; / ``` 上述 SQL 语句涵盖了 Oracle 数据库中常见的操作[^1]。这些语句在实际应用中可以根据具体需求进行组合和扩展,以实现更复杂的数据库操作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值