racle数据字典dictionary

了解Oracle数据字典dictionary

数据字典
用户表是由用户创建并包含业务数据的一些表,如 EMPLOYEES。另外,Oracle DB 中有一个由表和视图组成的集合,这个集合被称为数据字典。此集合由 Oracle Server 创建和 维护,其中包含关于数据库的信息。数据字典是结构化的表和视图,就像其它数据库数据一样。数据字典不仅是每个 Oracle DB 的核心,而且还是所有用户(从最终用户到应用程序设计者和数据库管理员)的一个重要工具。
使用 SQL 语句可访问数据字典。因为数据字典是只读的,所以只能对它的表和视图发出查询命令。
可以通过在基于字典表的字典视图中进行查询来查找如下信息:
数据库中所有方案对象(表、视图、索引、同义词、序列、过程、函数、程序包、 触发器等等)的定义
列的默认值
完整性约束条件信息
Oracle 用户的名称
授予每个用户的权限和角色
其它常规数据库信息


数据字典结构
基础基表中存储了相关数据库的信息。只有 Oracle Server 可写入和读取这些表。用户很少直接访问这些表。
在若干个视图中汇总并显示在数据字典基表中存储的信息。这些视图使用联接和 WHERE 子句将基表数据解码为有用的信息(如用户名或表名),使这些信息更易于理解。大多数用户可以访问视图,但不能访问基表。
Oracle 用户 SYS 拥有数据字典的所有基表以及用户可访问的视图。Oracle 用户在任何时候都不应更改(UPDATE、DELETE 或 INSERT)在 SYS 方案中包含的任何行或方案对象,因为此类操作会破坏数据完整性。


数据字典由一些视图集组成。在许多情况下,一个视图集由包含相似信息并用前缀相互 区分的三个视图组成。例如,名为 USER_OBJECTS、ALL_OBJECTS 和 DBA_OBJECTS 的三个视图。
这三个视图包含关于数据库对象的相似信息,只是范围有所不同。USER_OBJECTS 包含关于您拥有或创建的对象的信息。ALL_OBJECTS 包含关于您可访问的所有对象的信息。DBA_OBJECTS 包含关于所有用户拥有的所有对象的信息。对于前缀为 ALL 或 DBA 的 视图,在名为 OWNER 的视图中通常有一个附加列,用来标识拥有对象的用户。
此外,还有一个前缀为 v$ 的视图集。这些视图本质上是动态的,其中存储了关于性能 的信息。动态性能表不是实际存在的表,大多数用户都不能访问此类表。但是,数据库 管理员可以使用这些表进行查询和创建视图,然后授予其他用户对这些视图的访问权限。


如何使用字典视图
为了熟悉字典视图,可以使用名为 DICTIONARY 的字典视图。该视图包含您可访问的 每个字典视图的名称和简要描述。
可以通过编写查询来搜索关于特定视图名的信息,也可以搜索 COMMENTS 列中的某个 词或词组。在上面显示的示例中对 DICTIONARY 视图进行了描述。该视图含有两列。SELECT 语句会检索关于名为 USER_OBJECTS 的字典视图的信息。USER_OBJECTS 视图包含关于您拥有的所有对象的信息。
您可以通过编写查询来搜索 COMMENTS 列中的某个词或词组。例如,下面的查询会返回您可访问的所有视图的名称,这些视图的 COMMENTS 列中包含词 columns:
SELECT table_name
FROM dictionary
WHERE LOWER(comments) LIKE '%columns%';
注:数据字典中的名称均为大写。


USER_OBJECTS 和 ALL_OBJECTS 视图
在 USER_OBJECTS 视图中进行查询可查看您方案中所有对象的名称和类型。此视图中有以下几列:
OBJECT_NAME:对象的名称
OBJECT_ID:对象的字典对象编号
OBJECT_TYPE:对象的类型(如 TABLE、VIEW、INDEX、SEQUENCE)
CREATED:创建对象的时间戳
LAST_DDL_TIME:使用数据定义语言 (DDL) 命令上次对对象进行修改时的时间戳
STATUS:对象的状态(VALID、INVALID 或 N/A)
GENERATED:此对象名称是否是系统生成的?(Y|N) 
注:以上只列出了部分列。为了查看完整列表,请参阅《Oracle 数据库参考》中的“USER_OBJECTS”。
此外,在 ALL_OBJECTS 视图中进行查询可查看您拥有访问权限的所有对象的列表。


USER_OBJECTS 视图
该示例显示此用户所拥有的所有对象的名称、类型、创建日期和状态。
OBJECT_TYPE 列的值可以为 TABLE、VIEW、SEQUENCE、INDEX、PROCEDURE、FUNCTION、PACKAGE 或 TRIGGER。
STATUS 列的值可以为 VALID、INVALID 或 N/A。虽然表始终有效,但视图、过程、 函数、程序包和触发器可能无效。
CAT 视图
为了简化查询和输出,可以在 CAT 视图中进行查询。此视图只包含两列:TABLE_NAME 和 TABLE_TYPE。其中提供所有 INDEX、TABLE、CLUSTER、VIEW、SYNONYM、SEQUENCE 或 UNDEFINED 对象的名称。
注:CAT 是 USER_CATALOG 的同义词,USER_CATALOG 是一个视图,其中列出了用户拥有的各种表、视图、同义词和序列。


表信息
可以使用 USER_TABLES 视图来获得所有表的名称。USER_TABLES 视图包含关于表的 信息。除了提供表名外,该视图还包含关于存储空间的详细信息。
TABS 视图是 USER_TABLES 视图的同义词。在该视图中进行查询可查看您所拥有表的 列表:
SELECT table_name
FROM  tabs;
注:为了查看 USER_TABLES 视图中列的完整列表,请参阅《Oracle 数据库参考》中的“USER_TABLES”。
此外,在 ALL_TABLES 视图中进行查询可查看您拥有访问权限的所有表的列表。



列信息
在 USER_TAB_COLUMNS 视图中进行查看可查找关于表中各个列的详细信息。虽然 USER_TABLES 视图提供关于表名和存储空间的信息,但在 USER_TAB_COLUMNS 视图中可找到详细的列信息。
此视图包含以下信息:
列名
列数据类型
数据类型的长度
NUMBER 列的精度和小数位数
是否允许空值(即列上是否存在 NOT NULL 约束条件?)
默认值
注:为了查看 USER_TAB_COLUMNS 视图中列的完整列表和描述,请参阅《Oracle 数据库参考》中的“USER_TAB_COLUMNS”。


通过在 USER_TAB_COLUMNS 表中进行查询,可以查找关于列的详细信息,如列的名称、数据类型、数据类型长度、空值约束条件和默认值。
给出示例中显示了 EMPLOYEES 表的列、数据类型、数据长度和空值约束条件。请注意,此信息与 DESCRIBE 命令产生的输出相似。
要查看关于设置为“未使用”列的信息,请使用 USER_UNUSED_COL_TABS 字典视图。
注:数据字典中对象的名称均为大写。


约束条件信息
可以找到约束条件名称、约束条件类型、约束条件适用的表名称、检查约束条件的条件、外键约束条件信息、外键约束条件删除规则、约束条件状态以及其它类型的约束条件信息。
注:为了查看 USER_CONSTRAINTS 视图中列的完整列表和描述,请参阅《Oracle 数据库参考》中的“USER_CONSTRAINTS”。


USER_CONSTRAINTS:示例
在显示示例中,在 USER_CONSTRAINTS 视图中进行查询的目的是为了查找 EMPLOYEES 表上约束条件的名称、类型、检查条件、外键引用的唯一约束条件的名称、外键删除规则以及状态。
CONSTRAINT_TYPE 可以是:
C(表上的检查约束条件,或 NOT NULL)
P(主键)
U(唯一关键字)
R(引用完整性)
V(视图上有检查选项)
O(视图为只读)
DELETE_RULE 可以是:
CASCADE:如果删除父记录,还会删除子记录
SET NULL:如果删除父记录,请将各自的子记录更改为空值
NO ACTION:只有不存在子记录时才能删除父记录 


在 USER_CONS_COLUMNS 中进行查询
要查找约束条件适用的列的名称,请在 USER_CONS_COLUMNS 字典视图中进行查询。 此视图提供约束条件所有者的名称、约束条件名称、有约束条件的表、有约束条件的列的名称以及列或属性在对象定义中的原始位置。
注:一个约束条件可适用于多个列。
此外,可以编写 USER_CONSTRAINTS 和 USER_CONS_COLUMNS 之间的一个联接来创建两个表的自定义输出。



视图信息
创建视图之后,可以通过在名为 USER_VIEWS 的数据字典视图中进行查询来查看视图名称和视图定义。构成视图的 SELECT 语句的文本会存储在 LONG 列中。LENGTH 列指定了 SELECT 语句中的字符数。默认情况下,在 LONG 列中进行选择时,只会显示列值的前 80 个字符。要在 SQL*Plus 中看到更多的字符(多于 80 个),请使用 SET LONG 命令:
SET LONG 1000
在幻灯片示例中:
1.        显示了 USER_VIEWS 的各个列。请注意,只列出了其中一部分。
2.        对视图名称进行检索。
3.        显示字典中 EMP_DETAILS_VIEW 的 SELECT 语句。
使用视图访问数据
在使用视图访问数据时,Oracle Server 会执行以下操作:
在数据字典表 USER_VIEWS 中检索视图定义。
检查视图基表的访问权限。
将视图查询转换为对一个或多个基础基表的相应操作。即,从基表中检索数据或对 基表进行更新。


序列信息
在 USER_SEQUENCES 视图中描述了您拥有的所有序列。在创建序列时,可以指定要存储在 USER_SEQUENCES 视图中的标准。此视图有如下列:
SEQUENCE_NAME:序列的名称。
MIN_VALUE:序列的最小值。
MAX_VALUE:序列的最大值。
INCREMENT_BY:序列递增的增量。
CYCLE_FLAG:在达到限制时序列是否循环使用?
ORDER_FLAG:序列号是否是按顺序生成的?
CACHE_SIZE:要高速缓存的序列号的数量。
LAST_NUMBER:写入磁盘的最后一个序列号。如果序列使用高速缓存,则写入磁盘的编号是序列高速缓存中的最后一个编号。此编号可能大于用过的最后一个序列号。



确认序列
创建序列之后,就会在数据字典中记录序列。因为序列是一种数据库对象,所以可在 USER_OBJECTS 数据字典表中标识它。
还可以通过在 USER_SEQUENCES 数据字典视图中进行选择来确认序列的设置。
不增加序列值时查看下一个可用序列值
如果序列是使用 NOCACHE 创建的,则在 USER_SEQUENCES 表中进行查询就可以在不 增加序列值的情况下查看下一个可用序列值。



索引信息
在 USER_INDEXES 视图中进行查询可找到索引名、创建了索引的表名,还可确认索引 是否唯一。
注:为了查看 USER_INDEXES 视图中列的完整列表和描述,请参阅《Oracle Database Reference 11g Release 2 (11.1)》中的“USER_INDEXES”。



USER_INDEXES:示例
在幻灯片示例 a 中,在 USER_INDEXES 视图中进行查询的目的是为了查找索引名、创建了索引的表名,以及确认索引是否唯一。
在幻灯片示例 b 中,注意 Oracle Server 给为 PRIMARY KEY 列创建的索引提供了一个 通用名称。EMP_LIB 表是使用以下代码创建的:
CREATE TABLE EMP_LIB
   (book_id NUMBER(6)PRIMARY KEY ,     title VARCHAR2(25),
    category VARCHAR2(20));





在 USER_IND_COLUMNS 中进行查询
在 USER_IND_COLUMNS 字典视图中提供了各种信息,如索引名、索引表名、索引中列的名称以及索引中列的位置。
在幻灯片示例中,emp_test 表和 LNAME_IDX 索引是使用以下代码创建的:
CREATE TABLE emp_test AS SELECT * FROM employees;
CREATE INDEX LNAME_IDX ON emp_test(Last_Name);




同义词信息
在 USER_SYNONYMS 字典视图中描述了专用同义词(您所拥有的同义词)。
在这个视图进行查询可以查找您的同义词。在 ALL_SYNONYMS 中进行查询,可找到为您提供的所有同义词的名称以及这些同义词适用的对象。
此视图有如下列:
SYNONYM_NAME:同义词的名称
TABLE_OWNER:同义词引用的对象的所有者
TABLE_NAME:同义词引用的表或视图的名称
DB_LINK:数据库链接引用的名称(如果有)


在表中添加注释
使用 COMMENT 语句可为列、表、视图或快照添加最多 4,000 个字节的注释。注释会存储在数据字典中。可以在以下数据字典视图的 COMMENTS 列中查看注释:
ALL_COL_COMMENTS
USER_COL_COMMENTS
ALL_TAB_COMMENTS
USER_TAB_COMMENTS
语法 
COMMENT ON {TABLE table | COLUMN table.column}
    IS 'text';
在该语法中:
table        是表名称
column        是表中列的名称
text        是注释文本
将注释文本设置为空字符串 ('') 就可以从数据库中删除注释:
  COMMENT ON TABLE  employees IS '';

猜你喜欢

转载自chokee.iteye.com/blog/1974594