数据字典与动态视图
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
根据上面我们提到的,这个的同义词指向一个view,我们查查view 的定义 SQL> select * from dba_views a where a.view_name = 'ALL_TABLES'; OWNER VIEW_NAME TEXT_LENGTH TEXT ------------------------------ ------------------------------ ---------- ------------------------------SYS ALL_TABLES 4173 select u.name, o.name,d........ from sys.user$ u, sys.ts$ ts, s ys.seg$ s, sys.obj$ co, sys.tab$ t, sys.obj$ o,sys.obj$ cx, sys.user$ cu ..................
各类数据视图比较
USER_数据字典视图:显示当前模式的所有对象 信息。 (user_objects)
ALL_数据字典视图:显示用户可访问的所有对象 信息。(all_objects) DBA_数据字典视图:显示整个数据库范围内的 系统信息。(dba_objects)
以USER_开头的数据字典视图
Oracle通过动态性能视图将oracle数据库的状态 展示出来,提供给用户和数据库管理员,oracle 对V$视图给出了详细的文档说明供开发管理人员 参考,是研究和管理数据库的主要依据。
Oracle包含了一些潜在的由系统管理员如SYS维 护的表和视图,由于当数据库运行的时候它们会 不断进行更新,所以称它们为动态数据字典(或 者是动态性能视图)。这些视图提供了关于内存 和磁盘的运行情况,所以我们只能对其进行只读 访问而不能修改它们。
模式(Schema)
模式是用户所拥有对象的集合,在Oracle数据库 中,用户与模式是一一对应的关系,并且二者名 称相同。
用户SYSTEM 模式SYSTEM
用户stu_00
模式stu_00
数据字典包括以下内容
所有数据库Schema对象的定义(表、视图、索引、聚簇、 同义词、序列、过程、函数、包、触发器等); 数据库的空间分配和使用情况;
数据字典表
数据字典表(Data Dictionary Table)用以存 储表、索引、约束以及其他数据库结构的信息。 这些对象通常以“$”结尾(如tab$、obj$、ts$ 等),在创建数据库的时候通过运行sql.bsq脚本 来创建。
sql.bsq是非常重要的一个文件,其中包含了数据 字典表的定义及注释说明。 该文件位于..\rdbms\admin目录下。
字段的缺省值;
完整性约束信息; Oracle用户名称、角色、权限等信息; 审计信息; 其他数据库信息。
数据字典
所有数据字典都属于SYS模式,并且存放在SYSTEM表空 间中。 数据字典由基表(内部RDBMS(X$)表和数据字典表) 和视图(动态性能(V$)视图和数据字典视图)两部分 构成。 其中基表存放数据库的基本信息,普通用户无法读写。
Baidu Nhomakorabea
上面我们了解了这里数据字典表的内部机理,我们以ALL_TABLES这 个为例,看看她是怎样的一回事 我们可以先看看dictionary表里确实有这样一个数据字典 SQL> select * from dictionary a where a.table_name = 'ALL_TABLES'; TABLE_NAME COMMENTS ------------------------------ ------------------------------------------------------------------------ALL_TABLES Description of relational tables accessible to the
这里ALL_TABLES是一个同义词,查出关联对象 SQL> select * from dba_synonyms a where a.synonym_name = 'ALL_TABLES'; OWNER SYNONYM_NAME TABLE_OWNER TABLE_NAME ------------------------------ ----------------------------- ------------------------------ -----------PUBLIC ALL_TABLES SYS ALL_TABLES
以USER_开头的数据字典视图 以DBA_开头的数据字典视图
在Oracle中,用户 与模式一一对应,用 户可以访问其模式的 所有对象,如果用户 要访问其他模式的对 象,必须要有相应的 对象特权。
用户stu_00
模式stu_00
模式SYSTEM
数据字典表的用户都是sys,存在在system这个 表空间里,表名都用“$”结尾,为了便于用户对 数据字典表的查询,这样的名字是不利于我们记 忆的,所以Oracle对这些数据字典都分别建立了 用户视图,不仅换了更容易接受的名字,还隐藏 了数据字典表表之间的关系,让我们通过视图来 进行查询,简单而形象,Oracle针对这些对象的 范围,分别把视图命名为DBA_XXXX, ALL_XXXX和USER_XXXX
USER_数据字典只显示当前模式的详细信息。
SELECT object_name FROM user_objects WHERE object_type = ‘TABLE’;
以ALL_开头的数据字典视图
ALL_数据字典视图可用于查询用户可访问的所有 对象信息。
SELECT owner, object_name FROM all_objects WHERE object_type = ‘TABLE’;
这里就可以看到这个all_tables查询了 sys.user$ u, sys.ts$ ts, s ys.seg$ s, sys.obj$ co, sys.tab$ t, sys.obj$ o,sys.obj$ cx, sys.user$ cu 这样一系列表, 有兴趣的朋友看看,这里是不是All的这个逻辑呀, 也就是这个用户可以看到的所有的表。
Where inst_id=USERENV(‘Instance’)—用于限制返回当前实例信 息。
动态性能视图其他视图
Oracle提供了一些特殊视图用以记录其他视图的 创建方式。V$fixed_view_definition就是其中 之一。例如查看GV$FIXED_TABLE和 V$FIXED_TABLE,了解一下GV$和V$视图的结 构及创建方式:
动态信息视图也是数据字典的一种,提供信息维护的作用。 数据库运行的一些信息对于我们来说也是非常有帮助的, 也更为有意义。比如,有多少个session,有什么样的 process在实例里运行,系统的状态现在是如何的,可以看 到这些信息都是实例运行时的动态信息,不是固定的信息, 不同的时刻可能信息也是不一样的, Oracle为了进行维护 的时候能够得知这些实例的这些类似状态一样的动态的信 息,提供了动态性能视图,通过这个动态性能视图我们可 以了解到实例内部的一些动态变化的状态信息。
数据字典视图存放基表解码后的信息,用户可以通过它查 询系统信息。
内部RDBMS(X$)表
X$表是oracle数据库的核心部分,这些表用于跟踪内部 数据库信息,维持数据库的正常运行。X$表是加密命名 的,而且oracle不作文档说明,这部分知识是oracle公司 的技术机密,oracle通过这些X$表建立起其他大量视图, 提供用户查询管理数据库之用。但是由于X$表记录了大 量的有用信息,所以也不停地被全球的DBA不懈地探索着, 最为人所熟知的有X$BH、 X$KSMKP等。 X$表是oracle数据库的运行基础,在数据库启动时由 oracle应用程序动态创建。这部分表对数据库来说至关重 要,所以oracle不允许SYSDBA之外的用户直接访问,显 示授权不被允许。
以DBA_开头的数据字典视图
DBA_数据字典视图用于显示整个数据库范围内 的系统信息。(要求用户有DBA角色或SELECT ANY TABLE系统权限) SELECT owner, object_name FROM dba_objects where object_type = ‘TABLE’;
数据字典与动态视图
数据字典
数据字典是Oracle 数据库重要的组成部分, 它用于提供数据库的相关系统信息。数据字典的 维护和修改是由系统自动完成的,而用户只能执 行SELECT语句查询系统信息。
数据库是数据的集合,数据库维护和管理用户的 数据,那么这些用户数据表都存在哪里,用户的 信息是怎样的,存储这些用户的数据的路径在哪 里,这些信息不属于用户的信息,却是数据库维 护和管理用户数据的核心,这些信息就是数据库 的数据字典来维护的,数据库的数据字典就汇集 了这些数据库运行所需要的基础信息
GV$和V$视图
在数据库启动时,oracle动态创建X$表,在此基础之上,oracle创 建了GV$和V$视图。从oralce 8开始, GV$视图开始被引入,其含 义为Global V$。除了一些特例以外,每个V$视图都有一个对应的 GV$视图存在。 GV$视图的产生是为了满足OPS环境的需要,在OPS环境中,查询 GV$视图返回所有实例信息,而每个V$视图是基于GV$视图,增加 了INST_ID列的where条件限制建立,只包含当前连接实例信息。 注意,每个V$视图都包含类似语句:
数据字典
Oracle RDBMS使用数据字典记录和管理对象信息和安全 信息等,用户和数据库系统管理员可以通过数据字典来获 取数据库相关信息。 数据字典是数据库的核心,通过数据字典,oracle数据库 基本上可以实现自解释。 数据字典是只读的,通常不建议对任何数据字典表中的任 何信息进行手工更新或改动,对于数据字典的修改很容易 就会导致数据库紊乱,造成无法恢复的后果,而且oracle 公司不对此类操作带来的后果负责。
建立数据字典视图
建立数据字典基表,运行脚本:
SQL>@%oracle_home%\rdbms\admin\sql.bsq;
建立数据字典视图,运行脚本:
SQL>@%oracle_home%\rdbms\admin\catalog.bs q;
数据字典视图分类
1. 2. 3.
以ALL_开头的数据字典视图
这些视图是由sys用户创建的,所以使用需要加上 sys ,显然这个太麻烦了,所以Oracle为每个数 据字典表的视图头建立了同名字的公共同义词 (public synonyms). 这样简单的处理就省去了 写sys.这个麻烦事。
Oracle为了便于汇总数据字典表的信息,把所有的数据字典都汇集到 dictionary表里了,通过对这个表的查询,我们可以很方便的找到数据 库提供的数据字典。 SQL> desc dictionary; Name Type Nullable Default Comments ---------- -------------- -------- ------- -------------------------TABLE_NAME VARCHAR2(30) Y Name of the object COMMENTS VARCHAR2(4000) Y Text comment on the object
动态性能视图
动态性能视图用于记录当前数据库的活动信息, 他们是由Oracle Server自动维护和修改的。当 启动Oracle Server时,系统会自动建立动态性 能视图,而当停止Oracle Server时,系统会自 动释放动态性能视图。
动态性能视图
动态性能(V$)视图(Dynamic Performance View)记录了数据库运行时信息和统计数据,大 部分动态性能视图被实时更新以反映数据库当前 状态。