セグメントに割り当てられている領域の確認

ORACLE
20160121-1

ORACLEを運用していると、セグメント(テーブルやインデックス)に割り当てられている領域がどのくらいあるのか把握する必要があります。
格納しているテーブルスペースが溢れないかを定期的にチェックし、溢れる危険性がある時は、テーブルスペースの拡張、場合によっては物理的な記憶領域(HDDなど)を拡張する必要があります。

本記事では、セグメントに割り当てられている領域の取得方法を紹介します。

スポンサーリンク

割り当てられている領域の取得方法

セグメント(テーブルやインデックス)に割り当てられている領域の取得のために、静的データディクショナリビューのUSER_SEGMENTS、または、DBA_SEGMENTSを検索します。

USER_SEGMENTSは、接続しているユーザーに属するセグメントの情報を確認できます。DBA_SEGMENTSは、全セグメントの情報を確認できますが、DBAロールが付与されているユーザーでないと検索できません。
DBA_SEGMENTSは、SYSTEMやUNDOといったシステム系の領域情報も出力されるので、不要な場合は除外が必要です。

以下、具体的な検索SQLとサンプルの出力結果です。

SELECT SEGMENT_NAME                      -- セグメント名
      ,PARTITION_NAME                    -- パーティション名
      ,SEGMENT_TYPE                      -- セグメントのタイプ
      ,TABLESPACE_NAME                   -- テーブルスペース名
      ,ROUND(BYTES/1024/1024,2) MBYTES   -- サイズ(Mバイト単位)
FROM   DBA_SEGMENTS
;

SEGMENT_NAME    PARTITION_NAME    SEGMENT_TYPE     TABLESPACE_NAME   MBYTES
--------------- ----------------- ---------------- --------------- --------
TEST_TABLE1                       TABLE            TSDAT01          1307.19
TEST_TABLE2                       TABLE            TSDAT01          1307.19
TEST_TABLE3     TEST_TABLE3_01    TABLE PARTITION  TSDAT01           653.59
TEST_TABLE3     TEST_TABLE3_02    TABLE PARTITION  TSDAT01           653.59
PK_TEST_TABLE1                    INDEX            TSIDX01           304.12
PK_TEST_TABLE2                    INDEX            TSIDX01           304.12
PK_TEST_TABLE3  PK_TEST_TABLE3_01 INDEX PARTITION  TSIDX01           152.06
PK_TEST_TABLE3  PK_TEST_TABLE3_02 INDEX PARTITION  TSIDX01           152.06

SEGMENT_NAMEには、テーブル名やインデックス名が入ります。
PARTITION_NAMEには、パーティション化されているテーブル・インデックスの場合、パーティション名が入ります。
SEGMENT_TYPEにて、テーブルやインデックスの判断、パーティション化されているのかの判断が出来ます。
TABLESPACE_NAMEには、テーブルスペースが入ります。
BYTESには、割り当てられている領域サイズがバイト単位で入ります。

スポンサーリンク

注意点

このSQLで確認できるのは、あくまでも割り当てられた領域のサイズになります。実際にデータが格納されている領域のサイズではないことに注意が必要です。

例えば、データをDELETE文で大量に削除した場合、割り当てられた領域は解放されないため、差異が生じます。(DELETEでは、HWMもクリアされないため、検索時は削除前の領域全すべてを走査します)
また、割当を保持してテーブルをトランケートした場合(REUSE STRAGE)も差異が生じます。(こちらはHWMはクリアされる)

まとめ

セグメントに割り当てられている領域サイズは、静的データディクショナリビューのUSER_SEGMENTS、または、DBA_SEGMENTSを検索することで確認できます。
テーブルスペースサイズの決定や、運用中のテーブルスペースの残領域に問題がないかの検討で、上記ディクショナリビューを確認してみましょう。

タイトルとURLをコピーしました