SQeeLおまけサンプルコード
最後にもう1つ便利なプログラムをご紹介しましょう。 このプログラムはテーブルスペース内のテーブルセグメントのフラグメント状況を表示します。 OBJECT_NAME に "==FREE==" と表示された部分は使用されていない領域です。
| [ sample02.eel ] |
// 変数の定義
global usr_pwd, tbsname, csr, I, ON, FI, BI, BY, BL
// ユーザ名の入力
usr_pwd = getopt("INPUT user/password=>")
// オラクルへの接続
connect ${usr_pwd}
if ERROR != 0
print('connect error ='&DBERRMSG)
exit
endif
// テーブルスペース名の入力
tbsname = getopt("INPUT TableSpace Name=>")
// SELECT 文
sql select
'========= FREE ========='
OBJECT_NAME, file_id, block_id, bytes, blocks
from dba_free_space where tablespace_name = upper('${tbsname}')
union select segment_name||decode(extent_id, 0, '', '('||extent_id||')')
OBJECT_NAME, file_id, block_id, bytes, blocks
from dba_extents
where tablespace_name = upper('${tbsname}')
order by 2,3
;
if ERROR != 0
print('sql error ='&DBERRMSG)
logout
exit
endif
// 選択されたデータの取り出し
csr = fetch(0)
if ERROR != 0
print('fetch error='&DBERRMSG)
logout
exit
endif
logout
// 結果の表示
ON = rpad('OBJECT_NAME', 25, ' ')
FI = lpad('FILE_ID', 8, ' ')
BI = lpad('BLOCK_ID', 9, ' ')
BY = lpad('BYTES', 12, ' ')
BL = lpad('BLOCKS', 7, ' ')
print(ON&FI&BI&BY&BL)
ON = rpad('?', 25, '-')
FI = rpad('|', 8, '-')
BI = rpad('|', 9, '-')
BY = rpad('|', 12, '-')
BL = rpad('|', 7, '-')
print(ON&FI&BI&BY&BL)
if count(csr) > 0 loop I=0; I < count(csr); I++
ON = rpad(csr[i]['OBJECT_NAME'], 25, ' ')
FI = lpad(csr[i]['FILE_ID'], 8, ' ')
BI = lpad(csr[i]['BLOCK_ID'], 9, ' ')
BY = lpad(csr[i]['BYTES'], 12, ' ')
BL = lpad(csr[i]['BLOCKS'], 7, ' ')
print(ON&FI&BI&BY&BL)
endloop
else
print('no selected')
endif
exit
|
