oracle中的表的数据资产整理

思路: 利用oracle本身库中自带的数据字典视图进行关联并计算实现

利用到的数据字典视图:

user_col_comments 由当前用户下所有表字段及其备注组成;

user_tab_comments 由当前用户下所有表及其备注组成;

user_tables 包含丰富的表基本信息,此次用到了其中的num_rows(非实时)字段;

user_tab_columns 包含字段相关信息,此次用到了其中的data_type,data_length;

user_extents 记录该用户默认表空间下所有的表段和索引段上的表或视图的存储信息,此次用到了其中的BYTES字段(从此视图可以看出oracle中表存放方式为段,段由连续的区组成,以表名分组对bytes字段进行求和可以得到表容量);

注:
1. 用户视图(USER_开头):这些视图仅显示当前用户所拥有的对象的信息。例如,USER_TABLES视图将显示当前用户拥有的所有表的信息。

2. 所有者视图(ALL_开头):这些视图显示了当前用户可以访问的所有对象的信息,包括当前用户拥有的对象和其他用户拥有的对象。例如,ALL_TABLES视图将显示当前用户可以访问的所有表的信息,无论这些表是属于当前用户还是其他用户。

3. 数据库管理员视图(DBA_开头):这些视图显示了数据库中所有对象的信息,而不仅仅是当前用户可以访问的对象。只有具有DBA权限的用户才能访问这些视图。例如,DBA_TABLES视图将显示数据库中所有表的信息,无论这些表是属于哪个用户。


select t.TABLE_NAME, --表名
       t.COMMENTS as tab_com, --表备注
       t2.COLUMN_NAME, --字段名
       t2.COMMENTS, --字段备注
       t3.NUM_ROWS, /*行记录数,user_tables这里的行记录数并不是实时的,是最后一次分析的时刻时表的行记录数,
              表中LAST_ANALYZED字段可以看到最后一次分析时间,
              我们统计真实的行记录数需要用到oracle中自带的一个过程DBMS_STATS.GATHER_TABLE_STATS对表进行分析参数设置
              例如:exec  dbms_stats.gather_table_stats(ownname  =>   ' USERS ' ,tabname  =>   ' table_name ') ; 
              参考自https://blog.csdn.net/liberalliushahe/article/details/80749936
             */
       CASE
         WHEN t4.DATA_TYPE = 'VARCHAR2' THEN
          t4.DATA_TYPE || '(' || t4.DATA_LENGTH || ')'
         WHEN t4.DATA_TYPE = 'NUMBER' and DATA_PRECISION is not null THEN
          t4.DATA_TYPE || '(' || t4.DATA_PRECISION || ',' || t4.DATA_SCALE || ')'
         ELSE
          t4.DATA_TYPE
       END as DATA_TYPE, --数据类型及长度是通过user_tab_columns中DATA_LENGTH, DATA_PRECISION, DATA_SCALE三个字段判断拼接组成 这里举例用了number、varchar2、date类型
       t5.MB /*select SEGMENT_NAME, sum(BYTES) / 1024 / 1024 as MB from user_extents where SEGMENT_TYPE = 'TABLE' group by SEGMENT_NAME 
       利用user_extents中各表段的各区内存进行求和得到表容量大小,但是得到的是单位是比特,通过进制计算得到所需要的单位*/
  from user_col_comments t2
  join user_tab_comments t
    on t.table_name = t2.table_name
  join user_tables t3
    on t2.table_name = t3.table_name
  join user_tab_columns t4
    on t2.table_name = t4.table_name
   and t2.column_name = t4.column_name
  join (select SEGMENT_NAME, sum(BYTES) / 1024 / 1024 as MB
          from user_extents
         where SEGMENT_TYPE = 'TABLE'
         group by SEGMENT_NAME) t5
    on t2.table_name = t5.SEGMENT_NAME;
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值