在 Oracle 数据库中,v$符号代表动态性能视图(Dynamic Performance Views),用于显示系统运行时的动态信息,如会话活动、SQL 执行统计等。关键点包括:v$视图实际上是公共同义词,指向 SYS 用户下的 v_$视图;授权时需对 v_$视图授权而非 v$同义词;v$基于内存结构构建,反映实时状态;存在对应的 gv$视图用于集群环境。理解这些区别对于权限管理和性能监控至关重要。
v$和 v_$的一些玄机
v$和 v_$在数据库中有什么区别?v$和 v_$通常在什么情况下使用?如何正确理解 v$和 v_$的前缀含义?Oracle 的普通用户执行 dbms_xplan 包查看执行计划,有时会提示错误,代码语言:javascript AI 代码解释 原因是该用户缺少一些动态性能视图的访问权限,但是当我们尝试将提示的 v$session 授予用户 (例如 hr) 时,提示了这个错,代码语言:javascript AI 代码解释 这就有些玄机了,我是最早从 eygle 的书中看到的这个问题,一个普通用户,在未授权 vsession 访问权限的前提下,执行 descvsession,他提示的是 v_session,不是 vsession,v_session 和 vsession,有什么区别?结合上面的 grant 错误,应该如何授权?代码语言:javascript AI 代码解释 首先,我们常用的 v$session 其实是个同义词,代码语言:javascript AI 代码解释 SQL> select object_name, object_type, owner from dba_objects where object_name='V$SESSION'; OBJECT_NAME OBJECT_TYPE OWNER ------------------------- ----------------------- --------------- V$SESSION SYNONYM PUBLIC 看下他的定义,他是 v_$session 的同义词,代码语言:javascript AI 代码解释 SQL> select dbms_metadata.get_ddl('SYNONYM','V$SESSION','PUBLIC') from dual; DBMS_METADATA.GET_DDL('SYNONYM','V$SESSION','PUBLIC') -------------------------------------------------------------------------------- CREATE OR REPLACE NONEDITIONABLE PUBLIC SYNONYM "V$SESSION" FOR "SYS"."V_$SESSION" 而 v_$session 是个视图,代码语言:javascript AI 代码解释 SQL> select object_name, object_type, owner from dba_objects where object_name='V_$SESSION'; OBJECT_NAME OBJECT_TYPE OWNER ------------------------- ----------------------- --------------- V_$SESSION VIEW SYS 这是他的定义,我们看到结尾,v_session 是从 vsession 视图得到的,代码语言:javascript AI 代码解释 SQL> select dbms_metadata.get_ddl('VIEW','V_$SESSION','SYS') from dual; DBMS_METADATA.GET_DDL('VIEW','V_$SESSION','SYS') -------------------------------------------------------------------------------- CREATE OR REPLACE FORCE NONEDITIONABLE VIEW "SYS".
动态性能监视视图
动态性能监视视图是 Oracle 数据库中用于显示系统运行时动态信息的视图,其名称以 V$为前缀。该视图在数据库运行期间持续更新,主要反映与性能相关的实时状态信息。动态性能视图是基于数据库内存结构而构建的虚拟表,不是存储在数据库中的常规表。每个 V$视图几乎都有相应的 GV$视图,即全局的 V$视图。在数据库启动时,Oracle 动态创建 X$表,在此基础上,Oracle 创建了 GV$和 V$视图。动态性能监视视图能够显示对象联机状态、会话活动情况等系统当前动态参数,例如 v$sql 记录 SQL 语句执行元数据,v$sqlarea 提供聚合信息,v$sqltext 存储 SQL 文本。其内容涵盖数据库运行时的各类实时指标,这些信息为数据库性能监控提供了基础数据支持。在 Autonomous Database 实例中,除了访问标准 PDB 级别的动态性能视图之外,还可以在自治容器数据库级别访问前缀为 ACD 的视图。需要具有 ADMIN 权限才能查询动态性能视图,可以使用 GRANT 命令为非管理用户分配对动态性能视图的 READ 特权。为了防止普通用户的误操作,Oracle 引入了 V$视图,并建立了与 V$视图同名的共用同义词。
Oracle 中,什么是 V$视图和 DBA_视图?
Oracle 中,什么是 V$视图和 DBA_视图?在 Oracle 数据库中,V$视图和 DBA_视图都是用来提供关于数据库状态、性能、配置等方面的信息。它们各自有不同的用途和特点:V$ 视图 定义:V$视图 (也称为动态性能视图) 是基于内存中的数据结构,提供了当前数据库实例的实时信息。这些视图的内容反映了数据库运行时的状态。访问权限:通常只有具有 SELECT_CATALOG_ROLE 或者直接授予了相应系统权限的用户才能查询这些视图。某些 V$视图可能还需要额外的特权。内容:V$视图包含了从系统全局区域 (SGA)、进程状态、锁信息到 SQL 执行统计等广泛的信息。例如:V$SESSION:显示当前所有会话的信息。V$SQL:存储最近执行过的 SQL 语句及其执行统计数据。V$LOCK:展示当前锁定的资源信息。用途:主要用于监控和诊断数据库性能问题,如跟踪长时间运行的查询、检查锁等待情况或查看内存使用情况等。DBA_ 视图 定义:DBA_视图是一组用于管理数据库的视图,它们是从数据字典表构建而来的,并且包含有关整个数据库的所有对象的信息。访问权限:通常需要特定的权限才能访问这些视图,比如 SELECT ANY DICTIONARY 权限或者 DBA 角色。这些视图提供的信息比 V$视图更加全面,但不是实时更新的。
oracle v$关联,Oracle 数据库中 V$、GV$、X$、V_$、GV_$之间的关系说明
oracle v$关联,Oracle 数据库中 V$、GV$、X$、V_$、GV_$之间的关系说明 本文详细讲解了 Oracle 数据库中 V、𝐺𝑉、GV、X 和 V_和 V_视图的区别,包括它们的环境范围和数据来源,并阐述了在授权时如何正确使用 v_$同义词。通过实例演示了如何为用户授予对关键动态性能视图的查询权限。Oracle 数据库中 V、𝐺𝑉、GV、X、V_、V_、GV_$之间的关系说明 GV$:全局视图,针对多个实例环境。V$:针对某个实例的视图。X:是𝐺𝑉:是 GV 视图的数据来源,Oracle 内部表。GV_:是𝐺𝑉:是 GV 的同义词。V_:是𝑉:是 V 的同义词。我们可以使用 V𝐹𝐼𝑋𝐸𝐷𝑉𝐼𝐸𝑊𝐷𝐸𝐹𝐼𝑁𝐼𝑇𝐼𝑂𝑁视图查询到𝑉FIXEDVIEWDEFINITION 视图查询到 V 视图和 GV$视图的定义。在𝑂𝑅𝐴𝐶𝐿𝐸𝐻𝑂𝑀𝐸/𝑟𝑑𝑏𝑚𝑠/𝑎𝑑𝑚𝑖𝑛/𝑐𝑎𝑡𝑎𝑙𝑜𝑔.𝑠𝑞𝑙 中执行了𝑐𝑑𝑓𝑖𝑥𝑒𝑑.𝑠𝑞𝑙 脚本。我们在这个脚本中可以找到𝐺𝑉、ORACLEHOME/rdbms/admin/catalog.sql 中执行了 cdfixed.sql 脚本。我们在这个脚本中可以找到 GV、V_$同义词的创建。SQL> grant select on v$mystat to HR; grant select on v$mystat to HR * 第 1 行出现错误:ORA-02030: 只能从固定的表/视图查询 已用时间:00: 00: 00.10 SQL> 为什么会出现上面的错误?因为因为 v 这类我们经常查的视图都是 v_这类我们经常查的视图都是 v_开头视图的同义词。所以,在进行授权时需要直接授予用户 v_$的查询权限。SQL> grant select on v_$mystat to HR; 授权成功。已用时间:00: 00: 00.12 SQL> 尤其是当需要给普通用户授予对 SQL 查询相关的几个重要的动态性能视图,需要了解:v$sql v$sql_plan v$sql_plan_statistics v$sql_workarea (完) 𝑦𝑠𝑡𝑎
FAQ
v$视图可以直接授权吗?
不可以,v$是同义词,需授权底层的 v_$视图。
gv$和 v$有什么区别?
v$是单实例视图,gv$是全局视图用于 RAC 集群。
普通用户如何查询 v$视图?
需要 DBA 授予对应 v_$视图的 SELECT 权限。