怎么在Oracle中对用户中表的数据量进行统计
怎么在Oracle中对用户中表的数据量进行统计?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
要想统计用户下所有表的数据量,可以查看user_tables,此表里面是统计信息,当然这个可能不太准,要想非常精确,需要直接count表。下面的脚本有异常不中断,可以重复执行的特点。
createtablebk_count_tables(ownerVARCHAR2(30),table_nameVARCHAR2(30),part_colvarchar2(100),--分区字段row_snumber,gather_timedate);createindexind_bct_own_tableonbk_count_tables(owner,table_name);setserveroutputondeclarecursorc_cursorisselects.OWNER,s.TABLE_NAME,col.column_namepart_colfromdba_tabless,(selectowner,name,listagg(column_name,',')withingroup(orderbynull)column_namefrom(selectowner,name,column_namefromdba_part_key_columnswhereownerin('TEST')andobject_type='TABLE'andnamenotlike'BIN$%'unionallselectowner,name,column_namefromdba_subpart_key_columnswhereownerin('TEST')andobject_type='TABLE'andnamenotlike'BIN$%')groupbyowner,name)colwheres.OWNERin('TEST')andnotregexp_like(table_name,'[0-9]{3,8}')ands.table_namenotlike'%BAK%'ands.table_namenotlike'%A2K%'ands.table_namenotlike'BK%'ands.table_namenotlike'BIN%'ands.OWNER=col.owner(+)ands.TABLE_NAME=col.name(+)orderbys.TABLE_NAME;c_rowc_cursor%rowtype;t_rowsnumber;beginforc_rowinc_cursorloopbeginexecuteimmediate'selectcount(*)frombk_count_tableswhereowner=:1andTABLE_NAME=:2andrownum=1'intot_rowsusingc_row.OWNER,c_row.TABLE_NAME;if(t_rows=0)thenexecuteimmediate'selectcount(*)from"'||c_row.TABLE_NAME||'"'intot_rows;insertintobk_count_tablesvalues(c_row.OWNER,c_row.TABLE_NAME,c_row.part_col,t_rows,sysdate);commit;endif;EXCEPTIONWHENOTHERSTHENDBMS_OUTPUT.PUT_LINE(c_row.OWNER||'---'||c_row.TABLE_NAME);rollback;end;endloop;end;/
看完上述内容,你们掌握怎么在Oracle中对用户中表的数据量进行统计的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。