字典顾名思义就像我们现实中用的字典一样,当某个字或词不懂时就去查字典.字典中装载着我们使用的语言信息.数据据也像一个字典一样装载着很多数据信息.
字典里存贮数据库结构信息.比如我们经常用到的关于数据库对象table,view,index,triger,sequence,synonym等的信息.
数据字典就是些表和视图,跟用户自己创建的表和视图没啥两样.只是它由系统创建,所以保存在SYS用户下.
数据字典的表都是以$结尾.
比如表tab$保存所有用户创建的表的信息,表user$保存用户名和密码信息.补充:为了安全起见,这表里的信息自然是非常重要的.即使是拥有
最高权限的SYS用户虽然能查看这个表,但表里的用户名密码都是用MD5加密的,所以看到的只是密文.因此理论上来说在Oracle里面是永远看不到用户名密码的.但是
我们有修改密码的仅限.可以在不知道之前密码的情况下重置密码.
不过我们基本上不会直接去访问表,而是访问根据表生成的视图.
视图有三种DBA_XXX, ALL_XXX,USER_XXX
以USER_为前缀的视图里有当前用户所拥有的对象的信息
以ALL_为前缀的视图里有当前用户所能访问的对象的信息,有些对象是属于其他用户,但你有访问权限.
以DBA_为前缀的视图里有数据库中所有对象的的信息.
很容易看到三者的关系.USER视图是ALL视图的子集,ALL视图是DBA视图的子集.
下面的讲解中我只以USER视图为例.因为USER视图里有的信息ALL视图,DBA视图里都会有.只要把视图前缀名改下就行.
1.表相关视图:
user_tables 有用户所有表的信息
user_all_tables 包含的信息比user_tables多一点点.就是包含对象表的信息,即表中有自定义对象类型的表.
user_tab_columns 用户的表列信息.例如要查找表arwen中所有列的信息SELECT * FROM user_tab_columns WHERE table_name='ARWEN';
2.视图相关视图:
user_views
3.索引相关视图
user_indexes(同义词IND) 用户的索引信息.
user_ind_columns 用户的索引对应的表列信息
4.约束条件相关视图
user_constraints 用户的对象约束信息 :如查找表arwen中有哪些约束条件:SELECT * FROM user_constraints WHERE table_name='ARWEN';
注意CONSTRAINT TYPE都是简写的n,u,p,f,c分别对应not null,unique,primary key,foreign key,check
user_cons_columns 用户的约束对应的表列信息
5.同义词相关视图:
user_synonym(同义词SYN)
6.序列相关视图:
user_sequence (同义词SEQ)
7.目录相关视图:
dba_directories (不管任何用户创建dir后貌似owner都是sys用户了.所以也不能用user_directories查找)
Oracle中如果要访问操作系统中的某个目录不能直接访问.必须要根据目录建立一个directory对象,然后用使用directory对象.
例如CREATE DIRECTORY temp_dir AS c:\temp;
8.触发器相关视图:
user_triggers
9.所有对象相关视图
user_catalog 当前用户所有表,视图,同义词,序列的信息
user_tables 当前用户所有表的信息
user_objects 有用户所有对象的信息.user_catalog相当于它的子集.
8.权限相关的视图
user_sys_privs 当前用户的系统权限信息 :比如创建表的权限啊,创建新用户的权限啊
user_tab_privs 当前用户的对象权限信息 :对其他用户的对象的读写执行权限
user_col_privs 除了可以赋予其他用户访问某个表的权限外,还可以更细一步赋予访问表中某一列的权限.这个视图包括自己赋予其他用户访问某列的权限和别人赋予自己访问某列的权限.
user_role_privs 当前用户的角色权限信息 每个角色有相应的一些权限.有时为简单的赋予权限,先创建一个角色然后添加相应权限.再把角色赋予给某些用户.
上面提到的视图名字还只是一小部分,已经是够难记住的了,如果是全部更没法记住了.不过不用担心,Oracle把数据字典所有视图的信息保存在一个叫DICTIONARY的视图中.它还有个同义词DICT.
它相当于是字典的字典了.它只有两列:table_name,comments.注意table_name不要顾名思义以前就是表名,实际上它是所有视图的名字,就是上面提到的以user_,all_,dba_为前缀的视图.而真正的表反而不包括在内.comments就是描述信息,说明那个视图干嘛用的.
如果你想查找跟table有关的信息,但不知道有哪些数据字典有表的信息.你就可以这样查SELECT * FROM DICTIONARY WHERE table_name LIKE '%TABLE%';这样查找的结果还是很多,你就真加个限定条件前缀USER_
SELECT * FROM DICTIONARY WHERE table_name LIKE '%USER_%TABLE%';
你会看到user_tables,接下来你再查找user_tables就可以了解跟表有关的信息了.
所以你只要记住DICT这个视图,再加上会在where语句中加些条件进行模糊查询就行了