ORACLE系统表静态数据字典,常用user视图表及其常用用法

Oracle中的数据字典有静态和动态之分。静态数据字典主要是在用户访 问数据字典时不会发生改变的,但动态数据字典是依赖数据库运行的性能的,反映数据库运行的一些内在信息,所以在访问这类数据字典时往往不是一成不变的。

静态数据字典主要是由表和视图组成,应该注意的是,数据字典中的表是不能直接被访问的,但是可以访问数据字典中的视图。静态数据字典中的视图分为三类,它们分别由三个前缀够成:user_*、all_*、dba_*。
这里主要介绍user的常用视图及其用法。

user的常用视图有

  • user_objects 用户对象信息
  • user_source 数据库用户的所有资源对象信息
  • user_tables 用户的表对象信息
  • user_tab_columns 用户的表列信息
  • user_constraints 用户的对象约束信息
  • user_tab_privs 当前用户的对象权限信息
  • user_ind_columns 用户的索引对应的表列信息
  • user_clusters 用户的所有簇信息
  • user_clu_columns 用户的簇所包含的内容信息
  • user_cluster_hash_expressions 散列簇的信息

user_user

主要描述当前用户的信息,主要包括当前用户名、帐户id、帐户状态、表空间名、创建时间等。例如执行下列命令即可返回这些信息。

user_objects (用户对象信息)

主要描述当前用户拥有的所有对象的信息,对象包括表、视图、存储过程、触发器、包、索引、序列等。该视图比user_tables视图更加全面。

字段名 解释
object_name 对象名称
object_id 对象id
created 对象的创建时间
last_ddl_time 跟对象相关的(不一定是改变对象的结构,也可以是其他相关,如,如果此对象是表,则将该表的select权限赋给其他用户也会改变这个字段的值)最最近ddl操作的执行时间
timestamp 对象自身结构发生改变的时间,比如删除字段、添加字段等
object_type 对象类型
status 状态
……

user_tables (用户的表对象信息)

主要描述当前用户拥有的所有表的信息,主要包括表名、表空间名、簇名等。通过此视图可以清楚了解当前用户可以操作的表有哪些。

字段名 解释
TABLE_NAME 表名
TABLESPACE_NAME
CLUSTER_NAME
NUM_ROWS 表中的数据行数
STATUS
PCT_FREE
PCT_USED
INI_TRANS
MAX_TRANS
INITIAL_EXTENT
……

user_tab_comments(用户的表注释)

字段名 解释
table_name 表名或视图名
Table_type 类型(TABLE/VIEW)
comments 已经为该列输入的注释

user_col_comments (用户的表列信息)

字段名 解释
table_name 表名或视图名
column_name 列名
comments 已经为该列输入的注释

user_sys_privs (当前用户的系统权限信息)

user_tab_privs (当前用户的对象权限信息 )

该视图主要是存储当前用户下对所有表的权限信息。当前用户对该表的权限就可以清楚的知道,哪些操作可以执行,哪些操作不能执行。

user_col_privs 当前用户的表列权限信息

user_role_privs 当前用户的角色权限信息

user_indexes 用户的索引信息

user_ind_columns 用户的索引对应的表列信息

user_constraints 用户的对象约束信息

user_cons_columns 用户的约束对应的表列信息

user_constraints是表约束的视图,描述的是约束类型(constraint_type)是什么,属于哪些表(table_name),如果约束的类型为R(外键)的话,那么r_constraint_name字段存放的就是被引用主表中的主键约束名。
user_cons_columns是表约束字段的视图,说明表中的和约束相关的列参与了哪些约束。这些约束有主键约束,外键约束,索引约束.
两者可以通过(owner,constraint_name,table_name)关联

常用用法

利用数据字典,辅助开发和实施,是极好的~~~
偷懒必学,尤其是做数据迁移,批量处理数据或者数据表大范围整改时!

1、备份表注释

select 'comment on table '||table_name||' is 
'''||comments||''';' from user_tab_comments where 
comments is not null;

2、备份所有的字段注释

select 'comment on column '||table_name||'.'
||column_name||' is '''||comments||''';' 
from user_col_comments where comments is not null;

3、查询主键/外键

select c.constraint_name index_name,
       decode(t.constraint_type, 'P', 1, 0) type,
       c.table_name,
       c.column_name
  from user_constraints t, user_cons_columns c
 where c.constraint_name = t.constraint_name
   and c.column_name not like 'SYS_NC%$'
   and t.constraint_type in ('P', 'U');

其中constraint_type的值为P时 表示Primary Key,即主键,R表示Referential AKA Foreign Key,即外键,U表示Unique Key,即唯一键。

4、字段转为大写

select 'alter table ' || t.TABLE_NAME || ' rename column 
"' || column_name ||'" to "' || upper(column_name) || '";'
  from user_tab_columns t;

5、查看某对象的状态

select object_type,status from user_objects where object_name=upper('package1'); 

注意upper的使用,数据字典里的所有对象均为大写形式,而PL/SQL里不是大小写敏感的,所以在实际操作中一定要注意大小写匹配。

6、CLOB转BLOB

首先建一个clob字段名+_1的字段,用于替代

select 'alter table ' || table_name ||' add 
'||column_name||'_1 blob;' from user_tab_columns where 
data_type='CLOB';

然后通过一个转换方法把Clob字段的数据转为BLOB并且存到新建字段中

select 'update '||table_name||' set ' ||column_name || 
'_1=clob_to_blob('|| column_name ||');' from 
user_tab_columns where data_type='CLOB';

这时候可以把原来的clob字段删除了

select 'alter table ' || table_name ||' drop column 
'||column_name||';' from user_tab_columns where 
data_type='CLOB';

最后把新建字段改为原来字段一样的名字,即把_1去掉

select 'alter table '||table_name||' rename column 
'||column_name||' to '||replace(column_name,'_1','')||';'
 from user_tab_columns where data_type='BLOB';

7、查看当前用户的缺省表空间

select username,default_tablespace from user_users;

8、查看名称包含log字符的对象

SQL>select object_name,object_id from user_objects
where instr(object_name,'LOG')>0; 

后续使用时再不断补充……

你可能感兴趣的:(ORACLE,数据库)