19 スキーマ・オブジェクトの領域の管理
スキーマ・オブジェクトの領域の管理には、表領域のアラートと領域の割当て、未使用の領域の再利用、未使用のオブジェクト記憶領域の削除、領域使用量の監視および容量計画などのタスクが含まれます。
- 表領域のアラートの管理
Oracle Databaseでは、使用可能な領域が少なくなると事前にアラートで通知されるため、表領域のディスク領域を管理するために役立ちます。 - 再開可能領域割当ての管理
大規模なデータベース処理を一時停止して後で再開できます。 - 未使用領域の再生
未使用領域を再利用できます。セグメント・アドバイザはOracle Databaseコンポーネントで、再利用可能な領域があるセグメントを識別します。 - 未使用オブジェクト記憶域の削除
DBMS_SPACE_ADMIN
パッケージにはDROP_EMPTY_SEGMENTS
プロシージャが含まれており、このプロシージャを使用すると、以前のリリースから移行された空の表およびパーティションのセグメントを削除できます。可能な場合には、索引セグメントなどの表の依存オブジェクトのセグメントもこれに含まれます。 - データ型の領域使用の理解
表またはその他のデータ構造を作成する際には、必要となる領域の大きさを把握しておく必要があります。領域要件は、データ型ごとに異なります。 - スキーマ・オブジェクトの領域使用情報の表示
Oracle Databaseには、スキーマ・オブジェクトの領域使用に関する情報を表示するためのデータ・ディクショナリ・ビューとPL/SQLパッケージが用意されています。 - データベース・オブジェクトの容量計画
Oracle Databaseでは、Cloud ControlまたはDBMS_SPACE
PL/SQLパッケージの2つの方法でデータベース・オブジェクトの容量を計画できます。DBMS_SPACE
パッケージには、新しいオブジェクトのサイズを予測したり、既存のデータベース・オブジェクトのサイズを監視できる3つのプロシージャがあります。
親トピック: スキーマ・オブジェクト
19.1 表領域のアラートの管理
Oracle Databaseでは、使用可能な領域が少なくなると事前にアラートで通知されるため、表領域のディスク領域を管理するのに役立ちます。
- 表領域のアラートの管理について
デフォルトで、警告およびクリティカルの2つのアラートしきい値が定義されています。警告のしきい値は、領域が残り少なくなり始める境界値です。クリティカルのしきい値は、即時に注意を喚起する必要のある深刻な境界値です。データベースは、両方のしきい値でアラートを発行します。 - アラートしきい値の設定
各表領域には、パーセント・フルのしきい値のみ、空き領域のしきい値のみ、または同時に両方のしきい値タイプを設定できます。どちらのタイプのしきい値も、0(ゼロ)に設定すると無効になります。 - アラートの表示
アラートを表示するには、Cloud Controlのデータベース・ホームページにアクセスし、「インシデントと問題」セクションを表示します。 - 制限事項
しきい値ベースのアラートには、次の制限があります。
親トピック: スキーマ・オブジェクトの領域の管理
19.1.1 表領域のアラートの管理について
デフォルトで、警告およびクリティカルの2つのアラートしきい値が定義されています。警告のしきい値は、領域が残り少なくなり始める境界値です。クリティカルのしきい値は、即時に注意を喚起する必要のある深刻な境界値です。データベースは、両方のしきい値でアラートを発行します。
ローカル管理表領域とディクショナリ管理表領域の両方に対してアラートしきい値を指定するには、次の2つの方法があります。
-
パーセント・フルによる方法
警告のしきい値とクリティカルのしきい値の両方について、使用済領域が合計領域の一定割合以上になるとアラートが発行されます。
-
空き領域(KB単位)による方法
警告のしきい値とクリティカルのしきい値の両方について、空き領域が一定容量(KB)未満になるとアラートが発行されます。空き領域のしきい値は、表領域が大規模な場合に便利です。
ローカル管理表領域のアラートはサーバーで生成されます。ディクショナリ管理表領域の場合は、Oracle Enterprise Manager Cloud Control (Cloud Control)がこの機能を提供します。詳細は、「サーバー生成アラートを使用したデータベースの監視」を参照してください。
新しい表領域には、次のようにアラートしきい値が割り当てられます。
-
ローカル管理表領域—ローカル管理表領域を新規作成すると、データベースに定義されているデフォルトのしきい値がその表領域に割り当てられます。新しく作成されたデータベースには、警告のしきい値に85%使用済、クリティカルのしきい値に97%使用済のデフォルトが割り当てられます。新しいデータベースに対する空き領域のしきい値のデフォルトは、両方ともゼロ(無効)です。これらのデータベースのデフォルトは変更可能で、その手順については後で説明します。
-
ディクショナリ管理表領域—ディクショナリ管理表領域を新規作成すると、Cloud Controlのメトリック・カテゴリ「表領域の空き領域(MB)(ディクショナリ管理)」および「表領域使用率(%)(ディクショナリ管理)」の「その他すべて」にリストされているしきい値が割り当てられます。これらの値は、「メトリックとポリシー設定」ページで変更できます。
ノート:
Oracle 9i以前からOracle Database 10g以降にアップグレードするデータベースでは、すべてのローカル管理表領域のアラートしきい値のデータベースのデフォルトは、0(ゼロ)に設定されます。この設定は、アラート・メカニズムを事実上使用禁止にして、新しく移行されたデータベースへの過剰なアラートを回避しています。
親トピック: 表領域のアラートの管理
19.1.2 アラートしきい値の設定
各表領域には、パーセント・フルのしきい値のみ、空き領域のしきい値のみ、または同時に両方のしきい値タイプを設定できます。どちらのタイプのしきい値も、0(ゼロ)に設定すると無効になります。
理想的な警告のしきい値は、クリティカルのしきい値が発行される前に問題を解決できる時間を考慮して、早めにアラートを発行する設定です。クリティカルのしきい値は、ただちに処理してサービスの損失を回避できるよう十分早めにアラートを発行するように設定します。
ローカル管理表領域のアラートしきい値を設定するには:
-
次のいずれかの操作を行います。
-
Cloud Controlの「表領域」ページを使用します。
表領域の領域使用量アラートしきい値の変更の詳細は、Cloud Controlのオンライン・ヘルプを参照してください。
-
DBMS_SERVER_ALERT.SET_THRESHOLD
パッケージ・プロシージャをコールします。詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
-
ディクショナリ管理表領域のアラートしきい値を設定するには:
-
Cloud Controlの「表領域」ページを使用します。
表領域の領域使用量アラートしきい値の変更の詳細は、Cloud Controlのオンライン・ヘルプを参照してください。
例 - Cloud Controlを使用したアラートしきい値の設定
表領域に対する領域使用率がしきい値に達した場合、Cloud Controlはアラートを受け取ります。領域使用率のアラートは2種類あり、「警告」は、表領域の使用量が低い場合に、「クリティカル」は、表領域がほぼ一杯でアクションがすぐに必要な場合に発行されます。
警告アラートとクリティカル・アラートの両方に、次の方法でアラートしきい値を指定できます。
-
使用領域ごと(%)
使用されている領域が全領域の一定の割合以上になった場合、アラートが発行されます。
-
空き領域ごと(MB)
空き領域がMB単位を下回る場合、アラートが発行されます。
空き領域のしきい値は、表領域が大きい場合ほど有用です。たとえば、10TBの表領域で限界のアラートの割合を全体の99%に設定すると、100GBの空き領域が切った場合データベースによってアラートが発行されることになります。通常、空き領域が100GBになったということは重大な状態ではないため、アラートは有効とはいえません。この表領域の場合、空き領域が5GBを切った場合に限界のアラートを発行するような設定の方が、空き領域のしきい値が有効に使用されています。
表領域に対する警告および限界のアラートの両方に関して、使用されている領域のしきい値または空き領域のしきい値のいずれか、または両方を有効にできます。
表領域の領域使用量アラートしきい値を変更するには:
-
データベース・ホームページに移動します。
-
「管理」メニューから、「記憶域」を選択し、「表領域」を選択します。
「表領域」ページが表示されます。
-
変更するしきい値を持つ表領域を選択し、「編集」をクリックします。
表領域の編集ページ、および一般サブページが表示されます。
-
ページ上部の「しきい値」タブをクリックし、しきい値サブページを表示します。
-
「使用済領域(%)」セクションで、次のいずれかを実行します。
-
デフォルトしきい値を許可します。
-
「しきい値の指定」を選択し、「警告(%)」のしきい値および「クリティカル(%)」のしきい値を入力します。
-
「しきい値の無効化」を選択し、すべてのしきい値を無効にします。
-
-
「空き領域(MB)」セクションで、次のいずれかを行います。
-
デフォルトしきい値を許可します。
-
「しきい値の指定」を選択し、「警告(MB)」のしきい値および「クリティカル(MB)」のしきい値を入力します。
-
「しきい値の無効化」を選択し、残りの空き領域のしきい値を無効にします。
-
-
「適用」をクリックします。
確認メッセージが表示されます。
例 - パッケージ・プロシージャを使用したアラートしきい値の設定
次の例は、USERS
表領域について空き領域のしきい値を10MB(警告)および2MB(クリティカル)に設定し、パーセント・フルのしきい値を無効にします。USERS
表領域はローカル管理の表領域です。
BEGIN DBMS_SERVER_ALERT.SET_THRESHOLD( metrics_id => DBMS_SERVER_ALERT.TABLESPACE_BYT_FREE, warning_operator => DBMS_SERVER_ALERT.OPERATOR_LE, warning_value => '10240', critical_operator => DBMS_SERVER_ALERT.OPERATOR_LE, critical_value => '2048', observation_period => 1, consecutive_occurrences => 1, instance_name => NULL, object_type => DBMS_SERVER_ALERT.OBJECT_TYPE_TABLESPACE, object_name => 'USERS'); DBMS_SERVER_ALERT.SET_THRESHOLD( metrics_id => DBMS_SERVER_ALERT.TABLESPACE_PCT_FULL, warning_operator => DBMS_SERVER_ALERT.OPERATOR_GT, warning_value => '0', critical_operator => DBMS_SERVER_ALERT.OPERATOR_GT, critical_value => '0', observation_period => 1, consecutive_occurrences => 1, instance_name => NULL, object_type => DBMS_SERVER_ALERT.OBJECT_TYPE_TABLESPACE, object_name => 'USERS'); END; /
ノート:
パーセント・フルのしきい値に0(ゼロ)以外の値を設定する場合は、「以上」演算子OPERATOR_GE
を使用します。
データベースのデフォルトしきい値への表領域のリストア
ローカル管理表領域のアラートしきい値に明示的に値を設定した後は、その値をDBMS_SERVER_ALERT.SET_THRESHOLD
を使用してNULL
に設定することで、データベースのデフォルト値に戻すことができます。
データベースのデフォルトしきい値の変更
ローカルに管理されている表領域のデータベースのデフォルトしきい値を変更するには、前の例に示されているようにDBMS_SERVER_ALERT.SET_THRESHOLD
を起動しますが、object_name
をNULL
に設定します。データベースのデフォルトを使用するすべての表領域で、新しいデフォルトに切り替わります。
親トピック: 表領域のアラートの管理
19.1.3 アラートの表示
アラートを表示するには、Cloud Controlのデータベース・ホームページにアクセスし、「インシデントと問題」セクションを表示します。
ローカル管理表領域のアラートは、DBA_OUTSTANDING_ALERTS
ビューを使用して表示することもできます。詳細は、「サーバー生成アラートのデータ・ディクショナリ・ビュー」を参照してください。
親トピック: 表領域のアラートの管理
19.1.4 制限事項
しきい値ベースのアラートには、いくつかの制限があります。
これらの制限には、次のものが含まれます。
-
アラートは、オフラインまたは読取り専用モードのローカル管理表領域については発行されません。ただし、それらの表領域が読取り/書込みモードまたは使用可能になると、そのアラート・システムは再アクティブ化されます。
-
表領域をオフライン化または読取り専用モードにする場合は、しきい値を0(ゼロ)に設定して、表領域に対するアラートを使用禁止にする必要があります。後で表領域を再度オンライン化または読取り/書込みモードにする場合は、しきい値を再設定してアラートを再び使用可能にできます。
関連項目:
-
サーバー生成アラートに関する一般的な詳細は、「サーバー生成アラートを使用したデータベースの監視」を参照してください
-
DBMS_SERVER_ALERT
パッケージのプロシージャとその使用方法の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。 -
表領域内で使用されていない領域を再生する方法は、「未使用領域の再生」を参照してください
-
リサイクル・ビン領域を再生する方法は、「リサイクル・ビン内のオブジェクトのパージ」を参照してください
親トピック: 表領域のアラートの管理
19.2 再開可能領域割当ての管理
大規模なデータベース処理を一時停止して後で再開できます。
- 再開可能領域割当ての概要
Oracle Databaseでは、領域割当てが失敗した場合に大規模なデータベース処理を一時停止して、後で再開するための方法が提供されています。そのため、Oracle Databaseサーバーがユーザーにエラーを返すかわりに対処措置を講じることができます。エラー条件が訂正されると、一時停止していた処理が自動的に再開します。この機能のことを、再開可能領域割当てと呼びます。また、影響を受ける文のことを、再開可能文と呼びます。 - 再開可能領域割当ての有効化および無効化について
SQL文を実行して特定の初期化パラメータを設定し、再開可能領域割当てを有効または無効にできます。 - LOGONトリガーを使用したデフォルト再開可能モードの設定
RESUMABLE_TIMEOUT
初期化パラメータを設定する以外に、デフォルトの再開可能モードを設定するもう1つの方法は、データベース・レベルのLOGON
トリガーを登録して、再開可能を有効化してタイムアウト間隔を設定するように、ユーザーのセッションを変更する方法です。 - 一時停止文の検出
再開可能文が一時停止するとき、クライアントにはエラーは通知されません。訂正処理を実行するため、Oracle Databaseではユーザーにエラーを通知して状況に関する情報を提供するかわりの手段が提供されています。 - 操作一時停止アラート
再開可能セッションが一時停止されると、操作を完了するためにリソースを割り当てる必要があるオブジェクトに対して、操作一時停止アラートが発行されます。 - 再開可能領域割当ての例: AFTER SUSPENDトリガーの登録
この例では、システム全体で有効なAFTER SUSPEND
トリガーを作成し、ユーザーSYS
としてデータベース・レベルで登録する方法を示します。
親トピック: スキーマ・オブジェクトの領域の管理
19.2.1 再開可能領域割当ての概要
Oracle Databaseでは、領域割当てが失敗した場合に大規模なデータベース処理を一時停止して、後で再開するための方法が提供されています。そのため、Oracle Databaseサーバーがユーザーにエラーを返すかわりに対処措置を講じることができます。エラー条件が訂正されると、一時停止していた処理が自動的に再開します。この機能のことを、再開可能領域割当てと呼びます。また、影響を受ける文のことを、再開可能文と呼びます。
- 再開可能領域割当ての動作
再開可能領域割当ての動作の概要を示します。 - 再開可能な操作
一部の操作は再開可能です。 - 訂正可能なエラー
一部のエラーは訂正可能です。 - 再開可能領域割当てと分散処理
分散環境で、ユーザーが再開可能領域割当てを有効または無効にした場合、またはDBAがRESUMABLE_TIMEOUT
初期化パラメータを変更した場合、その影響を受けるのはローカルのインスタンスです。RESUMABLE
はリモートで有効にできません。 - パラレル実行と再開可能領域割当て
パラレル実行では、パラレル実行サーバー・プロセスの1つで訂正可能なエラーが発生した場合、そのサーバー・プロセスの実行が一時停止します。
親トピック: 再開可能領域割当ての管理
19.2.1.1 再開可能領域割当ての動作
次に、再開可能領域割当ての動作の概要を示します。
-
文が再開可能モードで実行されるのは、その文のセッションが、次のいずれかの処理によって再開可能領域割当てに対応している場合のみです。
-
RESUMABLE_TIMEOUT初期化パラメータが0 (ゼロ)以外の値に設定されている場合に、ALTER SESSION ENABLE RESUMABLE
文が実行前にセッション内で発行された。 -
ALTER SESSION ENABLE RESUMABLE TIMEOUT
timeout_value
文が実行前にセッション内で発行され、timeout_value
が0 (ゼロ)以外の値である。
-
-
次のいずれかの条件が成立すると、再開可能文が一時停止します(非再開可能文では、これらの条件に対応するエラーが通知されます)。
-
領域不足条件
-
最大エクステント数到達条件
-
スペース割当制限超過条件。
-
-
再開可能文の実行が一時停止すると、ユーザー指定の操作の実行、エラーの記録および文の実行状態の問合せを行うメカニズムがただちに動作します。再開可能文が一時停止すると、次の処理が実行されます。
-
エラーがアラート・ログに記録されます。
-
一時停止された再開可能セッションのアラートが発行されます。
-
ユーザーが
AFTER SUSPEND
システム・イベントに対してトリガーを登録していた場合は、そのユーザー・トリガーが実行されます。ユーザー指定のPL/SQLプロシージャは、DBMS_RESUMABLE
パッケージとDBA_RESUMABLE
またはUSER_RESUMABLE
ビューを使用して、エラー・メッセージ・データにアクセスできます。
-
-
文が中断されると、自動的にトランザクションも中断されます。その結果、すべてのトランザクション・リソースが文の一時停止から再開までの間保持されます。
-
ユーザーの介入や他の問合せによってソート領域が解放されるなどの結果としてエラー条件が解決されると、一時停止していた文が自動的に実行を再開し、一時停止された再開可能セッションのアラートがクリアされます。
-
一時停止した文は、
DBMS_RESUMABLE.ABORT()
プロシージャを使用して、強制的に例外を発生できます。このプロシージャは、DBAまたは文を発行したユーザーがコールできます。 -
RESUMABLE_TIMEOUT
初期化パラメータまたはALTER
SESSION
ENABLE
RESUMABLE
TIMEOUT
文で指定された一時停止のタイムアウト間隔は、再開可能文に対応付けられています。タイムアウト間隔内にエラー条件が解決されない場合は、タイムアウト間隔の間一時停止していた再開可能文がリストアされ、ユーザーに例外が返されます。 -
再開可能文は、実行中に一時停止と再開を複数回繰り返すことができます。
親トピック: 再開可能領域割当ての概要
19.2.1.2 再開可能な操作
一部の操作は再開可能です。
再開可能な操作は、次のとおりです。
-
問合せ
一時領域(ソート領域)を使い果たした
SELECT
文は、再開可能な実行の候補になります。OCIの使用時は、OCIStmtExecute()
およびOCIStmtFetch()
の各コールが候補になります。 -
DML
INSERT
文、UPDATE
文およびDELETE
文が候補になります。それらを実行するために使用するインタフェースは何でもかまいません。OCI、PL/SQLまたは別のインタフェースを使用できます。また、外部表からのINSERT INTO...SELECT
も再開可能にできます。 -
インポート/エクスポート
SQL*Loaderについては、リカバリ可能なエラーの後に文が再開可能かどうかをコマンドライン・パラメータで制御します。
-
DDL
次の文が、再開可能な実行の候補になります。
-
CREATE
TABLE
...AS
SELECT
-
CREATE
INDEX
-
ALTER
INDEX
...REBUILD
-
ALTER
TABLE
...MOVE
PARTITION
-
ALTER
TABLE
...SPLIT
PARTITION
-
ALTER
INDEX
...REBUILD
PARTITION
-
ALTER
INDEX
...SPLIT
PARTITION
-
CREATE
MATERIALIZED
VIEW
-
CREATE
MATERIALIZED
VIEW
LOG
-
親トピック: 再開可能領域割当ての概要
19.2.1.3 訂正可能なエラー
一部のエラーは訂正可能です。
訂正可能なエラーには、次の3つのクラスがあります。
-
領域不足条件
データベースの操作によって、表領域内の表、索引、一時セグメント、UNDOセグメント、クラスタ、LOB、表パーティションまたは索引パーティション用のエクステントをこれ以上取得できません。たとえば、次のエラーはこのカテゴリに属します。
ORA-01653 unable to extend table ... in tablespace ... ORA-01654 unable to extend index ... in tablespace ...
-
最大エクステント数到達条件
表、索引、一時セグメント、UNDOセグメント、クラスタ、LOB、表パーティションまたは索引パーティション内のエクステント数が、オブジェクトで定義されている最大エクステント数に等しくなりました。たとえば、次のエラーはこのカテゴリに属します。
ORA-01631 max # extents ... reached in table ... ORA-01632 max # extents ... reached in index ...
-
スペース割当制限超過条件
ユーザーが自分に割り当てられている表領域内のスペース割当制限を超過しました。具体的には、次のエラーによって示されます。
ORA-01536 space quote exceeded for tablespace string
親トピック: 再開可能領域割当ての概要
19.2.1.4 再開可能領域割当てと分散処理
分散環境で、ユーザーが再開可能領域割当てを有効または無効にした場合、またはDBAがRESUMABLE_TIMEOUT
初期化パラメータを変更した場合、その影響を受けるのはローカルのインスタンスです。RESUMABLE
はリモートで有効にできません。
分散トランザクションで、リモート・インスタンスのセッションが一時停止されるのは、リモート・インスタンスがそのサイトでインスタンスまたはセッションに対してRESUMABLE
をすでに有効にしている場合のみです。
親トピック: 再開可能領域割当ての概要
19.2.1.5 パラレル実行と再開可能領域割当て
パラレル実行では、パラレル実行サーバー・プロセスの1つで訂正可能なエラーが発生した場合、そのサーバー・プロセスの実行が一時停止します。
他のパラレル実行サーバー・プロセスでは、エラーが発生するまで、または一時停止したサーバー・プロセスに(直接または間接に)ブロックされるまで、個々のタスクの実行が継続されます。訂正可能なエラーが解決すると、一時停止したプロセスが実行を再開し、パラレル操作の実行は継続されます。一時停止したプロセスが終了した場合、パラレル操作は終了し、ユーザーに対してエラーが返されます。
異なるパラレル実行プロセスで、1つ以上の訂正可能なエラーが発生することがあります。この結果、AFTER SUSPEND
トリガーが複数回、パラレルに発行される場合があります。また、あるパラレル実行サーバー・プロセスが一時停止中に他のパラレル実行サーバー・プロセスで訂正不可能なエラーが発生すると、一時停止していた文はただちに終了します。
パラレル実行については、すべてのパラレル実行コーディネータとサーバー・プロセスがDBA_RESUMABLE
またはUSER_RESUMABLE
ビューに独自のエントリを持っています。
親トピック: 再開可能領域割当ての概要
19.2.2 再開可能領域割当ての有効化および無効化
SQL文を実行して特定の初期化パラメータを設定し、再開可能領域割当てを有効または無効にできます。
- 再開可能領域割当ての有効化および無効化について
再開可能領域割当ては、再開可能モードを有効にしたセッションの中で文を実行するときのみ可能です。 - RESUMABLE_TIMEOUT初期化パラメータの設定
RESUMABLE_TIMEOUT
初期化パラメータを設定して、デフォルトのシステム全体のタイムアウト間隔を指定できます。 - ALTER SESSIONを使用した再開可能領域割当ての有効化と無効化
セッション内で、ユーザーはALTER SESSION SET
文を発行してRESUMABLE_TIMEOUT
初期化パラメータを設定し、再開可能領域割当てを有効にしてタイムアウト値を変更するか、または再開可能モードを無効にできます。
親トピック: 再開可能領域割当ての管理
19.2.2.1 再開可能領域割当ての有効化および無効化について
再開可能領域割当ては、再開可能モードを有効にしたセッションの中で文を実行するときのみ可能です。
再開可能領域割当てがセッションで有効になるのは、ALTER SESSION ENABLE RESUMABLE
文が実行され、そのセッションのRESUMABLE_TIMEOUT
初期化パラメータが0 (ゼロ)以外の値に設定されている場合です。RESUMABLE_TIMEOUT
初期化パラメータをシステム・レベルで設定すると、その設定は、タイムアウト値が指定されていないALTER SESSION ENABLE RESUMABLE
文のデフォルトになります。ALTER SESSION ENABLE RESUMABLE
文でタイムアウト値を指定すると、システム・デフォルトがオーバーライドされます。
ALTER SESSION ENABLE RESUMABLE
文を実行しても、次の場合はセッションで再開可能領域割当てが無効になります。:
-
セッションで
ALTER SESSION ENABLE RESUMABLE
文が実行されない場合。 -
セッションで
ALTER SESSION DISABLE RESUMABLE
文が実行された場合。 -
セッションで
ALTER SESSION ENABLE RESUMABLE
文が実行され、タイムアウト値が0 (ゼロ)の場合。
ノート:
一時停止した文はなんらかのシステム・リソースを保持している可能性があるため、ユーザーが再開可能領域割当てを有効にして、再開可能文を実行するには、RESUMABLE
システム権限が付与されている必要があります。
親トピック: 再開可能領域割当ての有効化および無効化
19.2.2.2 RESUMABLE_TIMEOUT初期化パラメータの設定
RESUMABLE_TIMEOUT
初期化パラメータを設定して、デフォルトのシステム全体のタイムアウト間隔を指定できます。
たとえば、初期化パラメータ・ファイルでRESUMABLE_TIMEOUT
パラメータを次のように設定すると、タイムアウト間隔は1時間に設定されます。
RESUMABLE_TIMEOUT = 3600
このパラメータが0 (ゼロ)に設定された場合、タイムアウト値を指定しないでALTER SESSION ENABLE RESUMABLE
文を実行するセッションでも、再開可能領域割当ては無効になります。
ALTER SYSTEM SET
文を使用して、このパラメータの値をシステム・レベルで変更することもできます。たとえば、次の文では、タイムアウト値を指定しないでALTER SESSION ENABLE RESUMABLE
文を実行するすべてのセッションに対して再開可能領域割当てを無効にします。
ALTER SYSTEM SET RESUMABLE_TIMEOUT=0;
親トピック: 再開可能領域割当ての有効化および無効化
19.2.2.3 ALTER SESSIONを使用した再開可能領域割当ての有効化と無効化
セッション内で、ユーザーはALTER SESSION SET
文を発行してRESUMABLE_TIMEOUT
初期化パラメータを設定し、再開可能領域割当てを有効にしてタイムアウト値を変更するか、または再開可能モードを無効にできます。
次のSQL文を使用して、デフォルトのシステムRESUMABLE_TIMEOUT
値でセッションの再開可能モードを有効化できます。
ALTER SESSION ENABLE RESUMABLE;
再開可能モードを無効化するには、次の文を使用します。
ALTER SESSION DISABLE RESUMABLE;
新しいセッションのデフォルトの再開可能モードは無効です。
タイムアウト間隔や、再開可能文の識別に使用する名前も指定できます。次の項では、各操作について説明します。
- タイムアウト間隔の指定
介入操作が発生しなかった場合に一時停止した文がエラーとなるタイムアウト間隔は、再開可能モードを有効化するときに指定できます。 - 再開可能文の命名
再開可能文は、名前で識別するように設定できます。
親トピック: 再開可能領域割当ての有効化および無効化
19.2.2.3.1 タイムアウト間隔の指定
介入操作が発生しなかった場合に一時停止した文がエラーになるタイムアウト間隔は、再開可能モードを有効化するときに指定できます。
次の文は、再開可能トランザクションが3600秒後にタイムアウトし、エラーになることを指定します。
ALTER SESSION ENABLE RESUMABLE TIMEOUT 3600;
TIMEOUT
の値は、別のALTER SESSION ENABLE RESUMABLE
文や他の手段によって変更されるまで、またはセッションが終了するまで有効です。RESUMABLE_TIMEOUT
初期化パラメータが設定されていない場合、ENABLE RESUMABLE TIMEOUT
句を使用して再開可能モードを有効にするときのデフォルトのタイムアウト間隔は7200秒になります。
関連項目:
再開可能領域割当てのタイムアウト間隔を変更するその他の方法の詳細は、「RESUMABLE_TIMEOUT初期化パラメータの設定」を参照してください
19.2.2.3.2 再開可能文の命名
再開可能文は、名前で識別するように設定できます。
次の文は、再開可能文に名前を割り当てます。
ALTER SESSION ENABLE RESUMABLE TIMEOUT 3600 NAME 'insert into table';
NAME
の値は、別のALTER SESSION ENABLE RESUMABLE
文によって変更されるまで、またはセッションが終了するまで有効です。NAME
のデフォルト値は、'User
username
(userid
), Session
sessionid
, Instance
instanceid
'です。
文の名前は、DBA_RESUMABLE
ビューおよびUSER_RESUMABLE
ビューで再開可能文を識別する際に使用します。
19.2.3 LOGONトリガーを使用したデフォルト再開可能モードの設定
RESUMABLE_TIMEOUT
初期化パラメータを設定する以外に、デフォルトの再開可能モードを設定するもう1つの方法は、データベース・レベルのLOGON
トリガーを登録して、再開可能を有効化してタイムアウト間隔を設定するように、ユーザーのセッションを変更する方法です。
ノート:
再開可能文のデフォルトのモードとタイムアウトを変更する登録済トリガーが複数ある場合、その結果は予測できません。これは、トリガーの起動順序がOracle Databaseで保証されていないためです。
親トピック: 再開可能領域割当ての管理
19.2.4 一時停止文の検出
再開可能文が一時停止するとき、クライアントにはエラーは通知されません。訂正処理を実行するため、Oracle Databaseではユーザーにエラーを通知して状況に関する情報を提供するかわりの手段が提供されています。
- ユーザーへの通知: AFTER SUSPENDシステム・イベントおよびトリガー
再開可能文で訂正可能なエラーが発生すると、システムは内部的にAFTER SUSPEND
システム・イベントを生成します。ユーザーは、このイベントに対するトリガーをデータベース・レベルとスキーマ・レベルの両方で登録できます。ユーザーがこのシステム・イベントを処理するトリガーを登録した場合、トリガーはSQL文が一時停止した後に実行されます。 - ビューを使用した一時停止文情報の取得
ビューのセットに対する問合せにより、再開可能文の状態に関する情報を取得できます。 - DBMS_RESUMABLEパッケージの使用方法
DBMS_RESUMABLE
パッケージは、再開可能領域割当ての管理に役立ちます。
親トピック: 再開可能領域割当ての管理
19.2.4.1 ユーザーへの通知: AFTER SUSPENDシステム・イベントおよびトリガー
再開可能文で訂正可能なエラーが発生すると、システムは内部的にAFTER SUSPEND
システム・イベントを生成します。ユーザーは、このイベントに対するトリガーをデータベース・レベルとスキーマ・レベルの両方で登録できます。ユーザーがこのシステム・イベントを処理するトリガーを登録した場合、トリガーはSQL文が一時停止した後に実行されます。
AFTER SUSPEND
トリガー内部で実行されたSQL文は、再開不可能であり、かつ自律型です。トリガー内部で開始されたトランザクションは、SYSTEM
ロールバック・セグメントを使用します。これらの条件が課されるのは、デッドロックを回避し、文と同じエラー条件に直面する可能性を少なくするためです。
ユーザーはUSER_RESUMABLE
ビュー、DBA_RESUMABLE
ビューまたはDBMS_RESUMABLE.SPACE_ERROR_INFO
ファンクションをトリガー内部で使用して、再開可能文に関する情報を取得できます。
また、トリガーではDBMS_RESUMABLE
パッケージをコールして、一時停止した文の終了や再開可能タイムアウト値の変更を実行できます。次の例では、DBMS_RESUMABLE
をコールしてタイムアウトを3時間に設定する、システム全体で有効なAFTER SUSPEND
トリガーを作成することによって、デフォルトのシステム・タイムアウトを変更します。
CREATE OR REPLACE TRIGGER resumable_default_timeout AFTER SUSPEND ON DATABASE BEGIN DBMS_RESUMABLE.SET_TIMEOUT(10800); END; /
関連項目:
トリガーとシステム・イベントの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。
親トピック: 一時停止文の検出
19.2.4.2 ビューを使用した一時停止文情報の取得
ビューのセットに対する問合せにより、再開可能文の状態に関する情報を取得できます。
ビュー | 説明 |
---|---|
これらのビューには、現在実行中または一時停止しているすべての再開可能文に関する行が含まれます。これらは、再開可能文の実行状態を監視したり、再開可能文に関する特定の情報を取得するために、DBA、 |
|
ある文が一時停止すると、その文を起動したセッションは待機状態になります。このビューには、「文が一時停止され、エラーのクリアを待機しています」という内容の |
親トピック: 一時停止文の検出
19.2.4.3 DBMS_RESUMABLEパッケージの使用方法
DBMS_RESUMABLE
パッケージは、再開可能領域割当ての管理に役立ちます。
次のプロシージャを起動できます。
プロシージャ | 説明 |
---|---|
|
このプロシージャは、一時停止された再開可能文を終了します。パラメータ Oracle Databaseでは、
|
|
このファンクションは、 |
|
このプロシージャは、 |
|
このファンクションは、現行セッションで設定されている再開可能領域割当ての現行の |
|
このプロシージャは、現行セッションに対して再開可能領域割当ての |
関連項目:
DBMS_RESUMABLE
パッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
親トピック: 一時停止文の検出
19.2.5 操作一時停止アラート
再開可能セッションが一時停止されると、操作を完了するためにリソースを割り当てる必要があるオブジェクトに対して、操作一時停止アラートが発行されます。
リソースが割り当てられて操作が完了すると、操作一時停止アラートはクリアされます。システム生成アラートの詳細は、「表領域のアラートの管理」を参照してください。
親トピック: 再開可能領域割当ての管理
19.2.6 再開可能領域割当ての例: AFTER SUSPENDトリガーの登録
この例では、システム全体で有効なAFTER SUSPEND
トリガーを作成し、ユーザーSYS
としてデータベース・レベルで登録する方法を示します。
任意のセッションで再開可能文が一時停止すると、このトリガーは次の2つのうちどちらかの処理を実行します。
-
UNDOセグメントが領域上限に達した場合は、メッセージがDBAに送られ、文が終了します。
-
他のリカバリ可能なエラーが発生した場合には、タイムアウト間隔が8時間にリセットされます。
この例で使用する文を次に示します。
CREATE OR REPLACE TRIGGER resumable_default AFTER SUSPEND ON DATABASE DECLARE /* declare transaction in this trigger is autonomous */ /* this is not required because transactions within a trigger are always autonomous */ PRAGMA AUTONOMOUS_TRANSACTION; cur_sid NUMBER; cur_inst NUMBER; errno NUMBER; err_type VARCHAR2; object_owner VARCHAR2; object_type VARCHAR2; table_space_name VARCHAR2; object_name VARCHAR2; sub_object_name VARCHAR2; error_txt VARCHAR2; msg_body VARCHAR2; ret_value BOOLEAN; mail_conn UTL_SMTP.CONNECTION; BEGIN -- Get session ID SELECT DISTINCT(SID) INTO cur_SID FROM V$MYSTAT; -- Get instance number cur_inst := userenv('instance'); -- Get space error information ret_value := DBMS_RESUMABLE.SPACE_ERROR_INFO(err_type,object_type,object_owner, table_space_name,object_name, sub_object_name); /* -- If the error is related to undo segments, log error, send email -- to DBA, and terminate the statement. Otherwise, set timeout to 8 hours. -- -- sys.rbs_error is a table which is to be -- created by a DBA manually and defined as -- (sql_text VARCHAR2(1000), error_msg VARCHAR2(4000), -- suspend_time DATE) */ IF OBJECT_TYPE = 'UNDO SEGMENT' THEN /* LOG ERROR */ INSERT INTO sys.rbs_error ( SELECT SQL_TEXT, ERROR_MSG, SUSPEND_TIME FROM DBMS_RESUMABLE WHERE SESSION_ID = cur_sid AND INSTANCE_ID = cur_inst ); SELECT ERROR_MSG INTO error_txt FROM DBMS_RESUMABLE WHERE SESSION_ID = cur_sid and INSTANCE_ID = cur_inst; -- Send email to receipient through UTL_SMTP package msg_body:='Subject: Space Error Occurred Space limit reached for undo segment ' || object_name || on ' || TO_CHAR(SYSDATE, 'Month dd, YYYY, HH:MIam') || '. Error message was ' || error_txt; mail_conn := UTL_SMTP.OPEN_CONNECTION('localhost', 25); UTL_SMTP.HELO(mail_conn, 'localhost'); UTL_SMTP.MAIL(mail_conn, 'sender@localhost'); UTL_SMTP.RCPT(mail_conn, 'recipient@localhost'); UTL_SMTP.DATA(mail_conn, msg_body); UTL_SMTP.QUIT(mail_conn); -- Terminate the statement DBMS_RESUMABLE.ABORT(cur_sid); ELSE -- Set timeout to 8 hours DBMS_RESUMABLE.SET_TIMEOUT(28800); END IF; /* commit autonomous transaction */ COMMIT; END; /
親トピック: 再開可能領域割当ての管理
19.3 未使用領域の再利用
未使用領域を再利用できます。セグメント・アドバイザはOracle Databaseコンポーネントで、再利用可能な領域があるセグメントを識別します。
- 未使用領域の再利用について
時間の経過とともに、表領域内のオブジェクトを更新および削除すると、新しいデータに対して個別に再利用するには不十分な小さい空き領域が作成されます。このような空き領域は、断片化された空き領域と呼ばれます。 - セグメント・アドバイザ
セグメント・アドバイザは、再生に使用できる領域があるセグメントを特定します。 - オンラインによるデータベース・セグメントの縮小
Oracle Databaseセグメントの最高水位標の下の断片化された空き領域を再生するには、オンラインによるセグメントの縮小を使用します。 - 未使用領域の割当て解除
未使用領域の割当てを解除する場合は、未使用の(最高水位標)データベース・セグメントの最後で未使用領域を解放して、表領域の他のセグメントで領域を使用できるようにします。
親トピック: スキーマ・オブジェクトの領域の管理
19.3.1 未使用領域の再利用について
時間の経過とともに、表領域内のオブジェクトを更新および削除すると、新しいデータに対して個別に再利用するには不十分な小さい空き領域が作成されます。このような空き領域は、断片化された空き領域と呼ばれます。
オブジェクトに断片化された空き領域があると、結果的に多くの無駄な領域が生じ、データベースのパフォーマンスに影響を与える場合があります。断片化を解消して領域を再生するには、オンラインによるセグメントの縮小を実行することをお薦めします。このプロセスは、最高水位標の下の断片化された空き領域を統合し、セグメントを圧縮します。圧縮すると最高水位標が移動し、その結果、最高水位標の上に新しい空き領域ができます。その後、この最高水位標よりも上の領域は、割当て解除されます。セグメントは、この操作の開始から終了までの大半で、問合せおよびDMLを使用でき、特別なディスク領域の割当ては不要です。
オンラインによるセグメントの縮小で利点を得られるセグメントを特定するには、セグメント・アドバイザを使用します。セグメント・アドバイザは、自動セグメント領域管理(ASSM)を備えたローカル管理表領域のセグメントに対してのみ使用できます。調査可能なセグメントの種類については、他にも制限があります。詳細は、「オンラインによるデータベース・セグメントの縮小」を参照してください。
再生可能な領域を含む表がオンラインによるセグメントの縮小に適していない場合、または領域の再生中に表の論理属性または物理属性を変更する場合は、セグメントの縮小にかわる手段として、表のオンライン再定義を使用できます。オンライン再定義は再編成とも呼ばれます。オンライン再定義は、オンラインによるセグメントの縮小とは異なり、別のディスク領域を割り当てる必要があります。詳細は、「表のオンライン再定義」を参照してください。
親トピック: 未使用領域の再利用
19.3.2 セグメント・アドバイザ
セグメント・アドバイザは、再生に使用できる領域があるセグメントを特定します。
- セグメント・アドバイザについて
セグメント・アドバイザは、自動ワークロード・リポジトリ(AWR)の使用状況と増加に関する統計情報を調べ、セグメントのデータをサンプリングして、分析を実行します。 - セグメント・アドバイザの使用
セグメント・アドバイザを使用するには、自動セグメント・アドバイザの結果を確認し、オプションで、手動でセグメント・アドバイザを実行します。 - 自動セグメント・アドバイザ
自動セグメント・アドバイザは、すべてのメンテナンス・ウィンドウ内で実行するように構成されている自動化メンテナンス・タスクです。 - 手動によるセグメント・アドバイザの実行
セグメント・アドバイザは、Cloud ControlまたはPL/SQLパッケージのプロシージャ・コールを使用して、いつでも手動で実行できます。 - セグメント・アドバイザの結果の表示
セグメント・アドバイザでは、様々な種類の結果(推奨事項、結果、処置、オブジェクト)が作成されます。 - 自動セグメント・アドバイザの構成
自動セグメント・アドバイザは自動化メンテナンス・タスクです。そのため、このタスクの実行時に変更を加える場合は、Cloud ControlまたはPL/SQLパッケージ・プロシージャ・コールを使用できます。適切なリソース・プランを変更することで、タスクに割り当てられているリソースを制御することもできます。 - 自動セグメント・アドバイザ情報の表示
ビューを問い合せて、自動セグメント・アドバイザに固有の情報を表示できます。
親トピック: 未使用領域の再利用
19.3.2.1 セグメント・アドバイザについて
セグメント・アドバイザは、自動ワークロード・リポジトリ(AWR)の使用状況と増加に関する統計情報を調べ、セグメントのデータをサンプリングして、分析を実行します。
メンテナンス・ウィンドウの間に自動化メンテナンス・タスクとして実行されるように構成されていますが、オンデマンド(手動)で実行することもできます。セグメント・アドバイザの自動化メンテナンス・タスクのことを、自動セグメント・アドバイザと呼びます。この情報は、容量を計画したり、縮小するセグメントを決定するときに使用できます。
セグメント・アドバイザは、次の種類のアドバイスを生成します。
-
セグメント・アドバイザにより、オブジェクトにかなりの量の空き領域があることが判断されると、オンラインによるセグメントの縮小が提案されます。自動セグメント領域管理のない表領域内の表の場合など、オブジェクトがセグメントの縮小に適さない表である場合は、オンラインによる表の再定義が提案されます。
-
高度な行圧縮方法を使用して表を圧縮することで効果が期待できるとセグメント・アドバイザが判断した場合、そのことを推奨事項として表示します。(自動セグメント・アドバイザの場合のみ。「自動セグメント・アドバイザ」を参照。)
-
セグメント・アドバイザにより、特定のしきい値を超える行連鎖のある表が検出されると、表に過剰な連鎖行があることが記録されます。
ノート:
セグメント・アドバイザによるフラグ設定の対象は、行を長くする更新によって生じた行連鎖のタイプのみです。
領域管理のアラートを受け取った場合、または領域の再生を決定した場合は、セグメント・アドバイザを開始してください。
親トピック: セグメント・アドバイザ
19.3.2.2 セグメント・アドバイザの使用
セグメント・アドバイザを使用するには、自動セグメント・アドバイザの結果を確認し、オプションで、手動でセグメント・アドバイザを実行します。
セグメント・アドバイザを使用するには:
親トピック: セグメント・アドバイザ
19.3.2.3 自動セグメント・アドバイザ
自動セグメント・アドバイザは、すべてのメンテナンス・ウィンドウ内で実行するように構成されている自動化メンテナンス・タスクです。
自動セグメント・アドバイザは、すべてのデータベース・オブジェクトを分析するわけではありません。かわりに、データベース統計を調査し、セグメント・データをサンプリングした後、次のような分析対象オブジェクトを選択します。
-
領域のクリティカルまたは警告のしきい値を超えた表領域
-
アクティビティが最も多いセグメント
-
増加率が最も高いセグメント
また、自動セグメント・アドバイザでは、高度な行圧縮方法で圧縮した場合に節約できる領域の大きさを判断するために、10MB以上で、索引が3つ以上存在する表が評価されます。
分析対象オブジェクトが選択されても、セグメント・アドバイザがオブジェクトを処理する前にメンテナンス・ウィンドウが終了する場合、そのオブジェクトは、自動セグメント・アドバイザの次回の実行に組み込まれます。
自動セグメント・アドバイザによって分析対象として選択された表領域とセグメントのセットは変更できません。ただし、自動セグメント・アドバイザのタスクの有効化または無効化、自動セグメント・アドバイザの実行予定回数、または自動化メンテナンス・タスクのシステム・リソース使用率は変更できます。詳細は、「自動セグメント・アドバイザの構成」を参照してください。
関連項目:
-
高度な行圧縮の詳細は、「表圧縮の使用」を参照してください
親トピック: セグメント・アドバイザ
19.3.2.4 手動によるセグメント・アドバイザの実行
セグメント・アドバイザは、Cloud ControlまたはPL/SQLパッケージのプロシージャ・コールを使用して、いつでも手動で実行できます。
セグメント・アドバイザを手動で実行する理由には、次のものがあります。
-
自動セグメント・アドバイザが選択しなかった表領域またはセグメントを分析するため。
-
個々の表領域またはセグメントを再度分析して、最新の推奨事項を入手するため。
セグメント・アドバイザには、3種類のレベルでアドバイスを要求できます。
-
セグメント・レベル—非パーティション表、パーティション表のパーティションまたはサブパーティション、索引、またはLOB列など、単一のセグメントに対してアドバイスが生成されます。
-
オブジェクト・レベル—表や索引など、オブジェクト全体についてアドバイスが生成されます。オブジェクトがパーティション化されている場合は、オブジェクトのすべてのパーティションに対してアドバイスが生成されます。また、Cloud Controlからセグメント・アドバイザを手動で実行する場合は、表の索引やLOBセグメントなど、オブジェクトの依存オブジェクトについてアドバイスを要求できます。
-
表領域レベル—表領域のすべてのセグメントに対してアドバイスが生成されます。
表19-2にあるOBJECT_TYPE
列は、アドバイスを要求できるオブジェクトのタイプを示しています。
- Cloud Controlを使用したセグメント・アドバイザの手動実行
セグメント・アドバイザは、Cloud Controlを使用して手動で実行できます - PL/SQLを使用したセグメント・アドバイザの手動実行
セグメント・アドバイザは、DBMS_ADVISOR
パッケージを使用して実行できます。
親トピック: セグメント・アドバイザ
19.3.2.4.1 Cloud Controlを使用したセグメント・アドバイザの手動実行
Cloud Controlを使用して、セグメント・アドバイザを手動で実行できます
Cloud Controlを使用してセグメント・アドバイザを手動で実行するには、OEM_ADVISOR
ロールが付与されている必要があります。セグメント・アドバイザを実行するには、次の2つの方法があります。
-
セグメント・アドバイザ・ウィザードの使用
この方法を使用すると、表領域レベルまたはオブジェクト・レベルでアドバイスを要求できます。オブジェクト・レベルでは、表、索引、表パーティションおよび索引パーティションについてアドバイスを要求できます。
-
スキーマ・オブジェクトを表示するページでの「セグメント・アドバイザの実行」コマンドの使用。
たとえば、(「スキーマ」メニューからアクセス可能な)「表」ページに表を表示する場合は、表を選択して「アクション」メニューから「セグメント・アドバイザの実行」を選択します。
この方法では、スキーマ・オブジェクトの依存オブジェクトをセグメント・アドバイザの実行対象に含めることができます。たとえば、表を選択して「セグメント・アドバイザの実行」を選択すると、パーティション、索引セグメント、LOBセグメントなど、表の依存オブジェクトが表示されます。依存オブジェクトを選択することで、そのオブジェクトを実行対象に指定できます。
両方の場合に、Cloud Controlは、Oracle Database Schedulerジョブとしてセグメント・アドバイザ・タスクを作成します。即座に実行するようにジョブをスケジュールすることも、スケジューラが提供する高度なスケジューリング機能を利用することもできます。
セグメント・アドバイザ・ウィザードを使用してセグメント・アドバイザを手動で実行するには:
-
データベース・ホームページにアクセスします。
-
「パフォーマンス」メニューから、「アドバイザ・ホーム」を選択します。
「アドバイザ・セントラル」ページが表示されます。(図19-2を参照してください。)
-
「アドバイザ」の下の「セグメント・アドバイザ」をクリックします。
セグメント・アドバイザ・ウィザードの最初のページが表示されます。
-
セグメント・アドバイザのジョブをスケジュールするウィザードの各ステップに従い、ウィザードの最終ページで「発行」をクリックします。
「アドバイザ・セントラル」ページが表示され、「結果」ヘッダーの下のリストの最初に新しいセグメント・アドバイザ・ジョブが表示されます。ジョブ・ステータスは、
SCHEDULED
またはRUNNING
になります。(自分のジョブが表示されない場合は、リストの上の検索フィールドを使用して表示してください。) -
ジョブのステータスをチェックします。
COMPLETED
でない場合は、ページの上部にある「リフレッシュ」コントロールを使用してページをリフレッシュします。(ブラウザのリフレッシュ・アイコンは使用しないでください。)ジョブ・ステータスが
COMPLETED
に変わった場合は、「選択」列をクリックしてジョブを選択し、「結果の表示」をクリックします。
関連項目:
スケジューラの高度なスケジューリング機能の詳細は、「Oracle Schedulerを使用したジョブのスケジューリング」を参照してください。
親トピック: 手動によるセグメント・アドバイザの実行
19.3.2.4.2 PL/SQLを使用したセグメント・アドバイザの手動実行
セグメント・アドバイザは、DBMS_ADVISOR
パッケージを使用して実行できます。
パッケージ・プロシージャを使用してセグメント・アドバイザのタスクを作成し、タスクの引数を設定してからタスクを実行します。そのためには、ADVISOR
権限が必要です。表19-1に、セグメント・アドバイザに関連するプロシージャを示します。これらのプロシージャの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
表19-1 セグメント・アドバイザに関連するDBMS_ADVISORパッケージ・プロシージャ
パッケージ・プロシージャ名 | 説明 |
---|---|
|
このプロシージャを使用して、セグメント・アドバイザのタスクを作成します。 |
|
このプロシージャを使用して、セグメント領域のアドバイス対象オブジェクトを識別します。このプロシージャのパラメータ値は、オブジェクト・タイプによって異なります。表19-2に、各オブジェクト・タイプのパラメータ値を示します。 ノート: IOTオーバーフロー・セグメントについてアドバイスを要求するには、 select table_name, iot_name, iot_type from dba_tables; |
|
このプロシージャを使用して、必要なセグメント・アドバイスを指定します。表19-3に、このプロシージャに関連する入力パラメータを示します。リストされていないパラメータは、セグメント・アドバイザでは使用されません。 |
|
このプロシージャを使用して、セグメント・アドバイザのタスクを実行します。 |
表19-2 DBMS_ADVISOR.CREATE_OBJECTの入力パラメータ
OBJECT_TYPE | ATTR1 | ATTR2 | ATTR3 | ATTR4 |
---|---|---|---|---|
|
|
|
|
未使用。 |
|
|
|
|
未使用。 |
|
|
|
|
未使用。 |
|
|
|
|
未使用。 |
|
|
|
|
未使用。 |
|
|
|
|
未使用。 |
|
|
|
|
未使用。 |
|
|
|
|
未使用。 |
|
|
|
|
未使用。 |
|
|
|
|
未使用。 |
表19-3 DBMS_ADVISOR.SET_TASK_PARAMETERの入力
入力パラメータ | 説明 | 使用可能な値 | デフォルト値 |
---|---|---|---|
|
セグメント・アドバイザを実行する時間制限を秒単位で指定します。 |
任意の秒数。 |
|
|
セグメント・アドバイザですべてのセグメントについて結果を生成するかどうかを指定します。 |
|
|
例
次の例は、DBMS_ADVISOR
プロシージャを使用して、サンプル表hr.employees
に対してセグメント・アドバイザを実行する方法を示しています。これらのパッケージ・プロシージャを実行するユーザーには、そのパッケージに対するオブジェクトのEXECUTE
権限、またはADVISOR
システム権限が必要です。
オブジェクト型TABLE
をDBMS_ADVISOR.CREATE_OBJECT
に渡すと、オブジェクト・レベルを要求したことになります。表がパーティション化されていない場合は、表セグメントが分析されます(索引またはLOBセグメントなどの依存セグメントは対象外です)。表がパーティション化されている場合は、すべての表パーティションが分析され、個別に結果と推奨事項が生成されます。
variable id number; begin declare name varchar2(100); descr varchar2(500); obj_id number; begin name:='Manual_Employees'; descr:='Segment Advisor Example'; dbms_advisor.create_task ( advisor_name => 'Segment Advisor', task_id => :id, task_name => name, task_desc => descr); dbms_advisor.create_object ( task_name => name, object_type => 'TABLE', attr1 => 'HR', attr2 => 'EMPLOYEES', attr3 => NULL, attr4 => NULL, attr5 => NULL, object_id => obj_id); dbms_advisor.set_task_parameter( task_name => name, parameter => 'recommend_all', value => 'TRUE'); dbms_advisor.execute_task(name); end; end; /
親トピック: 手動によるセグメント・アドバイザの実行
19.3.2.5 セグメント・アドバイザの結果の表示
セグメント・アドバイザでは、様々な種類の結果(推奨事項、結果、処置、オブジェクト)が作成されます。
次の方法で結果を表示できます。
-
Cloud Controlの使用
-
DBA_ADVISOR_*
ビューの問合せ -
DBMS_SPACE.ASA_RECOMMENDATIONS
ファンクションのコール
表19-4に、様々な種類の結果および関連するDBA_ADVISOR_*
ビューを示します。
表19-4 セグメント・アドバイザの結果の種類
結果の種類 | 関連するビュー | 説明 |
---|---|---|
推奨事項 |
セグメントの縮小、再編成または圧縮が効果的な場合は、そのセグメントに対して推奨事項が生成されます。表19-5に、生成される結果および推奨事項の例を示します。 |
|
結果 |
結果とは、分析対象のセグメントでセグメント・アドバイザが観察した内容のレポートです。結果には、分析対象の各セグメントの使用領域と空き領域の統計情報が含まれます。すべての結果が推奨事項になるわけではありません。(推奨事項は少数でも、多くの結果がある場合もあります。)セグメント・アドバイザをPL/SQLを使用して手動で実行する際に、 |
|
処置 |
すべての推奨事項は、セグメントの縮小、オンライン再定義(再編成)または圧縮の実施を提案する処置に関連付けられます。 |
|
オブジェクト |
すべての結果、推奨事項および処置はオブジェクトに関連付けられています。表領域やパーティション表の場合のように、複数のセグメントをセグメント・アドバイザが分析する場合、分析対象のセグメントごとに1つのエントリが |
- Cloud Controlを使用したセグメント・アドバイザの結果の表示
Cloud Controlでは、自動セグメント・アドバイザの実行とセグメント・アドバイザの手動実行の両方についてセグメント・アドバイザの結果を表示できます。 - DBA_ADVISOR_*ビューの問合せによるセグメント・アドバイザの結果の表示
DBA_ADVISOR_*
ビューを問い合せて、セグメント・アドバイザの結果を表示できます。 - DBMS_SPACE.ASA_RECOMMENDATIONSを使用したセグメント・アドバイザの結果の表示
DBMS_SPACE
パッケージのASA_RECOMMENDATIONS
プロシージャは、自動セグメント・アドバイザの実行およびセグメント・アドバイザの手動実行(オプション)に対する結果や推奨事項を含むネストされた表オブジェクトを返します。
関連項目:
DBMS_SPACE.ASA_RECOMMENDATIONS
ファンクションの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください
親トピック: セグメント・アドバイザ
19.3.2.5.1 Cloud Controlを使用したセグメント・アドバイザの結果の表示
Cloud Controlでは、自動セグメント・アドバイザの実行とセグメント・アドバイザの手動実行の両方についてセグメント・アドバイザの結果を表示できます。
次の種類の結果を表示できます。
-
すべての推奨事項(自動および手動によるセグメント・アドバイザの複数の実行)
-
自動セグメント・アドバイザの最新の実行での推奨事項
-
特定の実行での推奨事項
-
行連鎖の結果
自動セグメント・アドバイザの最新の実行で分析されたセグメントを一覧に表示することもできます。
Cloud Controlを使用してセグメント・アドバイザの結果を表示するには-すべての実行:
-
データベース・ホームページにアクセスします。
-
「管理」メニューから、「記憶域」を選択し、「セグメント・アドバイザ」を選択します。
「セグメント・アドバイザ推奨」ページが表示されます。推奨事項は、表領域別に編成されます。
-
推奨事項が提示されている場合は、表領域を選択し、次に「推奨事項の詳細」をクリックします。
「推奨事項の詳細」ページが表示されます。このページから推奨事項アクティビティ(縮小または再編成)を開始できます。
ノート:
エラーが発生するため、LOBを縮小または再編成しないでください。ヒント:
リストのエントリは、再生可能領域の大きい順にソートされています。列ヘッダーをクリックすると、ソート順を変更したり、昇順から降順に変更できます。
Cloud Controlを使用してセグメント・アドバイザの結果を表示するには-自動セグメント・アドバイザの最新の実行:
-
データベース・ホームページにアクセスします。
-
「管理」メニューから、「記憶域」を選択し、「セグメント・アドバイザ」を選択します。
「セグメント・アドバイザ推奨」ページが表示されます。推奨事項は、表領域別に編成されます。
「セグメント・アドバイザ推奨」ページが表示されます。
-
「表示」リストで、「最後の自動実行からの推奨事項」を選択します。
-
推奨事項が提示されている場合は、表領域を選択し、「推奨事項の詳細」をクリックします。
「推奨事項の詳細」ページが表示されます。このページから推奨事項アクティビティ(縮小または再編成)を開始できます。
ノート:
エラーが発生するため、LOBを縮小または再編成しないでください。Cloud Controlを使用してセグメント・アドバイザの結果を表示するには-特定の実行:
-
データベース・ホームページにアクセスします。
-
「パフォーマンス」メニューから、「アドバイザ・ホーム」を選択します。
「アドバイザ・セントラル」ページが表示されます。(図19-2を参照してください。)
-
タスクが「結果」ヘッダーの下のリストに表示されていることを確認します。タスクがない場合は、次のステップを実行します。
-
ページの「検索」セクションのアドバイザ・タイプで、「セグメント・アドバイザ」を選択します。
-
「アドバイザ実行」リストで、「すべて」または該当する期間を選択します。
-
(オプション)タスク名を入力します。
-
「実行」をクリックします。
「結果」セクションにセグメント・アドバイザのタスクが表示されます。
-
-
ジョブのステータスをチェックします。
COMPLETED
でない場合は、ページの上部にある「リフレッシュ」コントロールを使用してページをリフレッシュします。(ブラウザのリフレッシュ・アイコンは使用しないでください。) -
タスク名をクリックします。
セグメント・アドバイザのタスクのページに、表領域別に編成された推奨事項が表示されます。
-
リストで表領域を選択して、「推奨事項の詳細」をクリックします。
「推奨事項の詳細」ページが表示されます。このページから推奨事項アクティビティ(縮小または再編成)を開始できます。
行連鎖の結果を表示するには:
-
データベース・ホームページにアクセスします。
-
「管理」メニューから、「記憶域」を選択し、「セグメント・アドバイザ」を選択します。
「セグメント・アドバイザ推奨」ページが表示されます。推奨事項は、表領域別に編成されます。
「セグメント・アドバイザ推奨」ページが表示されます。
-
「関連リンク」ヘッダーの下にある「行チェーン分析」をクリックします。
「行チェーン分析」ページには、連鎖行があるすべてのセグメントと各連鎖行の割合が表示されます。
親トピック: セグメント・アドバイザの結果の表示
19.3.2.5.2 DBA_ADVISOR_*ビューの問合せによるセグメント・アドバイザの結果の表示
DBA_ADVISOR_*
ビューを問い合せて、セグメント・アドバイザの結果を表示できます。
表19-5のヘッダーには、セグメント・アドバイザからの出力が表示されるDBA_ADVISOR_*
ビューの列が示されます。これらのビューの詳細は、『Oracle Databaseリファレンス』を参照してください。この表に、考えられる出力の要約を示します。また、表19-2に、分析されたセグメントの情報が表示されるDBA_ADVISOR_OBJECTS
ビューの列を示します。
DBA_ADVISOR_*
ビューを問い合せる前に、DBA_ADVISOR_TASKS
のSTATUS
列を問い合せることで、セグメント・アドバイザのタスクが完了していることを確認できます。
select task_name, status from dba_advisor_tasks where owner = 'STEVE' and advisor_name = 'Segment Advisor'; TASK_NAME STATUS ------------------------------ ----------- Manual Employees COMPLETED
次の例は、ユーザーSTEVE
が発行したセグメント・アドバイザのすべての実行から結果を取得するために、DBA_ADVISOR_*
ビューを問い合せる方法を示しています。
select af.task_name, ao.attr2 segname, ao.attr3 partition, ao.type, af.message from dba_advisor_findings af, dba_advisor_objects ao where ao.task_id = af.task_id and ao.object_id = af.object_id and ao.owner = 'STEVE';
TASK_NAME SEGNAME PARTITION TYPE MESSAGE ------------------ ------------ --------------- ---------------- -------------------------- Manual_Employees EMPLOYEES TABLE The free space in the obje ct is less than 10MB. Manual_Salestable4 SALESTABLE4 SALESTABLE4_P1 TABLE PARTITION Perform shrink, estimated savings is 74444154 bytes. Manual_Salestable4 SALESTABLE4 SALESTABLE4_P2 TABLE PARTITION The free space in the obje ct is less than 10MB.
表19-5 セグメント・アドバイザの結果: 要約
DBA_ADVISOR_FINDINGSのMESSAGE列 | DBA_ADVISOR_FINDINGSのMORE_INFO列 | DBA_ADVISOR_RECOMMENDATIONSのBENEFIT_TYPE列 | DBA_ADVISOR_ACTIONSのATTR1列 |
---|---|---|---|
情報が不十分なため、推奨事項を作成できません。 |
- |
- |
- |
オブジェクト内の空き領域が10MB以下です。 |
割当領域: xxx: 使用領域: xxx: 再利用可能領域 : xxx |
- |
- |
オブジェクト内には空き領域がありますが、...のため縮小できません。 |
割当領域: xxx: 使用領域: xxx: 再利用可能領域 : xxx |
- |
- |
オブジェクト内の空き領域は前回のエクステントのサイズ未満です。 |
割当領域: xxx: 使用領域: xxx: 再利用可能領域 : xxx |
- |
- |
xxxバイトの節約が予測されるため、縮小を実行してください。 |
割当領域: xxx: 使用領域: xxx: 再利用可能領域 : xxx |
xxxバイトの節約が予測されるため、縮小を実行してください。 |
実行するコマンド。たとえば: |
表schema.tableの行移動を有効にして縮小を実行してください。xxxバイトの節約が予測されるためです。 |
割当領域: xxx: 使用領域: xxx: 再利用可能領域 : xxx |
表schema.tableの行移動を有効にして縮小を実行してください。xxxバイトの節約が予測されるためです。 |
実行するコマンド。たとえば: |
オブジェクトobjectの再編成を実行してください。xxxバイトの節約が予測されるためです。 (ノート: これは、オンラインによるセグメントの縮小に適していない再生可能な領域を持つオブジェクトに対する結果です。) |
割当領域: xxx: 使用領域: xxx: 再利用可能領域 : xxx |
オブジェクトobjectの再編成を実行してください。xxxバイトの節約が予測されるためです。 |
再編成の実行 |
オブジェクトには、再編成によって削除できる連鎖行があります。 |
xxパーセントの連鎖行を再編成で削除できます。 |
- |
- |
オブジェクトobject_nameを圧縮してください。xxxバイトの節約が予測されるためです。 (この結果は、自動セグメント・アドバイザによってのみ生成されます) |
オブジェクトobject_nameを圧縮してください。xxxバイトの節約が予測されるためです。 |
- |
実行するコマンド。たとえば: この結果については、 |
親トピック: セグメント・アドバイザの結果の表示
19.3.2.5.3 DBMS_SPACE.ASA_RECOMMENDATIONSを使用したセグメント・アドバイザの結果の表示
DBMS_SPACE
パッケージのASA_RECOMMENDATIONS
プロシージャは、自動セグメント・アドバイザの実行およびセグメント・アドバイザの手動実行に対する結果や推奨事項を含むネストされた表オブジェクトを返します。
このプロシージャでは、必要な結合がすべて実行され、使用しやすい形式で情報が返されるため、このプロシージャを呼び出す方が、DBA_ADVISOR_*
ビューで作業するより簡単な場合があります。
次の問合せは、自動セグメント・アドバイザの最新の実行による推奨事項と、推奨事項に従うための実行コマンドの例を戻します。
select tablespace_name, segment_name, segment_type, partition_name, recommendations, c1 from table(dbms_space.asa_recommendations('FALSE', 'FALSE', 'FALSE')); TABLESPACE_NAME SEGMENT_NAME SEGMENT_TYPE ------------------------------ ------------------------------ -------------- PARTITION_NAME ------------------------------ RECOMMENDATIONS ----------------------------------------------------------------------------- C1 ----------------------------------------------------------------------------- TVMDS_ASSM ORDERS1 TABLE PARTITION ORDERS1_P2 Perform shrink, estimated savings is 57666422 bytes. alter table "STEVE"."ORDERS1" modify partition "ORDERS1_P2" shrink space TVMDS_ASSM ORDERS1 TABLE PARTITION ORDERS1_P1 Perform shrink, estimated savings is 45083514 bytes. alter table "STEVE"."ORDERS1" modify partition "ORDERS1_P1" shrink space TVMDS_ASSM_NEW ORDERS_NEW TABLE Perform shrink, estimated savings is 155398992 bytes. alter table "STEVE"."ORDERS_NEW" shrink space TVMDS_ASSM_NEW ORDERS_NEW_INDEX INDEX Perform shrink, estimated savings is 102759445 bytes. alter index "STEVE"."ORDERS_NEW_INDEX" shrink space
DBMS_SPACE.ASA_RECOMMENDATIONS
の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
親トピック: セグメント・アドバイザの結果の表示
19.3.2.6 自動セグメント・アドバイザの構成
自動セグメント・アドバイザは自動化メンテナンス・タスクの1つです。そのため、このタスクの実行時に変更を加える場合は、Cloud ControlまたはPL/SQLパッケージ・プロシージャ・コールを使用できます。適切なリソース・プランを変更することで、タスクに割り当てられているリソースを制御することもできます。
これらはPL/SQLパッケージ・プロシージャをコールして変更できますが、Cloud Controlを使用する方がさらに簡単です。
Cloud Controlを使用して自動セグメント・アドバイザのタスクを構成するには:
関連項目:
親トピック: セグメント・アドバイザ
19.3.2.7 自動セグメント・アドバイザ情報の表示
ビューを問い合せて、自動セグメント・アドバイザに固有の情報を表示できます。
ビュー | 説明 |
---|---|
このビューには、各行に1件ずつ自動セグメント・アドバイザの実行が要約されます。フィールドには、処理された表領域やセグメントの数、および作成された推奨事項の件数が表示されます。 |
|
自動セグメント・アドバイザがセグメントの選択および処理に使用する制御情報が表示されます。各行には、単一のオブジェクト(表領域またはセグメント)に関する情報(オブジェクトが処理されたかどうか、処理された場合はオブジェクトを処理したタスクIDやその選択理由など)が格納されます。 |
親トピック: セグメント・アドバイザ
19.3.3 オンラインによるデータベース・セグメントの縮小
Oracle Databaseセグメントの最高水位標の下の断片化された空き領域を再生するには、オンラインによるセグメントの縮小を使用します。
セグメントの縮小の利点は、次のとおりです。
-
データの縮小はキャッシュ利用の向上につながります。つまり、オンライン・トランザクション処理(OLTP)のパフォーマンスが改善されます。
-
データが縮小されることで、全表スキャンを実行する際に必要なスキャン・ブロック数が少なくなります。つまり、意思決定支援システム(DSS)のパフォーマンスが改善されます。
セグメントの縮小は、オンラインのインプレース操作です。セグメント縮小のデータ移動フェーズでは、DML操作および問合せを発行できます。縮小操作の最後に領域が割当て解除される際は、短い時間ですが同時DML操作がブロックされます。索引は、縮小操作中も保持され、操作が完了した後も使用できます。セグメントの縮小では、余分なディスク領域の割当ては不要です。
セグメントの縮小では、最高水位標の上下両方の未使用領域を再生します。これに対して、領域の割当て解除では、最高水位標よりも上の未使用領域のみを再生します。縮小操作では、デフォルトの場合、セグメントを縮小して最高水位標を調整し、回復した領域が解放されます。
セグメントの縮小には、新しい位置への行の移動が必要です。したがって、最初に、縮小するオブジェクトの行を移動可能にし、オブジェクトに定義したROWIDベースのトリガーを無効にする必要があります。表内の行を移動可能にするには、ALTER
TABLE
... ENABLE
ROW
MOVEMENT
コマンドを使用します。
縮小操作は、自動セグメント領域管理(ASSM)を使用しているローカル管理表領域内のセグメントに対してのみ実行できます。ASSM表領域内では、次の表を除くすべてのセグメント・タイプがオンラインによるセグメントの縮小に適しています。
-
IOTマッピング表
-
ROWIDベースのマテリアライズド・ビューを備えた表
-
ファンクション索引がある表
-
SECUREFILE
LOB -
次の圧縮メソッドで圧縮された表:
-
ROW STORE COMPRESS BASIC
を使用した基本表圧縮 -
COLUMN STORE COMPRESS FOR QUERY
を使用したウェアハウス圧縮 -
COLUMN STORE COMPRESS FOR ARCHIVE
を使用したアーカイブ圧縮
ただし、
ROW STORE COMPRESS ADVANCED
を使用した高度な行圧縮で圧縮された表は、オンラインのセグメント縮小の対象になります。表圧縮メソッドの詳細は、「表圧縮の使用」を参照してください。 -
ノート:
オンラインでデータベース・セグメントを縮小すると、依存データベース・オブジェクトが無効になることがあります。「オブジェクト依存性とオブジェクトの無効化について」を参照してください。
関連項目:
ALTER
TABLE
コマンドの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
オンラインによるセグメントの縮小の起動
オンラインによるセグメントの縮小を起動する前に、セグメント・アドバイザの結果および推奨事項を表示します。詳細は、「セグメント・アドバイザの使用」を参照してください。
Cloud ControlまたはSQL*PlusのSQLコマンドを使用して、オンラインによるセグメントの縮小を起動します。ここからは、コマンドラインによる方法について説明します。
ノート:
Cloud Controlの「推奨事項の詳細」ページから、セグメントの縮小を直接起動できます。また、Cloud Controlの個々の表に対してセグメントの縮小を起動するには、「表」ページに表を表示し、表を選択した後、「アクション」リストで「セグメントの縮小」をクリックします。(図19-1を参照してください。)Cloud Controlで同様の操作を実行すると、索引やマテリアライズド・ビューなどを縮小できます。
表、索引構成表、索引、パーティション、サブパーティション、マテリアライズド・ビューまたはマテリアライズド・ビュー・ログの領域を縮小できます。この縮小には、SHRINK SPACE
句を指定したALTER
TABLE
、ALTER
INDEX
、ALTER
MATERIALIZED
VIEW
文またはALTER
MATERIALIZED
VIEW
LOG
文を使用します。
次の2つの句を必要に応じて使用することで、縮小操作の処理方法を制御できます。
-
COMPACT
句を指定すると、セグメントの縮小操作を2つのフェーズに分割できます。COMPACT
を指定すると、Oracle Databaseはセグメント領域の断片化を解消して表の行を縮小しますが、将来のある時点まで最高水位標のリセットおよび領域の割当て解除を延期します。このオプションは、操作に影響される可能性がある長時間実行される問合せがあり、再生されたブロックから読取りが試行される場合に役立ちます。断片化解消および縮小の結果は、第2のフェーズでデータの移動をやり直す必要がないように、ディスクに保存されます。第2のフェーズを完了するには、オフピーク時にCOMPACT
句を指定せずにSHRINK SPACE
句を再度発行します。 -
CASCADE
句を指定すると、オブジェクトのすべての依存セグメントにセグメントの縮小操作が拡張されます。たとえば、表セグメントを縮小する際にCASCADE
を使用すると、表のすべての索引も縮小されます。(パーティション表のパーティションを縮小するためにCASCADE
を指定する必要はありません。)指定したオブジェクトの依存セグメントのリストを表示するには、DBMS_SPACE
パッケージのOBJECT_DEPENDENT_SEGMENTS
プロシージャを実行できます。
DDL操作と同様に、セグメントの縮小によって、後続のSQL文が再度解析されることになります。これは、COMPACT
句を指定しないかぎり、カーソルが無効になるためです。
例
表およびその依存セグメント(BASICFILE
LOBセグメントを含む)のすべてを縮小します。
ALTER TABLE employees SHRINK SPACE CASCADE;
BASICFILE
LOBセグメントのみを縮小します。
ALTER TABLE employees MODIFY LOB (perf_review) (SHRINK SPACE);
パーティション表の単一パーティションを縮小します。
ALTER TABLE customers MODIFY PARTITION cust_P1 SHRINK SPACE;
IOT索引セグメントとオーバーフロー・セグメントを縮小します。
ALTER TABLE cities SHRINK SPACE CASCADE;
IOTオーバーフロー・セグメントのみを縮小します。
ALTER TABLE cities OVERFLOW SHRINK SPACE;
関連項目:
-
SHRINK SPACE句のあるALTER
TABLE
、ALTER
INDEX
、ALTER
MATERIALIZED
VIEW
およびALTER
MATERIALIZED
VIEW
LOG
文の構文と制限事項は、『Oracle Database SQL言語リファレンス』
を参照してください。
-
LOBセグメントの詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。
親トピック: 未使用領域の再利用
19.3.4 未使用領域の割当て解除
未使用領域の割当てを解除する場合は、未使用の(最高水位標)データベース・セグメントの最後で未使用領域を解放して、表領域の他のセグメントで領域を使用できるようにします。
割当て解除の前に、セグメントの最高水位標の位置および未使用領域の量に関する情報を返す、DBMS_SPACE
パッケージのUNUSED_SPACE
プロシージャを実行できます。自動セグメント領域管理を備えたローカル管理表領域のセグメントの場合は、SPACE_USAGE
プロシージャを使用すると、未使用領域に関するより正確な情報が得られます。
関連項目:
DBMS_SPACE
パッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
次の文は、セグメント(表、索引またはクラスタ)内の未使用領域の割当てを解除します。
ALTER TABLE table DEALLOCATE UNUSED KEEP integer; ALTER INDEX index DEALLOCATE UNUSED KEEP integer; ALTER CLUSTER cluster DEALLOCATE UNUSED KEEP integer;
KEEP
句はオプションで指定でき、セグメントに保持される領域の量を指定できます。DBA_FREE_SPACE
ビューを調べることで、割当て解除された領域が開放されたことを確認できます。
関連項目:
-
未使用領域の割当て解除の構文とセマンティクスの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
-
DBA_FREE_SPACE
ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。
親トピック: 未使用領域の再利用
19.4 未使用オブジェクト記憶域の削除
DBMS_SPACE_ADMIN
パッケージにはDROP_EMPTY_SEGMENTS
プロシージャが含まれており、このプロシージャを使用すると、以前のリリースから移行された空の表およびパーティションのセグメントを削除できます。可能な場合には、索引セグメントなどの表の依存オブジェクトのセグメントもこれに含まれます。
次の例では、データベース内のすべての表から空のセグメントを削除しています。
BEGIN DBMS_SPACE_ADMIN.DROP_EMPTY_SEGMENTS(); END;
次は、HR.EMPLOYEES
表から依存オブジェクトを含め空のセグメントを削除しています。
BEGIN DBMS_SPACE_ADMIN.DROP_EMPTY_SEGMENTS( schema_name => 'HR', table_name => 'EMPLOYEES'); END;
このプロシージャには、11.2.0以降との互換性が必要です。
関連項目:
このプロシージャの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください
親トピック: スキーマ・オブジェクトの領域の管理
19.5 データ型の領域使用の理解
表またはその他のデータ構造を作成する際には、必要になる領域の大きさを把握しておく必要があります。領域要件は、データ型ごとに異なります。
『Oracle Database PL/SQL言語リファレンス』および『Oracle Database SQL言語リファレンス』には、データ型および領域要件の詳細な説明があります。
親トピック: スキーマ・オブジェクトの領域の管理
19.6 スキーマ・オブジェクトの領域使用情報の表示
Oracle Databaseには、スキーマ・オブジェクトの領域使用に関する情報を表示するためのデータ・ディクショナリ・ビューとPL/SQLパッケージが用意されています。
- PL/SQLパッケージを使用したスキーマ・オブジェクトの領域使用情報の表示
DBMS_SPACE
サブプログラムのセットを使用して、スキーマ・オブジェクトに関する情報を表示できます。 - スキーマ・オブジェクトの領域使用のデータ・ディクショナリ・ビュー
データ・ディクショナリ・ビューのセットに、スキーマ・オブジェクトの領域使用に関する情報が表示されます。
親トピック: スキーマ・オブジェクトの領域の管理
19.6.1 PL/SQLパッケージを使用したスキーマ・オブジェクトの領域使用情報の表示
DBMS_SPACE
サブプログラムのセットを使用して、スキーマ・オブジェクトに関する情報を表示できます。
パッケージとプロシージャ/ファンクション | 説明 |
---|---|
|
オブジェクト(表、索引またはクラスタ)の未使用領域に関する情報を返します。 |
|
セグメントの空き領域が空きリストで管理されている(つまり、セグメント領域管理が |
|
セグメント領域管理が |
関連項目:
DBMS_SPACE
パッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
例: DBMS_SPACE.UNUSED_SPACEの使用
次のSQL*Plusの例では、DBMS_SPACE
パッケージを使用して、未使用領域情報を取得しています。
SQL> VARIABLE total_blocks NUMBER SQL> VARIABLE total_bytes NUMBER SQL> VARIABLE unused_blocks NUMBER SQL> VARIABLE unused_bytes NUMBER SQL> VARIABLE lastextf NUMBER SQL> VARIABLE last_extb NUMBER SQL> VARIABLE lastusedblock NUMBER SQL> exec DBMS_SPACE.UNUSED_SPACE('SCOTT', 'EMP', 'TABLE', :total_blocks, - > :total_bytes,:unused_blocks, :unused_bytes, :lastextf, - > :last_extb, :lastusedblock); PL/SQL procedure successfully completed. SQL> PRINT TOTAL_BLOCKS ------------ 5 TOTAL_BYTES ----------- 10240 ... LASTUSEDBLOCK ------------- 3
親トピック: スキーマ・オブジェクトの領域使用情報の表示
19.6.2 スキーマ・オブジェクトの領域使用のデータ・ディクショナリ・ビュー
データ・ディクショナリ・ビューのセットに、スキーマ・オブジェクトの領域使用に関する情報が表示されます。
次のビューには、スキーマ・オブジェクトの領域使用に関する情報が表示されます。
ビュー | 説明 |
---|---|
DBAビューには、すべてのデータベース・セグメントに割り当てられている記憶域が表示されます。USERビューには、現行のユーザーのセグメントに割り当てられている記憶域が表示されます。 |
|
DBAビューには、データベース内のすべてのセグメントを構成するエクステントが表示されます。USERビューには、現行のユーザーのセグメントを構成するエクステントが表示されます。 |
|
DBAビューには、すべての表領域の使用可能エクステントが表示されます。USERビューには、ユーザーが割当て制限を持つ表領域の空き領域情報が表示されます。 |
- 例1: セグメント情報の表示
DBA_SEGMENTS
ビューを問い合せてセグメント情報を表示できます。 - 例2: エクステント情報の表示
DBA_EXTENTS
データ・ディクショナリ・ビューを問い合せて、データベース内の現在割り当てられているエクステントに関する情報を表示できます。 - 例3: 表領域内の空き領域(エクステント)の表示
DBA_FREE_SPACE
データ・ディクショナリ・ビューを問い合せて、データベース内の空きエクステント(セグメントに割り当てられていないエクステント)に関する情報を表示できます。
親トピック: スキーマ・オブジェクトの領域使用情報の表示
19.6.2.1 例1: セグメント情報の表示
DBA_SEGMENTS
ビューを問い合せてセグメント情報を表示できます。
次の問合せは、スキーマhr
の各索引セグメントの名前とサイズを返します。
SELECT SEGMENT_NAME, TABLESPACE_NAME, BYTES, BLOCKS, EXTENTS FROM DBA_SEGMENTS WHERE SEGMENT_TYPE = 'INDEX' AND OWNER='HR' ORDER BY SEGMENT_NAME;
問合せ出力は、次のとおりです。
SEGMENT_NAME TABLESPACE_NAME BYTES BLOCKS EXTENTS ------------------------- --------------- -------- ------ ------- COUNTRY_C_ID_PK EXAMPLE 65536 32 1 DEPT_ID_PK EXAMPLE 65536 32 1 DEPT_LOCATION_IX EXAMPLE 65536 32 1 EMP_DEPARTMENT_IX EXAMPLE 65536 32 1 EMP_EMAIL_UK EXAMPLE 65536 32 1 EMP_EMP_ID_PK EXAMPLE 65536 32 1 EMP_JOB_IX EXAMPLE 65536 32 1 EMP_MANAGER_IX EXAMPLE 65536 32 1 EMP_NAME_IX EXAMPLE 65536 32 1 JHIST_DEPARTMENT_IX EXAMPLE 65536 32 1 JHIST_EMPLOYEE_IX EXAMPLE 65536 32 1 JHIST_EMP_ID_ST_DATE_PK EXAMPLE 65536 32 1 JHIST_JOB_IX EXAMPLE 65536 32 1 JOB_ID_PK EXAMPLE 65536 32 1 LOC_CITY_IX EXAMPLE 65536 32 1 LOC_COUNTRY_IX EXAMPLE 65536 32 1 LOC_ID_PK EXAMPLE 65536 32 1 LOC_STATE_PROVINCE_IX EXAMPLE 65536 32 1 REG_ID_PK EXAMPLE 65536 32 1 19 rows selected.
19.6.2.2 例2: エクステント情報の表示
DBA_EXTENTS
データ・ディクショナリ・ビューを問い合せて、データベース内の現在割り当てられているエクステントに関する情報を表示できます。
たとえば、次の問合せによって、hr
スキーマの各索引セグメントに割り当てられているエクステントとそれらのエクステントのサイズが識別されます。
SELECT SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAME, EXTENT_ID, BYTES, BLOCKS FROM DBA_EXTENTS WHERE SEGMENT_TYPE = 'INDEX' AND OWNER='HR' ORDER BY SEGMENT_NAME;
問合せ出力は、次のとおりです。
SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME EXTENT_ID BYTES BLOCKS ------------------------- ------------ --------------- --------- -------- ------ COUNTRY_C_ID_PK INDEX EXAMPLE 0 65536 32 DEPT_ID_PK INDEX EXAMPLE 0 65536 32 DEPT_LOCATION_IX INDEX EXAMPLE 0 65536 32 EMP_DEPARTMENT_IX INDEX EXAMPLE 0 65536 32 EMP_EMAIL_UK INDEX EXAMPLE 0 65536 32 EMP_EMP_ID_PK INDEX EXAMPLE 0 65536 32 EMP_JOB_IX INDEX EXAMPLE 0 65536 32 EMP_MANAGER_IX INDEX EXAMPLE 0 65536 32 EMP_NAME_IX INDEX EXAMPLE 0 65536 32 JHIST_DEPARTMENT_IX INDEX EXAMPLE 0 65536 32 JHIST_EMPLOYEE_IX INDEX EXAMPLE 0 65536 32 JHIST_EMP_ID_ST_DATE_PK INDEX EXAMPLE 0 65536 32 JHIST_JOB_IX INDEX EXAMPLE 0 65536 32 JOB_ID_PK INDEX EXAMPLE 0 65536 32 LOC_CITY_IX INDEX EXAMPLE 0 65536 32 LOC_COUNTRY_IX INDEX EXAMPLE 0 65536 32 LOC_ID_PK INDEX EXAMPLE 0 65536 32 LOC_STATE_PROVINCE_IX INDEX EXAMPLE 0 65536 32 REG_ID_PK INDEX EXAMPLE 0 65536 32 19 rows selected.
hr
スキーマの場合は、複数のエクステントが割り当てられているセグメントはありません。
19.6.2.3 例3: 表領域内の空き領域(エクステント)の表示
DBA_FREE_SPACE
データ・ディクショナリ・ビューを問い合せて、データベース内の空きエクステント(セグメントに割り当てられていないエクステント)に関する情報を表示できます。
たとえば、次の問合せは、SMUNDO
表領域内の使用可能エクステントとして使用可能な空き領域を示します。
SELECT TABLESPACE_NAME, FILE_ID, BYTES, BLOCKS FROM DBA_FREE_SPACE WHERE TABLESPACE_NAME='SMUNDO';
問合せ出力は、次のとおりです。
TABLESPACE_NAME FILE_ID BYTES BLOCKS --------------- -------- -------- ------ SMUNDO 3 65536 32 SMUNDO 3 65536 32 SMUNDO 3 65536 32 SMUNDO 3 65536 32 SMUNDO 3 65536 32 SMUNDO 3 65536 32 SMUNDO 3 131072 64 SMUNDO 3 131072 64 SMUNDO 3 65536 32 SMUNDO 3 3407872 1664 10 rows selected.
19.7 データベース・オブジェクトの容量計画
Oracle Databaseでは、Cloud ControlまたはDBMS_SPACE
PL/SQLパッケージの2つの方法でデータベース・オブジェクトの容量を計画できます。DBMS_SPACE
パッケージには、新しいオブジェクトのサイズを予測したり、既存のデータベース・オブジェクトのサイズを監視できる3つのプロシージャがあります。
ここでは、PL/SQLによる方法について説明します。Cloud Controlを使用した容量計画の詳細は、Cloud Controlのオンライン・ヘルプおよび「セグメント・アドバイザの使用」を参照してください。
- 表の領域使用の見積り
データベース表のサイズは、表領域の記憶域属性、表領域のブロック・サイズ、他の様々な要因によって大きく変化する可能性があります。DBMS_SPACE
パッケージのCREATE_TABLE_COST
プロシージャを使用すると、表を作成する際の領域使用コストを予測できます。 - 索引の領域使用の見積り
DBMS_SPACE
パッケージのCREATE_INDEX_COST
プロシージャを使用すると、既存の表に索引を作成する際の領域使用コストを予測できます。 - オブジェクト増加傾向の取得
DBMS_SPACE
パッケージ・プロシージャのOBJECT_GROWTH_TREND
関数では、特定の時点におけるオブジェクトの領域使用が各行に記述された1行以上の表が作成されます。
親トピック: スキーマ・オブジェクトの領域の管理
19.7.1 表の領域使用の見積り
データベース表のサイズは、表領域の記憶域属性、表領域のブロック・サイズ、他の様々な要因によって大きく変化する可能性があります。DBMS_SPACE
パッケージのCREATE_TABLE_COST
プロシージャを使用すると、表を作成する際の領域使用コストを予測できます。
このプロシージャのパラメータの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
プロシージャには、2つの異形があります。第1の異形は、行の平均サイズを使用してサイズを見積ります。第2の異形は、列情報を使用して表のサイズを見積ります。両方の異形ともに入力として次の値が必要です。
-
TABLESPACE_NAME
: オブジェクトが作成される表領域。デフォルトはSYSTEM
表領域です。 -
ROW_COUNT
: 表の予測行数。 -
PCT_FREE
: 更新の結果、既存の行を将来拡張するように各ブロックに確保する空き領域の割合(パーセンテージ)。
さらに、第1の異形には、AVG_ROW_SIZE
の値も入力する必要があります。値は、予測された行サイズの平均をバイト単位で指定します。
また、第2の異形には、予想された各列値をCOLINFOS
に指定する必要があります。この値は、属性COL_TYPE
(列のデータ型)とCOL_SIZE
(列の文字数またはバイト数)からなるオブジェクト型です。
このプロシージャでは、2つの値が戻ります。
-
USED_BYTES
: ブロック・メタデータ、PCT_FREE
領域などのオーバーヘッドを含め、データとして使用される実際のバイト数。 -
ALLOC_BYTES
: 表領域のエクステントの特性を考慮してオブジェクトに割り当てられる予測した領域の大きさ。
ノート:
パーティション表のすべての新規セグメントについて、第1エクステントのデフォルトのサイズは64KBではなく8MBです。このことは、パーティション表に対する挿入と問合せのパフォーマンス向上に役立ちます。パーティション表の初期サイズが大きくても、十分なデータが挿入されると、領域消費は以前のリリースと同じになります。このデフォルトは、表の記憶域句にINITIAL
サイズを設定して上書きできます。この新しいデフォルトは、表パーティションおよびLOBパーティションにのみ適用されます。
親トピック: データベース・オブジェクトの容量計画
19.7.2 索引の領域使用の見積り
DBMS_SPACE
パッケージのCREATE_INDEX_COST
プロシージャを使用すると、既存の表に索引を作成する際の領域使用コストを予測できます。
プロシージャには次の値を入力する必要があります。
-
DDL
: 索引を作成するCREATE INDEX
文。このDDL文に指定する表は、既存の表であることが必要です。 -
[オプション]
PLAN_TABLE
: 使用するPLAN TABLEの名前。デフォルトはNULL
です。
このプロシージャから戻る結果は、セグメントに対して収集された統計によって異なります。したがって、このプロシージャを実行する直前に必ず統計を取得してください。最近の統計がない状態でもエラーになりませんが、不適切な結果が戻る可能性があります。このプロシージャでは、次の値が戻ります。
-
USED_BYTES
: 実際の索引データを表すバイト数。 -
ALLOC_BYTES
: 表領域の索引に割り当てられる領域の大きさ。
親トピック: データベース・オブジェクトの容量計画
19.7.3 オブジェクト増加傾向の取得
DBMS_SPACE
パッケージ・プロシージャのOBJECT_GROWTH_TREND
関数では、特定の時点におけるオブジェクトの領域使用が各行に記述された1行以上の表が作成されます。
この関数は、自動ワークロード・リポジトリから領域使用の合計を取得するか、現在の領域使用を計算して、自動ワークロード・リポジトリから取得した領域使用の変更履歴と結合します。この関数のパラメータの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
関数には次の値を入力する必要があります。
-
OBJECT_OWNER
: オブジェクトの所有者。 -
OBJECT_NAME
: オブジェクトの名前。 -
PARTITION_NAME
: 適切な場合は、表または索引パーティションの名前を指定します。それ以外の場合は、NULL
を指定します。 -
OBJECT_TYPE
: オブジェクトの種類。 -
START_TIME
: 増加傾向分析の開始を示すTIMESTAMP
値。 -
END_TIME
: 増加傾向分析の終了を示すTIMESTAMP
値。デフォルトはNOW
です。 -
INTERVAL
: 関数が領域使用情報を取得するレポート間隔の長さ(分単位)。 -
SKIP_INTERPOLATED
:INTERVAL
の前後に記録された統計情報に基づいて、この関数が値を除外する('YES
')かしない('NO
')かを決定します。要求したレポート作成間隔と実際の記録間隔がどのように関連しているかをより明確に表示できるため、チャートではなく表として結果表が表示される場合には、この設定が便利です。
この関数は、1つの間隔のオブジェクトの領域使用情報が各行に示された表を返します。返される表が非常に大きい場合は、情報が作成されると同時に別のアプリケーションが使用できるように結果がパイプライン化されます。出力表には次の列があります。
-
TIMEPOINT
: レポート間隔の時間を示すTIMESTAMP
値。最も古いオブジェクトの記録統計よりも前の
TIME
値の記録は作成されません。 -
SPACE_USAGE
: オブジェクト・データとして実際に使用されているバイト数。 -
SPACE_ALLOC
: その時点で表領域のオブジェクトに割り当てられていたバイト数。 -
QUALITY
: 要求されたレポート間隔と実際の統計記録が一致している程度を示す値。オブジェクト・サイズ使用統計には保証されているレポート間隔はなく、実際のレポート間隔は時間の経過およびオブジェクトによって変わるため、この情報が役立ちます。QUALITY
列には、次の値が設定されます。 -
-
GOOD
: 記録されたタイムスタンプが入力パラメータに指定したINTERVAL
の10%以内で、TIME
の値が記録統計に常に基づいている場合。 -
INTERPOLATED
: 値はGOOD
の基準を満たしていないが、TIME
値の前後の記録統計に基づいている場合。現在のインメモリー統計は、クラスタ内のすべてのインスタンスで収集でき、現時点の記録値として取り扱うことができます。 -
PROJECTION
: 表が作成された時点ではTIME
値が未来であった場合。Oracle Real Application Clusters環境では、統計の記録ルールによって、どのオブジェクトが選択されるかを各インスタンスが独自に選択できるようになっています。
この関数から戻る出力は、Oracle RAC環境のすべてのインスタンスについて記録した値の集合です。各値は、
GOOD
およびINTERPOLATED
値の組合せから計算できます。その値の少なくとも80%がGOOD
のインスタンス値から導出された場合、戻される集計値はGOOD
にマークされます。 -
親トピック: データベース・オブジェクトの容量計画