首先,Oracle的字典表和视图基本上可以分为三个层次。
1.1 X$表
这一部分表是Oracle数据库的运行基础,在数据库启动时由Oracle应用程序动态创建。
这部分表对数据库来说至关重要,所以Oracle不允许SYSDBA之外的用户直接访问,显示授权不被允许。
如果显示授权你会收到如下错误:
SQL> grant select on x$ksppi to eygle;
grant select on x$ksppi to eygle
*
ERROR at line 1:
ORA-02030: can only select from fixed tables/views
1.2 GV$和V$视图
从Oracle8开始,GV$视图开始被引入,其含义为Global V$.
除了一些特例以外,每个V$视图都有一个对应的GV$视图存在。
GV$视图的产生是为了满足OPS环境的需要,在OPS环境中,查询GV$视图返回所有实例信息,而每个V$视图基于GV$视图,增加了INST_ID列判断后建立,只包含当前连接实例信息。
Oracle 数据字典是数据库管理系统的重要组成部分,它存储了关于数据库对象、权限、状态等元数据。在Oracle中,数据字典主要由表和视图组成,这些数据结构提供了对数据库内部工作原理的洞察,帮助管理员监控和管理数据库。
1.1 X$表
X$表是Oracle数据库的核心组成部分,它们在数据库启动时由Oracle内部进程动态创建。这些表包含了数据库运行所需的内部结构和状态信息,例如系统参数、进程信息和内存结构等。由于它们对数据库的稳定性和安全性至关重要,Oracle严格限制了对这些表的访问,只允许SYSDBA权限的用户进行操作。尝试为非SYSDBA用户授予选择权限会收到`ORA-02030`错误。
1.2 GV$和V$视图
自Oracle 8开始,GV$视图被引入,主要用于支持Oracle Real Application Clusters (RAC)环境,即OPS(Oracle Parallel Server)的前身。GV$视图提供全局视角,能够显示所有实例的信息,而V$视图则针对单个实例。每个V$视图都有一个与之对应的GV$视图,V$视图通过添加`INST_ID`列的过滤条件来筛选出当前实例的数据。例如,`V$FIXED_TABLE`视图会根据`USERENV('Instance')`函数返回当前实例ID,以确保只显示相应实例的信息。
1.3 GV_$, V_$视图和V$, GV$同义词
在Oracle中,V$和GV$视图通常是通过执行`catalog.sql`脚本创建的。这个脚本首先创建V$和GV$视图,然后创建这两个视图的同义词,使得用户可以通过V$或GV$来访问数据。实际上,当我们查询V$视图时,我们实际上是通过V_$视图的同义词访问数据,而V_$视图本身又是基于实际的V$视图(基于X$表构建)。
1.4 V$FIXED_VIEW_DEFINITION和深入研究
`V$FIXED_VIEW_DEFINITION`视图是探索Oracle对象关系的关键入口,它展示了Oracle数据字典中视图的定义。通过对这个视图的研究,我们可以了解Oracle如何构建和组织它的内部视图,从而更深入地理解数据库的工作机制。
1.4.1 X$表的深入
X$表的详细信息可以从数据字典的其他视图中获取,例如,通过查询`DBA_X$OBJECTS`或`ALL_X$OBJECTS`等视图,可以了解X$表的属性和结构。理解X$表的构成有助于诊断和解决性能问题,因为它们包含了数据库的实时运行状态信息。
Oracle数据字典是一个强大的工具,它允许管理员监控数据库健康状况、优化性能,并进行故障排查。深入理解数据字典的层次结构和组件,对于任何Oracle DBA来说都是必备技能。通过查询和分析数据字典,我们可以获取关于数据库配置、对象权限、运行状态等关键信息,从而更好地管理和维护Oracle数据库。