#garagekidztweetz

id:garage-kid@76whizkidz のライフログ・ブログ!

テーブル領域にあといくつエクステントが取れるか確認するための SQL

スポンサーリンク

DB: sysmaster に対して以下のような SQL を実行することで取得できる

  • あと何個テーブルスペースに extent を取れるかのみ取得する SQL
select {+ ordered, index(a, syspaghdridx) } -- necessary
c.tabname, -- the table or index
c.dbsname, -- the database
b.name, -- the dbspace
trunc(a.pg_frcnt / 8) frext -- the free extents
from sysmaster:sysdbspaces b,
sysmaster:syspaghdr a,
sysmaster:systabnames c
where 
a.pg_partnum = sysmaster:partaddr(b.dbsnum, 1)
and sysmaster:bitval(a.pg_flags, 2) = 1
and a.pg_nslots = 5
and c.partnum = sysmaster:partaddr(b.dbsnum, a.pg_pagenum)
order by 4 asc
  • 現在の extent の数を集計する SQL
select
st.dbsname[1,25] as dbname,
st.tabname[1,35] as dbobject,
count(*) num_of_extents,
trunc((pgh.pg_frcnt/8),0) additional_extents 
from  sysptnext ptn, sysptnhdr pth, syspaghdr pgh, systabnames st 
where 
st.partnum = ptn.pe_partnum 
and st.partnum = pth.partnum 
and pgh.pg_partnum = ((trunc(st.partnum/1048576,0)*1048576)+1)
and pgh.pg_pagenum = (st.partnum-(trunc(st.partnum/1048576,0)*1048576))
and st.dbsname not like "hoge%" -- 含めたくない領域名を指定する 
and st.dbsname not like ...
group by 1, 2, 4
order by 4, 1, 2