ORACLE数据字典.docx
《ORACLE数据字典.docx》由会员分享,可在线阅读,更多相关《ORACLE数据字典.docx(9页珍藏版)》请在冰豆网上搜索。
ORACLE数据字典
ORACLE数据字典
(一)数据字典概念
Oracle数据字典是由表和视图组成,存储有关数据库结构信息的一些数据库对象。
数据字典描述了实际数据是如何组织的。
比如一个表的创建者信息,创建时间信息,所属表空间信息,用户访问权限信息等。
对它们可以象处理其他数据库表或视图一样进行查询,但不能进行任何修改。
它们存放在SYSTEM表空间中,当用户在对数据库中的数据进行操作时遇到困难就可以访问数据字典来查看详细的信息。
数据字典不仅是数据库的核心,还是所有用户的一个重要工具,包括终端用户、程序员和数据库管理员。
因为数据字典的只读性,我们只能对它的表或视图使用SQL查询语句。
Oracle数据库字典通常是在创建和安装数据库时被创建的,Oracle数据字典是Oracle数据库系统工作的基础,没有数据字典的支持,Oracle数据库系统就不能进行任何工作。
数据字典中的表是不能直接被访问的,但是可以访问数据字典中的视图。
数据字典内容包括:
1,数据库中所有模式对象的信息,如表、视图、簇、索引、集群、同义词、序列、过程、方法、包、触发器等。
2,分配多少空间,当前使用了多少空间等。
3,列的缺省值。
4,约束信息的完整性。
5,Oracle用户的名字。
6,用户及角色被授予的权限。
7,用户访问或使用的审计信息。
8,其它产生的数据库信息。
(二)数据字典分类
数据字典按照存在的形式分为数据字典表和数据字典视图。
2.1数据字典表
数据字典表里的数据是Oracle系统存放的系统数据,而普通表存放的是用户的数据。
为了方便的区别这些表,这些表的名字都是用"$"结尾,这些表属于SYS用户。
数据字典表由$ORACLE_HOME/rdbms/admin/sql.bsq脚本创建,这个脚本里又调用了其他的脚本来创建这些数据字典表。
在那些创建脚本里有基表的创建SQL。
这些数据字典表,只有Oracle能够进行读写。
基表是存储有关数据库的信息的底层表。
基表是在任何Oracle数据库中首先创建的对象。
在使用CREATEDATABASE创建数据库时,只要Oracle服务器运行sql.bsq脚本,就会自动创建这些对象。
只有Oracle服务器才能对这些基表执行写入操作。
用户很少直接访问基表,因为其中的数据大多数都是以隐含格式存储的。
切勿使用DML命令直接更新基表,但AUD$表除外。
例如,IND$表就是一个基表,它包含有关数据库中的索引的信息。
SYS用户下的这些数据字典表,存放在system表空间下面,表名都用"$"结尾,为了便于用户对数据字典表的查询,Oracle对这些数据字典都分别建立了用户视图,这样即容易记住,还隐藏了数据字典表表之间的关系,Oracle针对这些对象的范围,分别为:
DBA:
所有方案中的视图(可以看到所有数据字典里的信息)
ALL:
用户可以访问的视图(可以看到所有这个用户可以看到的信息)
USER:
用户方案中的视图(仅仅是这个用户拥有的信息)
三者直接的关系:
Oracle为了便于汇总数据字典表的信息,把所有的数据字典都汇集到dictionary表里了,通过对这个表的查询,我们可以很方便的找到数据库提供的数据字典。
SQL>descdictionary
SQL>select*fromdictionarywheretable_name='USER_TABLES';
2.2数据字典视图
数据字典视图是基表的汇总,可以更有效地显示基表信息。
例如,在数据字典视图中,除了显示对象编号外还会使用对象名。
数据字典视图是在运行CREATEDATABASE命令之后使用
脚本:
$ORACLE_HOME/rdbms/admin/catalog.sql创建,该脚本也只是一个总的调用,在该脚本里由调用了其他的脚本。
在那些脚本里,可以看到视图的创建SQL。
这是因为这个脚本会创建动态视图,所以在做DB升级的时候,也需要执行这个脚本,重新创建视图。
数据字典视图分2类:
静态数据字典(静态性能视图)和动态数据字典(动态性能视图)
2.2.1静态性能视图
静态性能视图也称为静态数据字典。
主要是在用户访问数据字典时不会发生改变的,这类数据字典主要是由表和视图组成。
数据字典中的表是不能直接被访问的,但是可以访问数据字典中的视图。
静态数据字典中的视图分为三类,它们分别由三个前缀够成:
user_xxx、all_xxx、dba_xxx。
USER_XXX:
该视图存储了当前用户所拥有的对象的信息。
(即所有在该用户模式下的对象)
ALL_XXX:
该试图存储了当前用户能够访问的对象的信息,而不是当前用户拥有的对象。
(与user_xxx相比,all_xxx并不需要拥有该对象,只需要具有访问该对象的权限即可)
DBA_XXX:
该视图存储了数据库中所有对象的信息。
(前提是当前用户具有访问这些数据库的权限,一般来说必须具有管理员权限)
这些视图由SYS用户创建的,所以使用需要加上SYS,为了方便,Oracle为每个数据字典表的视图头建立了同名字的公共同义词(publicsynonyms).这样简单的处理就省去了写sys.的麻烦。
user_tablespaces:
表空间使用状态
SQL>selecttablespace_name,statusfromuser_tablespaces;
user_free_space:
查看用户表空间的剩余空间
SQL>selecttablespace_name,sum(bytes)/(1024*1024),sum(blocks)/(1024*1024)
2 fromuser_free_spacegroupbytablespace_name;
USER-TS-QUOTAS:
可以查看该用户的表空间的份额
dba_data_files:
数据文件数据字典
SQL>setline60
SQL>selectfile_namefromdba_data_files;
2.2.1.1用户
user_users:
主要描述当前用户的信息,主要包括当前用户名、帐户id、帐户状态、缺省表空间、创建时间等。
SQL>colUSERNAMEfora10
SQL>colDEFAULT_TABLESPACEfora15
SQL>selectusername,default_tablespace,createdfromuser_users;
user_role_privs:
查看当前用户的角色。
SQL>SELECT*FROMuser_role_privs;
比如下面是SYS的角色
SQL>select*fromuser_role_privs;部分截图
user_sys_privs:
查看当前用户的系统权限和表级权限
SQL>SELECT*FROMuser_sys_privs;
user_sys_privs:
下面是SYS用户的系统权限和表级权限
SQL>select*fromuser_sys_privs;部分截图
USER_TAB_PRIVS:
查看被授予者、授予者或对象所有者的权限,可以查询USER_TAB_PRIVS视图(用户表权限)。
除了Grantee列、Grantor列和Owner列外,此视图所包含的列还有Table_Name、Hierarchy、Privilege和一个标志(设置为YES或NO),该标志用来指出权限是否可以用withadminoption(Grantable)授予。
SQL>colGRANTEEfora10
SQL>colOWNERfora10
SQL>colTABLE_NAMEfora15
SQL>colGRANTORfora10
SQL>colPRIVILEGEfora30
SQL>select*fromuser_tab_privs;以下是scott用户的表权限(被授予者、授予者或对象所有者的权限)
USER-TAB-PRIVS-RECD:
可以查看该用户能访问其它用户的表、视图等的对象权限
SQL>colOWNERfora10
SQL>colTABLE_NAMEfora15
SQL>colGRANTORfora10
SQL>colPRIVILEGEfora20
SQL>select*fromuser_tab_privs_recd;
USER-TAB-PRIVS-MADE:
可以查看该用户授予其它用户的表、视图等的对象权限
SQL>select*fromuser_tab_privs_made;
2.2.1.2表
user_tables:
主要描述当前用户拥有的所有表的信息,主要包括表名、表空间名、簇名等。
通过此视图可以清楚了解当前用户可以操作的表有哪些。
SQL>selecttable_name,tablespace_namefromuser_tables;
查看放在ORACLE的内存区里的表
SQL>SELECTtable_name,cacheFROMuser_tablesWHEREINSTR(cache,'Y')>0;
User_tab:
查看用户有哪些对象。
SQL>select*fromtab;
查看名称包含log字符的表
SQL>SELECTobject_name,object_idFROMuser_objectsWHEREINSTR(object_name,'LOG')>0;
查看某表的创建时间
user_objects:
查询该用户拥有哪些数据库对象,对象包括表、视图、存储过程、触发器、包、索引、序列、JAVA文件等
SQL>SELECTobject_name,createdFROMuser_objectsWHEREobject_name=UPPER('&table_name');
user_objects:
查询该用户拥有哪些数据库对象,对象包括表、视图、存储过程、触发器、包、索引、序列、JAVA文件等。
SQL>colOBJECT_NAMEfora30
SQL>selectobject_namefromuser_objects;
all_objects:
查询某一用户下的所有表、过程、函数等信息。
SQL>selectowner,object_name,object_typefromall_objectswhereowner='SCOTT';
继续阅读