Oracleでログインユーザが所有するテーブル一覧とその行数を取得するPL/SQLを作ってみた。
- table_count.sql
set echo off set heading off set pagesize 0 set linesize 10000 set trimout on set trimspool on set feedback off set serveroutput on size 1000000 col spool_file_name new_value spool_file_name for a100 select lower(username)||'_table_count_'|| to_char(sysdate,'YYYYMMDDHH24MISS') || '.csv' spool_file_name from user_users; spool &spool_file_name declare cursor cu is select segment_name from user_segments where segment_type = 'TABLE'; sql_stmt varchar2(200); cnt number(20); begin for rec in cu loop sql_stmt := 'select count(ROWID) from '||rec.segment_name; execute immediate sql_stmt into cnt; dbms_output.put_line(rec.segment_name||','||cnt); end loop; end; / spool off exit
実行してみるとこんな感じ。
$ sqlplus system/manager @table_count.sql $ head -3 system_table_count_20090630135106.csv LOGSTDBY$SKIP_SUPPORT,74 MVIEW$_ADV_WORKLOAD,0 MVIEW$_ADV_BASETABLE,0
system_table_count_20090630135106.csv にsystemユーザの全テーブルの行数が出力されている。
行数が多い順にソートしてみる。
$ sort -r -t, +1 system_table_count_20090630135106.csv > sorted.csv $ head -3 sorted.csv HELP,918 LOGSTDBY$SKIP_SUPPORT,74 MVIEW$_ADV_PARAMETERS,40