仕事で書いたネタ。Oracleの表エクステントが上限に達してしまったという話があって、どうやって取得すればいいかと調べてみた。

COLUMN SEGMENT_NAME HEADING "SEGMENT_NAME" FORMAT a30
SELECT B.SEGMENT_NAME,B.SEGMENT_TYPE B.CNT FROM
(SELECT SEGMENT_NAME, SEGMENT_TYPE, COUNT(*) CNT FROM USER_EXTENTS
  GROUP BY SEGMENT_TYPE, SEGMENT_NAME) B,
(SELECT SEGMENT_NAME,SEGMENT_TYPE FROM DBA_SEGMENTS 
 WHERE (EXTENTS/MAX_EXTENTS)*100 > 70 AND MAX_EXTENTS !='0' 
 AND SEGMENT_TYPE IN ('INDEX', 'TABLE')) C
B.SEGMENT_NAME = C.SEGMENT_NAME;
(MAX_EXTENTS != 0を条件につけた)

実行したユーザのスキーマのうち、エクステントの上限70%になった表とINDEXの一覧を出します。これでspoolにだして、ファイルを管理者にメールすればいいんじゃない?というお話。みんなが考えないから自分の実になって楽しい。でもなぁ…これをバッチファイルにしたとして、バッチファイルにOracleのパスワードとユーザアカウントを書かなくてはならないのが腹立たしい。
SQL Serverだとタスクで登録したアカウントで勝手にやってくれるのになぁ。こういうところOracle好きじゃない。ま、仕方ないけれど。OracleにもNT認証をサポートするオプションがあるのは知っているのですが、標準じゃないとね。
ちなみに会社で評価したとき、とてもextentが70%もいっている表なんか無かったので、0.000001%位の閾値でやってみた(笑)。extentの上限減らせば良かったとは帰宅途中に気付いたのでした。