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

 2017.12.27  株式会社システムインテグレータ

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

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

INSERT文の実行エラー】

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

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

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

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

テーブルとサイズの確認方法

前提条件

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

表領域画面を確認

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

【オプション画面】

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

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

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

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

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

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

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

【セグメントとデータ】

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

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

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

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

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

まとめ

いかがでしたか?

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


RELATED POST関連記事


RECENT POST「【OBトコ】OBの基本的な使い方」の最新記事


【OBトコ】OBの基本的な使い方

「データベース開発ツール」を選ぶポイントとは?

【OBトコ】OBの基本的な使い方

SI Object Browserの基本がマスターできるチュートリアル

【OBトコ】OBの基本的な使い方

データベース接続のエラーを起こさないように準備を確立する

【OBトコ】OBの基本的な使い方

データベースのデータをエクセルで編集してみよう

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