忘れかけのIT備忘録

今まで学んできた知識や小技、なるほど!と思ったことをメモするブログです。

sys.aud$の使用ブロック数を確認する

SELECT
  TABLE_NAME,
  NUM_ROWS,
  AVG_ROW_LEN,
  BLOCKS,
  EMPTY_BLOCKS,
  CASE AVG_ROW_LEN
    WHEN NULL THEN NULL
    WHEN 0 THEN 0
    ELSE (CEIL(NUM_ROWS / TRUNC(((BLOCK_SIZE - KCBH - UB4 - KTBBH - (INI_TRANS - 1) * KTBIT - KDBH) * (100 - PCT_FREE) / 100 - KDBT) / AVG_ROW_LEN)) + 1) END EST_BLOCKS
FROM
  DBA_TABLES
  ,(SELECT TYPE_SIZE KCBH FROM V$TYPE_SIZE WHERE TYPE = 'KCBH')  --ブロックヘッダー
  ,(SELECT TYPE_SIZE UB4 FROM V$TYPE_SIZE WHERE TYPE = 'UB4') --ブロックヘッダー
  ,(SELECT TYPE_SIZE KTBBH FROM V$TYPE_SIZE WHERE TYPE = 'KTBBH') --ブロックヘッダー
  ,(SELECT TYPE_SIZE KTBIT FROM V$TYPE_SIZE WHERE TYPE = 'KTBIT') --ブロックヘッダー
  ,(SELECT TYPE_SIZE KDBH FROM V$TYPE_SIZE WHERE TYPE = 'KDBH') --ブロックヘッダー
  ,(SELECT TYPE_SIZE KDBT FROM V$TYPE_SIZE WHERE TYPE = 'KDBT') --ブロックヘッダー
  ,(SELECT VALUE BLOCK_SIZE FROM V$PARAMETER WHERE NAME = 'db_block_size')
WHERE OWNER = 'SYS'
  AND TABLE_NAME = 'AUD$'
ORDER BY BLOCKS DESC;

【出力例】
TABLE_NAME ROW_NUMS AVG_ROW_LEN BLOCKS EMPTY_BLOCKS EST_BLOCKS
--------------- ------------- ----------------- --------- ------------- -------------
AUD$ 101 166 4765 0 4

NUM_ROWS      行数
AVG_ROW_LEN  平均行サイズ
BLOCKS              空きブロック数
EST_BLOCKS       行数と平均行サイズから算出した推定必要ブロック数