ヘッダーをスキップ
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス
11g リリース1(11.1)
E05686-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

119 DBMS_SPACE

DBMS_SPACEパッケージによって、セグメントの成長と領域要件を分析できます。

この章では、次の項目について説明します。


DBMS_SPACEの使用方法


セキュリティ・モデル

このパッケージの実行には、SYS権限が必要です。実行権限は、PUBLICに付与されます。このパッケージのサブプログラムは、コール元のセキュリティ下で実行されます。ユーザーには、オブジェクトに関するANALYZE権限が必要です。


データ構造

DBMS_SPACEパッケージでは、レコード・タイプと表タイプを定義します。

レコード・タイプ

ASA_RECO_ROWレコード・タイプ

表タイプ

ASA_RECO_ROW_TB表タイプ


ASA_RECO_ROWレコード・タイプ

このタイプには、ASA_RECOMMENDATIONSファンクションによって戻される個々の列の型が含まれています。

構文

TYPE asa_reco_row IS RECORD (
   tablespace_name       VARCHAR2(30),
   segment_owner         VARCHAR2(30),
   segment_name          VARCHAR2(30),   segment_type          VARCHAR2(18),
   partition_name        VARCHAR2(30),
   allocated_space       NUMBER,
   used_space            NUMBER,
   reclaimable_space     NUMBER,
   chain_rowexcess       NUMBER,
   recommendations       VARCHAR2(1000),
   c1                    VARCHAR2(1000),
   c2                    VARCHAR2(1000),
   c3                    VARCHAR2(1000),
   task_id               NUMBER,
   mesg_id               NUMBER);

属性

表119-1 ASA_RECO_ROWの属性

フィールド 説明

tablespace_name

オブジェクトを含む表領域の名前。

segment_owner

スキーマの名前。

segment_name

オブジェクト名。

segment_type

'TABLE'、'INDEXなどのセグメントのタイプ。

partition_name

パーティションの名前。

allocated_space

セグメントに割り当てる領域。

used_space

実際にセグメントに使用される領域。

reclaimable_space

セグメント内の再利用可能な空き領域。

chain_rowexcess

排除可能な余分な連鎖行のパーセント。

recommendations

このセグメントに対するリコメンデーションまたは検索結果。

c1

リコメンデーションに関連付けられたコマンド。

c2

リコメンデーションに関連付けられたコマンド。

c3

リコメンデーションに関連付けられたコマンド。

task_id

このセグメントを処理するアドバイザ・タスク。

mesg_id

リコメンデーションに対応するメッセージID。



ASA_RECO_ROW_TB表タイプ

構文

TYPE asa_reco_row_tb IS TABLE OF asa_reco_row;

DBMS_SPACEサブプログラムの要約

表119-2 DBMS_SPACEパッケージのサブプログラム

サブプログラム 説明

ASA_RECOMMENDATIONSファンクション


システムによって自動的に起動されているか、またはユーザーが手動で起動しているセグメント・アドバイザのリコメンデーションまたは検索結果を戻します。

CREATE_INDEX_COSTプロシージャ


既存の表に索引を作成するコストを判断します。

CREATE_TABLE_COSTプロシージャ


様々な属性を備えた表のサイズを判断します。

FREE_BLOCKSプロシージャ


オブジェクト(表、索引またはクラスタ)にある空きブロックに関する情報を戻します。

OBJECT_DEPENDENT_SEGMENTSファンクション


オブジェクトに関連付けられたセグメントのリストを戻します。

OBJECT_GROWTH_TRENDファンクション


特定の時点におけるオブジェクトの領域使用を、この表ファンクションの各行に示します。

SPACE_USAGEプロシージャ


自動セグメント領域管理セグメントでの空きブロックの情報を戻します。

UNUSED_SPACEプロシージャ


オブジェクト(表、索引またはクラスタ)にある未使用領域に関する情報を戻します。



ASA_RECOMMENDATIONSファンクション

このファンクションは、自動セグメント・アドバイザの保存された結果を使用してリコメンデーションを戻します。また、指定したオブジェクトに対する最新の実行結果を戻します。

構文

DBMS_SPACE.ASA_RECOMMENDATIONS (
   all_runs        IN    VARCHAR2 DEFAULT := TRUE,
   show_manual     IN    VARCHAR2 DEFAULT := TRUE,
   show_findings   IN    VARCHAR2 DEFAULT := FALSE)
 RETURN ASA_RECO_ROW_TB PIPELINED;

パラメータ

表119-3 ASA_RECOMMENDATIONSファンクションのパラメータ

パラメータ 説明

all_runs

TRUEに設定すると、自動セグメント・アドバイザのすべての実行に関するリコメンデーションまたは検索結果を戻します。FALSEに設定すると、LATEST実行の結果のみを戻します。LATESTは、セグメント・アドバイザを手動で起動している場合は影響がありません。自動アドバイザの場合のみに適用できます。

show_manual

TRUEに設定すると、手動による起動の結果のみを表示します。自動アドバイザの結果は除外されます。FALSEに設定すると、セグメント・アドバイザの手動による起動の結果は戻されません。

show_findings

リコメンデーションではなく、検索結果のみを表示します。



CREATE_INDEX_COSTプロシージャ

このプロシージャでは、既存の表に索引を作成するコストを判断します。索引の作成に使用するDDL文を入力します。このプロシージャは、索引の作成に必要な記憶域を出力します。

構文

DBMS_SPACE.CREATE_INDEX_COST (
   ddl             IN    VARCHAR2,
   used_bytes      OUT   NUMBER,
   alloc_bytes     OUT   NUMBER,
   plan_table      IN    VARCHAR2 DEFAULT NULL);

プラグマ

pragma restrict_references(create_index_cost,WNDS);

パラメータ

表119-4 CREATE_INDEX_COSTプロシージャのパラメータ

パラメータ 説明

ddl

索引作成のDDL文。

used_bytes

実際の索引データを示すバイト数。

alloc_bytes

表領域に作成されたときの索引のサイズ。

plan_table

使用するPLAN TABLE。デフォルトはNULLです。


使用上の注意


CREATE_TABLE_COSTプロシージャ

このプロシージャは、様々な属性を備えた表のサイズを判断するため、容量計画で使用されます。オブジェクトのサイズは、表領域の記憶域の属性、表領域のブロック・サイズなどによって大きく異なります。このプロシージャには、2つのオーバーロードがあります。

このプロシージャは、ディクショナリ管理表領域とローカル管理表領域のエクステント管理でも、手動および自動によるセグメント領域管理でも使用できます。

構文

DBMS_SPACE.CREATE_TABLE_COST (
   tablespace_name    IN VARCHAR2,
   avg_row_size       IN NUMBER,
   row_count          IN NUMBER,
   pct_free           IN NUMBER,
   used_bytes         OUT NUMBER,
   alloc_bytes        OUT NUMBER);

DBMS_SPACE.CREATE_TABLE_COST (
   tablespace_name    IN VARCHAR2,
   colinfos           IN CREATE_TABLE_COST_COLUMNS,
   row_count          IN NUMBER,
   pct_free           IN NUMBER,
   used_bytes         OUT NUMBER,
   alloc_bytes        OUT NUMBER);

CREATE TYPE create_table_cost_colinfo IS OBJECT (
   COL_TYPE   VARCHAR(200),
   COL_SIZE   NUMBER);

パラメータ

表119-5 CREATE_TABLE_COSTプロシージャのパラメータ

パラメータ 説明

tablespace_name

オブジェクトが作成される表領域。デフォルトはSYSTEM表領域です。

avg_row_size

表の予測平均行サイズ。

colinfos

列の説明。

row_count

表の予測平均行数。

pct_free

将来の更新で既存行の拡張に使用される、各ブロックにおける空き領域のパーセント。

used_bytes

ユーザー・データが使用する領域。

alloc_bytes

表領域のエクステント特性を考慮に入れたオブジェクトのサイズ。


使用上の注意

-- review the parameters
SELECT argument_name, data_type, type_owner, type_name
FROM all_arguments
WHERE object_name = 'CREATE_TABLE_COST'
AND overload = 2

-- examine the input parameter type
SELECT text
FROM dba_source
WHERE name = 'CREATE_TABLE_COST_COLUMNS';

-- drill down further into the input parameter type
SELECT text
FROM dba_source
WHERE name = 'create_table_cost_colinfo';

set serveroutput on

DECLARE
 ub NUMBER;
 ab NUMBER;
 cl sys.create_table_cost_columns;
BEGIN
  cl := sys.create_table_cost_columns( sys.create_table_cost_colinfo('NUMBER',10),
        sys.create_table_cost_colinfo('VARCHAR2',30),
        sys.create_table_cost_colinfo('VARCHAR2',30),
        sys.create_table_cost_colinfo('DATE',NULL));

  DBMS_SPACE.CREATE_TABLE_COST('SYSTEM',cl,100000,0,ub,ab);

  DBMS_OUTPUT.PUT_LINE('Used Bytes: ' || TO_CHAR(ub));
  DBMS_OUTPUT.PUT_LINE('Alloc Bytes: ' || TO_CHAR(ab));
END;
/

FREE_BLOCKSプロシージャ

このプロシージャは、オブジェクト(表、索引またはクラスタ)にある空きブロックに関する情報を戻します。 自動セグメント領域管理セグメントでの空きブロック情報の詳細は、「SPACE_USAGEプロシージャ」を参照してください。

構文

DBMS_SPACE.FREE_BLOCKS (
   segment_owner     IN  VARCHAR2,
   segment_name      IN  VARCHAR2,
   segment_type      IN  VARCHAR2,
   freelist_group_id IN  NUMBER,
   free_blks         OUT NUMBER,
   scan_limit        IN  NUMBER DEFAULT NULL,
   partition_name    IN  VARCHAR2 DEFAULT NULL);

プラグマ

pragma restrict_references(free_blocks,WNDS);

パラメータ

表119-6 FREE_BLOCKSプロシージャのパラメータ

パラメータ 説明

segment_owner

分析するセグメントのスキーマ名。

segment_name

分析するセグメントのセグメント名。

segment_type

分析するセグメントのタイプ(TABLEINDEXまたはCLUSTER):

  • TABLE

  • TABLE PARTITION

  • TABLE SUBPARTITION

  • INDEX

  • INDEX PARTITION

  • INDEX SUBPARTITION

  • CLUSTER

  • LOB

  • LOB PARTITION

  • LOB SUBPARTITION

freelist_group_id

空きリスト・サイズが計算される空きリスト・グループ(インスタンス)。

free_blks

指定されたグループに関する空きブロック数を戻します。

scan_limit

読み込む空きリストのブロックの最大数(オプション)。

空きリストにX個のブロックがあるかのみを確認する場合は、X個のスキャン制限を使用します。

partition_name

分析するセグメントのパーティション名。

これは、パーティション表についてのみ使用します。サブパーティションの名前は、パーティションの構成時に使用します。


次の例では、4つの空きリスト・グループを持つSCOTTスキーマにあるCLUSクラスタが使用されます。そして、CLUSの空きリスト・グループ3にあるブロック数が戻されます。

DBMS_SPACE.FREE_BLOCKS('SCOTT', 'CLUS', 'CLUSTER', 3, :free_blocks);

注意:

scan_limitが正数でない場合は、エラーが発生します。


OBJECT_DEPENDENT_SEGMENTSファンクション

この表ファンクションは、指定したオブジェクトに関連付けられたセグメントのリストを戻します。

構文

DBMS_SPACE.OBJECT_DEPENDENT_SEGMENTS(
   objowner    IN     VARCHAR2,
   objname     IN     VARCHAR2,
   partname    IN     VARCHAR2,
   objtype     IN     NUMBER)
  RETURN dependent_segments_table PIPELINED;

パラメータ

表119-7 OBJECT_DEPENDENT_SEGMENTSファンクションのパラメータ

パラメータ 説明

objowner

オブジェクトを含むスキーマ。

objname

オブジェクトの名前。

partname

パーティションの名前。

objtype

オブジェクトのタイプ:

  • OBJECT_TYPE_TABLE constant positive := 1;

  • OBJECT_TYPE_NESTED_TABLE constant positive := 2;

  • OBJECT_TYPE_INDEX constant positive := 3;

  • OBJECT_TYPE_CLUSTER constant positive := 4;

  • OBJECT_TYPE_TABLE_PARTITION constant positive := 7;

  • OBJECT_TYPE_INDEX_PARTITION constant positive := 8;

  • OBJECT_TYPE_TABLE_SUBPARTITION constant positive := 9;

  • OBJECT_TYPE_INDEX_SUBPARTITION constant positive := 10;

  • OBJECT_TYPE_MV constant positive := 13;

  • OBJECT_TYPE_MVLOG constant positive := 14;


戻り値

dependent_segments_tableの1行のコンテンツ:

TYPE object_dependent_segment IS RECORD (
   segment_owner      VARCHAR2(100),
   segment_name       VARCHAR2(100),
   segment_type       VARCHAR2(100),
   tablespace_name    VARCHAR2(100),
   partition_name     VARCHAR2(100),
   lob_column_name    VARCHAR2(100));

表119-8 OBJECT_DEPENDENT_SEGMENTタイプのパラメータ

パラメータ 説明

segment_owner

セグメントを含むスキーマ。

segment_name

セグメントの名前。

segmemnt_type

セグメントのタイプ(表、索引、LOBなど)。

tablespace_name

表領域の名前。

partition_name

パーティションの名前(オプション)。

lob_column_name

LOB列の名前(オプション)。



OBJECT_GROWTH_TRENDファンクション

これは表ファンクションです。特定の時点におけるオブジェクトの領域使用が、行ごとに記述された1行以上の形式で、結果が出力されます。領域使用の合計は、Automatic Workload Repository Facilities(AWRF)から取得するか、または現在の領域使用を計算しAWRFから取得した領域使用デルタと組み合せて取得します。

構文

DBMS_SPACE.OBJECT_GROWTH_TREND (
   object_owner           IN    VARCHAR2,
   object_name            IN    VARCHAR2,
   object_type            IN    VARCHAR2,
   partition_name         IN    VARCHAR2 DEFAULT NULL,
   start_time             IN    TIMESTAMP DEFAULT NULL,
   end_time               IN    TIMESTAMP DEFAULT NULL,
   interval               IN    DSINTERVAL_UNCONSTRAINED DEFAULT NULL,
   skip_interpolated      IN    VARCHAR2 DEFAULT 'FALSE',
   timeout_seconds        IN    NUMBER DEFAULT NULL,
   single_datapoint_flag  IN    VARCHAR2 DEFAULT 'TRUE')
 RETURN object_growth_trend_table PIPELINED;

パラメータ

表119-9 OBJECT_GROWTH_TRENDファンクションのパラメータ

パラメータ 説明

object_owner

オブジェクトを含むスキーマ。

object_name

オブジェクトの名前。

object_type

オブジェクトのタイプ。

partition_name

パーティションの名前。

start_time

この時間以降に生成された統計は、成長傾向の生成に使用されます。

end_time

この時間までに生成された統計は、成長傾向の生成に使用されます。

interval

サンプルを取得する間隔。

skip_interpolated

欠損値の補間をスキップするかどうかを指定します。

timeout_seconds

ファンクションのタイムアウト値(秒)。

single_data_point_flag

統計がない場合にセグメントのサンプルを取得するかどうかを指定します。


戻り値

OBJECT_GROWTH_TREND表ファンクションでは、出力を記述するためにobject_growth_trend_rowおよびobject_growth_trend_tableを使用します。

TYPE object_growth_trend_row IS RECORD(
   timepoint      TIMESTAMP,
   space_usage    NUMBER,
   space_alloc    NUMBER,
   quality        VARCHAR(20));

表119-10 OBJECT_GROWTH_TREND_ROWタイプのパラメータ

パラメータ 説明

timepoint

統計が記録された時間。

space_usage

データが使用する領域。

space_alloc

セグメントのサイズ。オーバーヘッドおよび未使用領域も含まれます。

quality

結果の品質。"GOOD"、"INTERPOLATED"、"PROJECTION"の値をとります。


TYPE object_growth_trend_table IS TABLE OF object_growth_trend_row;

SPACE_USAGEプロシージャ

このプロシージャの最初の形式は、セグメント最高水位標のデータ・ブロックの領域使用量を示します。LOBLOB PARTITIONSおよびLOB SUBPARTITIONSの使用量を計算できます。このプロシージャは、自動セグメント領域管理で作成された表領域でのみ使用します。ビットマップ・ブロック、セグメント・ヘッダーおよびエクステント・マップ・ブロックはこのプロシージャの対象外です。

このプロシージャの2番目の形式は、SECUREFILE LOB領域使用量に関する情報を戻します。具体的には、LOBセグメント内のすべてのSECUREFILE LOBによって使用されている、ブロック内の領域容量を戻します。LOB列によってアクティブに使用されている領域、保存期限が切れている空き領域および保存期限が切れていない空き領域が表示されます。

構文

DBMS_SPACE.SPACE_USAGE(
   segment_owner           IN  VARCHAR2,
   segment_name            IN  VARCHAR2,
   segment_type            IN  VARCHAR2,
   unformatted_blocks      OUT NUMBER,
   unformatted_bytes       OUT NUMBER,
   fs1_blocks              OUT NUMBER,
   fs1_bytes               OUT NUMBER,
   fs2_blocks              OUT NUMBER,
   fs2_bytes               OUT NUMBER,
   fs3_blocks              OUT NUMBER,
   fs3_bytes               OUT NUMBER,
   fs4_blocks              OUT NUMBER,
   fs4_bytes               OUT NUMBER,
   full_blocks             OUT NUMBER,
   full_bytes              OUT NUMBER,
   partition_name          IN  VARCHAR2 DEFAULT NULL);
DBMS_SPACE.SPACE_USAGE(
   segment_owner           IN    VARCHAR2,
   segment_name            IN    VARCHAR2,
   segment_type            IN    VARCHAR2,
   segment_size_blocks     OUT   NUMBER,
   segment_size_bytes      OUT   NUMBER,
   used_blocks             OUT   NUMBER,
   used_bytes              OUT   NUMBER,
   expired_blocks          OUT   NUMBER,
   expired_bytes           OUT   NUMBER,
   unexpired_blocks        OUT   NUMBER,
   unexpired_bytes         OUT   NUMBER,
   partition_name          IN    VARCHAR2 DEFAULT NULL);

パラメータ

表119-11 SPACE_USAGEプロシージャのパラメータ

パラメータ 説明

segment_owner

分析するセグメントのスキーマ名。

segment_name

分析するセグメントの名前。

partition_name

分析するセグメントのパーティション名。

segment_type

分析するセグメントのタイプ(TABLEINDEXまたはCLUSTER):

  • TABLE

  • TABLE PARTITION

  • TABLE SUBPARTITION

  • INDEX

  • INDEX PARTITION

  • INDEX SUBPARTITION

  • CLUSTER

  • LOB

  • LOB PARTITION

  • LOB SUBPARTITION

unformatted_blocks

未フォーマットのブロックの合計数。

unformatted bytes

未フォーマットのバイトの合計数。

fs1_blocks

空き領域が最低で0から25%のブロック数。

fs1_bytes

空き領域が最低で0から25%のバイト数。

fs2_blocks

空き領域が最低で25から50%のブロック数。

fs2_bytes

空き領域が最低で25から50%のバイト数。

fs3_blocks

空き領域が最低で50から75%のブロック数。

fs3_bytes

空き領域が最低で50から75%のバイト数。

fs4_blocks

空き領域が最低で75から100%のブロック数。

fs4_bytes

空き領域が最低で75から100%のバイト数。

ful1_blocks

セグメントが一杯になった場合のブロックの合計数。

full_bytes

セグメントが一杯になった場合のバイトの合計数。

segment_size_blocks

セグメントに割り当てられているブロックの数。

segment_size_bytes

セグメントに割り当てられているバイトの数。

used_blocks

アクティブなデータが含まれているLOBに割り当てられているブロックの数。

used_bytes

アクティブなデータが含まれているLOBに割り当てられているバイトの数。

expired_blocks

LOBでバージョン・データの保持に使用されている期限切れブロックの数。

expired_bytes

LOBでバージョン・データの保持に使用されている期限切れバイトの数。

unexpired_blocks

LOBでバージョン・データの保持に使用されている期限切れになっていないブロックの数。

unexpired_bytes

LOBでバージョン・データの保持に使用されている期限切れになっていないバイトの数。

partition_name

パーティションの名前(パーティションでない場合はNULL)。


variable unf number;
variable unfb number;
variable fs1 number;
variable fs1b number;
variable fs2 number;
variable fs2b number;
variable fs3 number;
variable fs3b number;
variable fs4 number;
variable fs4b number;
variable full number;
variable fullb number;

begin
dbms_space.space_usage('U1','T',
                        'TABLE',
                        :unf, :unfb,
                        :fs1, :fs1b,
                        :fs2, :fs2b,
                        :fs3, :fs3b,
                        :fs4, :fs4b,
                        :full, :fullb);
end;
/
print unf ;
print unfb ;
print fs4 ;
print fs4b;
print fs3 ;
print fs3b;
print fs2 ;
print fs2b;
print fs1 ;
print fs1b;
print full;
print fullb;

UNUSED_SPACEプロシージャ

このプロシージャは、オブジェクト(表、索引またはクラスタ)にある未使用領域に関する情報を戻します。

構文

DBMS_SPACE.UNUSED_SPACE (
   segment_owner              IN  VARCHAR2,
   segment_name               IN  VARCHAR2,
   segment_type               IN  VARCHAR2,
   total_blocks               OUT NUMBER,
   total_bytes                OUT NUMBER,
   unused_blocks              OUT NUMBER,
   unused_bytes               OUT NUMBER,
   last_used_extent_file_id   OUT NUMBER,
   last_used_extent_block_id  OUT NUMBER,
   last_used_block            OUT NUMBER,
   partition_name             IN  VARCHAR2 DEFAULT NULL);

パラメータ

表119-12 UNUSED_SPACEプロシージャのパラメータ

パラメータ 説明

segment_owner

分析するセグメントのスキーマ名。

segment_name

分析するセグメントのセグメント名。

segment_type

分析するセグメントのタイプ(TABLEINDEXまたはCLUSTER):

  • TABLE

  • TABLE PARTITION

  • TABLE SUBPARTITION

  • INDEX

  • INDEX PARTITION

  • INDEX SUBPARTITION

  • CLUSTER

  • LOB

  • LOB PARTITION

  • LOB SUBPARTITION

total_blocks

セグメント内のブロック合計数を戻します。

total_bytes

セグメント内のブロック合計数をバイト単位で戻します。

unused_blocks

未使用のブロック数を戻します。

unused_bytes

未使用のブロック数をバイト単位で戻します。

last_used_extent_file_id

データを含んだ最新エクステントのファイルIDを戻します。

last_used_extent_block_id

データを含んだ最新エクステントの開始ブロックIDを戻します。

last_used_block

データを含んだエクステント内の最終ブロックを戻します。

partition_name

分析するセグメントのパーティション名。

これは、パーティション表についてのみ使用します。サブパーティションの名前は、パーティションの構成時に使用します。


次の例では、必要なバインド変数を宣言してから実行します。

DBMS_SPACE.UNUSED_SPACE('SCOTT', 'EMP', 'TABLE', :total_blocks,
   :total_bytes,:unused_blocks, :unused_bytes, :lastextf,
   :last_extb, :lastusedblock);