仕事で書いたネタ。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の上限減らせば良かったとは帰宅途中に気付いたのでした。