养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

Mysql Oracle DM数据库统计表数据量和条数

时间:2024-10-08 08:33:29

通过调用数据库内置表,视图,函数,存储过程及自定义函数等实现数据库表的数据量和数据条数统计

方法/步骤

1、MYSQL:selectTABLE_SCHEMA,TABLE_NAME,CONCAT(round(DATA_LENGTH/1024/1024,2),'MB')asTABLE_VOLUME,TABLE_ROWSfrominformation_schema.tableswhereTABLE_TYPE='BASETABLE'

2、oracle:如果不含大字段直接user_tables/dba_tables,如果有士候眨塄大字段使用user_segments/dba_segm髫潋啜缅ents通过块数计算数据量:to_char(round(s.blocks*8/1024,2),'fm990.0099')||'MB',可能不准,block大小可能会变datablock:oracle11g标准块:8k,支持2-32k,有blockheader、freespace、data组成--如果是分区表,segment_type='TABLEPARTITION'通过字节数计算数据量:to_char(round(s.BYTES/1024/1024.0,2),'fm99999999990.00')selectt.ownerTABLE_SCHEMA,TABLE_NAME,num_rows||''TABLE_ROWS,to_char(round(s.BYTES/1024/1024.0,2),'fm99999999990.00')TABLE_VOLUMEfromdba_tablestleftjoindba_segmentssont.table_name=s.segment_namewheres.segment_typelike'TABLE%'

3、DM(达梦数据库拘七呷憎):首先使用存储过程执行特定用户的表统计行数,否则NUM_ROWS为nullDBMS_STATS.GATHER_SCHEMA_STATS('ROOT媪青怍牙',100,TRUE,'FORALLTABLENUM_ROWSAUTO');使用和oracle一样的sql统计行数和数据量selectt.ownerTABLE_SCHEMA,TABLE_NAME,num_rows||''TABLE_ROWS,to_char(round(s.BYTES/1024/1024.0,2),'fm99999999990.00')TABLE_VOLUMEfromdba_tablestleftjoindba_segmentssont.table_name=s.segment_namewheres.segment_typelike'TABLE%'andt.owner='ROOT'通过内置函数获取表数据量selectto_char(TABLE_USED_PAGES(t.owner,TABLE_NAME)*to_number(page())/1024/1024.0,'fm99999999990.00')||'MB',--TABLE_USED_SPACE占用页的数目要用to_number(page())否则有可能会报数据溢出to_char(TABLE_USED_PAGES(t.owner,TABLE_NAME)*to_number(page())/1024/1024.0,'fm99999999990.00')||'MB'--TABLE_USED_PAGES实际使用页的数目fromdual;--M为单位selectt.ownerTABLE_SCHEMA,TABLE_NAME,TABLE_USED_PAGES(t.owner,TABLE_NAME)*to_number(page())/1024/1024.0||'MB'SJ_TABLE_VOLUME,--实际占用空间MBto_char(round(s.BYTES/1024/1024.0,2),'fm990.00')||'MB'TABLE_VOLUME--占用空间MBfromdba_tablestleftjoindba_segmentssont.table_name=s.segment_namewheres.segment_typelike'TABLE%'andt.owner='ROOT'通过自定义函数获取表的记录数创建获取表记录数的函数CREATEORREPLACEFUNCTIONROOT.GET_TABLE_COUNT(SCHEMA_NAMEINVARCHAR(50),TABLE_NAMEINVARCHAR(50))RETURNINTASNUM_ROWSINT;V_SQLVARCHAR2(300);BEGINV_SQL:='selectcount(*)from'||SCHEMA_NAME||'.'||TABLE_NAME;EXECUTEIMMEDIATEV_SQLINTONUM_ROWS;RETURNNUM_ROWS;END;使用函数获取num_rows,注意用户可能没有使用TABLE_SCHEMA的权限,部分系统内置selectt.ownerTABLE_SCHEMA,TABLE_NAME,ROOT.GET_TABLE_COUNT(t.owner,TABLE_NAME)TABLE_ROWS,--自定义函数ROOT.GET_TABLE_COUNTto_char(round(s.BYTES/1024/1024.0,2),'fm990.00')||'MB'TABLE_VOLUME--占用空间MBfromdba_tablestleftjoindba_segmentssont.table_name=s.segment_namewheres.segment_typelike'TABLE%'

© 一点知识