OBをトコトン極める

Oracle 表領域を占めるテーブルのサイズを確認しよう

  • 2017.12.27
  • 株式会社システムインテグレータ
Oracle 表領域を占めるテーブルのサイズを確認しよう

データベースを運用していると、「表領域がいっぱいになってしまった」「しかし、ディスクの制限でこれ以上表領域を拡張することができない」といった場面に遭遇することがあるかと思います。

p01.png

INSERT文の実行エラー】

p02.png

【表領域情報画面:使用率=100%

このような時は、不要なテーブルの削除やエクスポートによる外部保存、セグメントの縮小などが対応方法として挙げられます。
しかし、サイズの小さなテーブルを対処したところですぐに容量がいっぱいになってしまいます。
したがって、なるべくサイズの大きなテーブルについて対応を検討する必要があります。

 SI Object Browserを使用すると、テーブルとそのサイズを簡単に確認することができます。
今回はその方法をご紹介していきます。


前提条件

データベース管理者として作業を行いますので、今回の例ではログインするOracleユーザーにDBAロールを付与しています。ディクショナリビュー(DBA_*)や、動的パフォーマンスビュー(V$*)にアクセス可能なOracleユーザーにてご確認ください。

表領域画面を確認

テーブル(セグメント)のサイズを確認するには、表領域画面を参照します。
今回の例では、テーブルはすべてUSERS表領域に格納されていますので[表領域情報]画面からUSERS表領域を開きます。

p03.png

【表領域画面 – USERS(定義情報タブ)
 

 つづいて、上部の[格納オブジェクト]タブを開きます。

p04.png

【表領域画面 – USERS(格納オブジェクトタブ)
 

USERS表領域に格納されているオブジェクトの一覧に、セグメントサイズも併記されています。ヘッダ部分をクリックするとソートすることができますので、サイズの大きい順に並び変えれば検討が容易になります。

また、右クリックメニューから削除を行うことも可能です。[PURGE オプション]ONにしないと、ごみ箱(RECYCLEBIN)に残ってしまいますのでご注意ください。

p05.png

【テーブル削除の確認ダイアログ】

テーブル内の実際のデータサイズを確認

前項の冒頭で記載しましたが、表領域画面で確認できるサイズはセグメントのサイズです。実際に格納されているデータのサイズを確認する方法についてもご紹介いたします。

オブジェクトリストでテーブル一覧を表示することにより確認できるのですが、初期状態ではこの情報は表示されていません。

p06.png

【オブジェクトリスト テーブル一覧】

詳細情報を表示するためのオプションがありますので、そちらを設定してみましょう。
メイン画面上部の[ツール]から[オプション]を選択し、[オブジェクトリスト]タブの[オブジェクト固有の詳細情報を表示する]ONにすると、各オブジェクト固有の詳細情報を表示することが可能です。

p07.png

【オプション画面】

このオプションをONにして、詳細情報を表示した場合は以下のようになります。

p08.png

【オブジェクトリスト テーブル一覧(詳細情報表示)

表示対象がテーブルの場合は、統計情報に関連する情報が表示されます。
上図のように、統計情報を収集しているテーブルにおいて、[行数][REC]を確認できるようになりました。
この2点を掛け算することによって、そのテーブルに格納されているデータサイズを求めることができます。

セグメントサイズを縮小する

ここまででセグメントサイズとデータサイズを確認する方法を記載しましたが、その2つに乖離がある場合はどのような状態となっているのでしょうか。

p09.png

【セグメントとデータ】

 
青地の部分がセグメント、緑および黄色の部分がデータです。
上図のようにINSERTDELETEが行われるとHWM(High Water Mark:最高水位標)が上昇し、実際のデータ量と比べてセグメントのサイズが大きくなります。 

このセグメントサイズを縮小するには、テーブルの再作成などいくつか方法があります。2017/11/27にリリースされたSI Object Browser for Oracle Ver.14の新機能である「移動」ボタンもその方法の1つです。

p10.png

【テーブル画面 領域情報タブ】

テーブル画面の領域情報タブを開き、[表領域]ドロップダウンで格納する表領域を変更すると、このボタンが有効になります。
移動先の表領域に空き領域があること、移動中はテーブルへの排他ロックがかかることが前提となりますが、データを保持したままテーブルを再作成する形でセグメントサイズを縮小することができます。

まとめ

いかがでしたか?

 今回ご紹介したサイズの確認はSQLで実行することももちろん可能です。しかし、運用管理者としての立場からエンドユーザーに見せながら検討する、あるいは説明を行う場合があると思います。効率よく作業を行い、効果的に伝えることのできる手段として覚えておいていただければ幸いです。
ぜひ、ご活用ください!

SI Object Browser 製品カタログ

SI Object Browser 製品カタログ