171 DBMS_SPACE
171.1 DBMS_SPACEのセキュリティ・モデル
このパッケージの実行には、SYS
権限が必要です。実行権限は、PUBLIC
に付与されます。このパッケージのサブプログラムは、コール元のセキュリティ下で実行されます。ユーザーには、オブジェクトに関するANALYZE
権限が必要です。
171.2 DBMS_SPACEのデータ構造
DBMS_SPACE
パッケージでは、オブジェクト
・タイプ、レコード
・タイプおよび表
タイプを定義します。
オブジェクト・タイプ
レコード・タイプ
表タイプ
171.2.1 DBMS_SPACE CREATE_TABLE_COST_COLINFOオブジェクト・タイプ
このタイプは、表の列のデータ・タイプとサイズを記述します。
構文
TYPE create_table_cost_colinfo IS OBJECT( col_type VARCHAR(200), col_size NUMBER)
属性
表171-1 CREATE_TABLE_COST_COLINFOオブジェクト・タイプ
属性 | 説明 |
---|---|
|
列タイプ。 |
|
列サイズ。 |
171.2.2 DBMS_SPACE 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);
属性
表171-2 ASA_RECO_ROWの属性
フィールド | 説明 |
---|---|
|
オブジェクトを含む表領域の名前 |
|
スキーマの名前を指定します。 |
|
オブジェクト名 |
|
' |
|
パーティション名 |
|
セグメントに割り当てる領域。 |
|
実際にセグメントに使用される領域。 |
|
セグメント内の再利用可能な空き領域。 |
|
排除可能な余分な連鎖行のパーセント。 |
|
このセグメントに対するリコメンデーションまたは検索結果。 |
|
リコメンデーションに関連付けられたコマンド。 |
|
リコメンデーションに関連付けられたコマンド。 |
|
リコメンデーションに関連付けられたコマンド。 |
|
このセグメントを処理するアドバイザ・タスク。 |
|
リコメンデーションに対応するメッセージID。 |
171.3 DBMS_SPACEサブプログラムの要約
この表は、DBMS_SPACE
サブプログラムを示し、簡単に説明しています。
表171-3 DBMS_SPACEパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
システムによって自動的に起動されているか、またはユーザーが手動で起動しているセグメント・アドバイザのリコメンデーションまたは検索結果を戻します。 |
|
既存の表に索引を作成するコストを判断します。 |
|
様々な属性を備えた表のサイズを判断します。 |
|
オブジェクト(表、索引またはクラスタ)にある空きブロックに関する情報を戻します。 |
|
データファイルが削除可能かどうかを確認します。 |
|
オブジェクトに関連付けられたセグメントのリストを戻します。 |
|
特定の時点におけるオブジェクトの領域使用を、この表ファンクションの各行に示します。 |
|
自動セグメント領域管理セグメントでの空きブロックの情報を戻します。 |
|
オブジェクト(表、索引またはクラスタ)にある未使用領域に関する情報を戻します。 |
171.3.1 DBMS_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;
パラメータ
表171-4 ASA_RECOMMENDATIONSプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
すべての自動アドバイザ実行の結果、または最新の実行結果のみを返します。有効な値は、
|
|
このパラメータは、手動ジョブの結果を含めるかどうかを指定するために使用されます。
ただし、 有効な値は、 |
|
リコメンデーションではなく、検索結果のみを表示します。有効な値は、 |
表171-5 パラメータの使用方法
all_runs | show_manual | show_ findings | 結果 |
---|---|---|---|
TRUE |
TRUE |
TRUE |
自動アドバイザおよび手動タスクによるすべての結果。 |
TRUE |
TRUE |
FALSE |
自動アドバイザおよび手動タスクからのすべてのリコメンデーション。 |
TRUE |
FALSE |
TRUE |
自動アドバイザによるすべての結果。 |
TRUE |
FALSE |
FALSE |
すべての自動アドバイザ・タスクからのすべてのリコメンデーション。 |
FALSE |
TRUE |
TRUE |
なし |
FALSE |
TRUE |
FALSE |
なし |
FALSE |
FALSE |
TRUE |
最新の自動アドバイザ・タスクの結果。 |
FALSE |
FALSE |
FALSE |
最新の自動アドバイザ・タスクからのリコメンデーション。 |
171.3.2 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);
パラメータ
表171-6 CREATE_INDEX_COSTプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
索引作成のDDL文。 |
|
実際の索引データを示すバイト数。 |
|
表領域に作成されたときの索引のサイズ。 |
|
使用するPLAN TABLE。デフォルトは |
使用上のノート
-
索引が作成される表は、すでに存在している必要があります。
-
索引サイズの計算は、セグメント上で集められた統計情報に依存します。
-
直近に表の分析が行われている必要があります。
-
正しい統計情報がない場合は、このプロシージャでエラーが発生しなくても、結果が不正確になる可能性があります。
171.3.3 CREATE_TABLE_COSTプロシージャ
このプロシージャは、様々な属性を備えた表のサイズを判断するため、容量計画で使用されます。オブジェクトのサイズは、表領域の記憶域の属性、表領域のブロック・サイズなどによって大きく異なります。このプロシージャには、2つのオーバーロードがあります。
-
最初のバージョンでは、表の列情報を引数として使用して、表サイズを出力します。
-
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);
パラメータ
表171-7 CREATE_TABLE_COSTプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
オブジェクトが作成される表領域。デフォルトは |
|
表の予測平均行サイズ。 |
|
列の説明。 |
|
表の予測平均行数。 |
|
将来の更新で既存行の拡張に使用される、各ブロックにおける空き領域のパーセント。 |
|
ユーザー・データが使用する領域。 |
|
表領域のエクステント特性を考慮に入れたオブジェクトのサイズ。 |
使用上のノート
-
used_bytes
は、データが使用する実際のバイト数を表します。このサイズには、ブロック・メタデータ、PCTFREEなどによるオーバーヘッドが含まれます。 -
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; /
171.3.4 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);
パラメータ
表171-8 FREE_BLOCKSプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
分析するセグメントのスキーマ名。 |
|
分析するセグメントのセグメント名。 |
|
分析するセグメントのタイプ(
|
|
空きリスト・サイズが計算される空きリスト・グループ(インスタンス)。 |
|
指定されたグループに関する空きブロック数を戻します。 |
|
読み込む空きリストのブロックの最大数(オプション)。 空きリストにX個のブロックがあるかのみを確認する場合は、X個のスキャン制限を使用します。 |
|
分析するセグメントのパーティション名。 これは、パーティション表についてのみ使用します。サブパーティションの名前は、パーティションがコンポジットのときに使用します。 |
例
次の例では、4つの空きリスト・グループを持つ、SCOTT
スキーマにあるCLUS
クラスタが使用されます。CLUS
の空きリスト・グループ3にあるブロック数が戻されます。
DBMS_SPACE.FREE_BLOCKS('SCOTT', 'CLUS', 'CLUSTER', 3, :free_blocks);
ノート:
scan_limit
が正数でない場合は、エラーが発生します。
171.3.5 ISDATAFILEDROPPABLE_NAMEプロシージャ
このプロシージャは、データファイルが削除可能かどうかを確認します。実際にファイルを削除する前にこのプロシージャがコールされる場合があります。
構文
DBMS_SPACE.ISDATAFILEDROPPABLE_NAME ( filename IN VARCHAR2, value OUT NUMBER);
プラグマ
pragma restrict_references(free_blocks,WNDS);
パラメータ
表171-9 ISDATAFILEDROPPABLE_NAMEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ファイル名 |
|
ファイルが削除可能でない場合、値: |
例
DECLARE fname VARCHAR2(100); retval NUMBER;BEGIN SELECT file_name INTO fname FROM dba_data_files WHERE file_name like '%empty%';DBMS_SPACE.ISDATAFILEDROPPABLE_NAME(fname, retval);DBMS_OUTPUT.PUT_LINE(retval);END;/
171.3.6 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;
パラメータ
表171-10 OBJECT_DEPENDENT_SEGMENTSファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
オブジェクトを含むスキーマ。 |
|
オブジェクトの名前。 |
|
パーティションの名前。 |
|
オブジェクトのタイプ:
|
戻り値
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));
表171-11 OBJECT_DEPENDENT_SEGMENTタイプのパラメータ
パラメータ | 説明 |
---|---|
|
セグメントを含むスキーマ。 |
|
セグメントの名前。 |
|
セグメントのタイプ(表、索引、LOBなど)。 |
|
表領域の名前。 |
|
パーティションの名前(オプション)。 |
|
|
171.3.7 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;
パラメータ
表171-12 OBJECT_GROWTH_TRENDファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
オブジェクトを含むスキーマ。 |
|
オブジェクトの名前。 |
|
オブジェクトのタイプ。 |
|
パーティションの名前。 |
|
この時間以降に生成された統計は、成長傾向の生成に使用されます。 |
|
この時間までに生成された統計は、成長傾向の生成に使用されます。 |
|
サンプルを取得する間隔。 |
|
欠損値の補間をスキップするかどうかを指定します。 |
|
ファンクションのタイムアウト値(秒)。 |
|
統計がない場合にセグメントのサンプルを取得するかどうかを指定します。 |
戻り値
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));
表171-13 OBJECT_GROWTH_TREND_ROWタイプのパラメータ
パラメータ | 説明 |
---|---|
|
統計が記録された時間。 |
|
データが使用する領域。 |
|
セグメントのサイズ。オーバーヘッドおよび未使用領域も含まれます。 |
|
結果の品質。" |
TYPE object_growth_trend_table IS TABLE OF object_growth_trend_row;
171.3.8 SPACE_USAGEプロシージャ
このプロシージャには、領域使用を示すバリエーションが2つあります。
このプロシージャの最初の形式は、セグメント最高水位標のデータ・ブロックの領域使用量を示します。LOB
、LOB
PARTITIONS
およびLOB
SUBPARTITIONS
の使用量を計算できます。このプロシージャは、自動セグメント領域管理で作成された表領域でのみ使用できます。ビットマップ・ブロック、セグメント・ヘッダーおよびエクステント・マップ・ブロックはこのプロシージャの対象外です。このオーバーロードは、SECUREFILE
LOB
では使用できないことに注意してください。
ノート:
LOBセグメントの場合、full_blocks
およびunformatted_blocks
から戻されるブロックの数は、実際にはLOBセグメントのチャンクの数です。
このプロシージャの2番目の形式は、SECUREFILE
LOB
領域使用量に関する情報を戻します。これは、LOB
セグメント内のすべてのSECUREFILE
LOB
によって使用されている、ブロック内の領域容量を戻します。このプロシージャによって、LOB列によってアクティブに使用されている領域、保存期限が切れている空き領域および保存期限が切れていない空き領域が表示されます。このオーバーロードは、SECUREFILE
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);
パラメータ
表171-14 SPACE_USAGEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
分析するセグメントのスキーマ名。 |
|
分析するセグメントの名前。 |
|
分析するセグメントのパーティション名。 |
|
分析するセグメントのタイプ(
|
|
LOBセグメントの場合、unformatted_blocksから戻されるブロックの数は、実際にはLOBセグメントのチャンクの数です。 |
|
未フォーマットのバイトの合計数。 |
|
空き領域が最低で0から25%のブロック数。 |
|
空き領域が最低で0から25%のバイト数。 |
|
空き領域が最低で25から50%のブロック数。 |
|
空き領域が最低で25から50%のバイト数。 |
|
空き領域が最低で50から75%のブロック数。 |
|
空き領域が最低で50から75%のバイト数。 |
|
空き領域が最低で75から100%のブロック数。 |
|
空き領域が最低で75から100%のバイト数。 |
|
full_blocksから戻されるブロックの数は、実際にはLOBセグメントのチャンクの数です |
|
セグメントが一杯になった場合のバイトの合計数。 |
|
セグメントに割り当てられているブロックの数。 |
|
セグメントに割り当てられているバイトの数。 |
|
アクティブなデータが含まれているLOBに割り当てられているブロックの数。 |
|
アクティブなデータが含まれているLOBに割り当てられているバイトの数。 |
|
LOBでバージョン・データの保持に使用されている期限切れブロックの数。 |
|
LOBでバージョン・データの保持に使用されている期限切れバイトの数。 |
|
LOBでバージョン・データの保持に使用されている期限切れになっていないブロックの数。 |
|
LOBでバージョン・データの保持に使用されている期限切れになっていないバイトの数。 |
|
パーティションの名前(パーティションでない場合は |
例
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;
171.3.9 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);
パラメータ
表171-15 UNUSED_SPACEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
分析するセグメントのスキーマ名。 |
|
分析するセグメントのセグメント名。 |
|
分析するセグメントのタイプ(
|
|
セグメント内のブロック合計数を戻します。 |
|
セグメント内のブロック合計数をバイト単位で戻します。 |
|
未使用のブロック数を戻します。 |
|
未使用のブロック数をバイト単位で戻します。 |
|
データを含んだ最新エクステントのファイルIDを戻します。 |
|
データを含んだ最新エクステントの開始ブロックIDを戻します。 |
|
データを含んだエクステント内の最終ブロックを戻します。 |
|
分析するセグメントのパーティション名。 これは、パーティション表についてのみ使用します。サブパーティションの名前は、パーティションの構成時に使用します。 |
例
次の例では、必要なバインド変数を宣言してから実行します。
DBMS_SPACE.UNUSED_SPACE('SCOTT', 'EMP', 'TABLE', :total_blocks, :total_bytes,:unused_blocks, :unused_bytes, :lastextf, :last_extb, :lastusedblock);