DBMS_REDEFINITION
パッケージは、オンラインで表の再定義を行うためのインタフェースを提供します。
関連項目: オンラインで表を再定義する方法の詳細は、『Oracle Database管理者ガイド』を参照してください。 |
この章では、次の項目について説明します。
概要
セキュリティ・モデル
定数
使用上の注意
オンラインで再定義を行うには、段階的に維持可能なローカル・マテリアライズド・ビューを使用します。これらのログは、マスター表に対する変更を追跡し、リフレッシュ同期時にマテリアライズド・ビューで使用されます。
DBMS_REDEFINTION
パッケージ内のサブプログラムは、実行者権限(現行のユーザーの権限)を使用して実行されます。次の2つのモードがあります。
USER
モードでは、CREATE TABLE
およびCREATE MVIEW
権限を持つユーザーが自身のスキーマ内にある表を再定義できます。
FULL
モードでは、ANY
権限を持つユーザーが任意のスキーマ内にある表を再定義できます。
DBMS_REDEFINITION
パッケージでは、表110-1「DBMS_REDEFINITIONの定数」に示す定数が使用されます。
表110-1 DBMS_REDEFINITION定数
定数 | タイプ | 値 | 説明 |
---|---|---|---|
|
|
|
依存オブジェクト・タイプが制約であることを指定するために使用します。 |
|
|
|
依存オブジェクト・タイプが索引であることを指定するために使用します。 |
|
|
|
マテリアライズド・ビュー・ログを、表の依存オブジェクトとしてREGISTER_DEPENDENT_OBJECTプロシージャおよびUNREGISTER_DEPENDENT_OBJECTプロシージャを使用して登録(または登録解除)する場合に使用します。 |
|
|
|
索引は元の記憶域パラメータでクローニングする必要があることを指定するために使用します。 |
|
|
|
依存オブジェクト・タイプがトリガーであることを指定するために使用します。 |
|
|
|
再定義は主キーまたは擬似主キー(すべてのコンポーネント列に |
|
|
|
再定義はROWIDを使用して行う必要があることを示すために使用します。 |
CONS_USE_PK
およびCONS_USE_ROWID
は、START_REDEF_TABLEプロシージャおよびCAN_REDEF_TABLEプロシージャの両方におけるoptions_flagパラメータへの入力として使用する定数です。CONS_USE_ROWID
は再定義がROWIDを使用して行われる必要があることを示し、CONS_USE_PK
は再定義が主キーまたは擬似主キー(すべてのコンポーネント列にNOT
NULL
制約がある一意キー)を使用して行われる必要があることを示すために使用します。
CONS_INDEX
、CONS_MVLOG
、CONS_TRIGGER
およびCONS_CONSTRAINT
は、REGISTER_DEPENDENT_OBJECTプロシージャおよびUNREGISTER_DEPENDENT_OBJECTプロシージャで登録(または登録解除)される依存オブジェクトのタイプ(パラメータdep_type
)を指定するために使用します。
CONS_INDEX
==>依存オブジェクトをINDEX
タイプに指定
CONS_TRIGGER
==>依存オブジェクトをTRIGGER
タイプに指定
CONS_CONSTRAINT
==>依存オブジェクトをCONSTRAINT
タイプに指定
CONS_MVLOG
==>依存オブジェクトをMATERIALIZED
VIEW
LOG
タイプに指定
CONS_ORIG_PARAMS
は、COPY_TABLE_DEPENDENTSプロシージャでのcopy_indexes
パラメータの入力として使用します。このパラメータを使用すると、元の表の索引が、元の索引と同じ記憶域パラメータを使用して仮表にコピーされます。
表110-2 DBMS_REDEFINITIONパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
|
再定義プロセスで発生したエラーをクリーンアップし、再構成プロセスで作成されたすべての一時オブジェクトを削除します。 |
|
指定された表がオンラインで再定義可能かどうかを判断します。 |
|
元の表の依存オブジェクトを仮表にコピーします。 |
|
再定義プロセスを完了します。 |
REGISTER_DEPENDENT_OBJECTプロシージャ |
再定義中の表の依存オブジェクト(索引、トリガー、制約またはマテリアライズド・ビューのログ)および仮表の対応する依存オブジェクトを登録します。 |
|
再定義プロセスを開始します。 |
|
仮表と元の表との同期を保ちます。 |
UNREGISTER_DEPENDENT_OBJECTプロシージャ |
再定義中の表の依存オブジェクト(索引、トリガー、制約またはマテリアライズド・ビュー・ログ)および仮表の対応する依存オブジェクトの登録を解除します。 |
このプロシージャは、再定義プロセスで発生したエラーをクリーンアップします。START_REDEF_TABLEプロシージャのコール後で、FINISH_REDEF_TABLEプロシージャのコール前であれば、このプロシージャを使用して任意の時点で再定義プロセスを終了することもできます。このプロセスによって、マテリアライズド・ビュー・ログなどの再定義プロセスで作成された一時オブジェクトが削除されます。
このプロシージャは、指定された表がオンラインで再定義可能かどうかを判断します。これはオンラインでの再定義プロセスの最初のステップです。その表がオンラインでの再定義の候補ではない場合は、エラー・メッセージが表示されます。
構文
DBMS_REDEFINITION.CAN_REDEF_TABLE ( uname IN VARCHAR2, tname IN VARCHAR2, options_flag IN PLS_INTEGER := 1, part_name IN VARCHAR2 := NULL);
パラメータ
表110-4 CAN_REDEF_TABLEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
表のスキーマ名。 |
|
再構成する表の名前。 |
|
使用する再定義方法のタイプ。
|
|
再定義するパーティションの名前。表の単一パーティションのみを再定義する場合は、このパラメータにパーティション名を指定します。 |
このプロシージャは、再定義中の表の依存オブジェクトを仮表にクローニングし、その依存オブジェクトを登録します。すでに登録されている依存オブジェクトのクローニングは行われません。
このサブプログラムは、再定義対象の表から仮表(再定義後の表を表す)に権限付与、トリガー、制約および権限などの依存オブジェクトをクローニングするために使用します。
構文
DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS( uname IN VARCHAR2, orig_table IN VARCHAR2, int_table IN VARCHAR2, copy_indexes IN PLS_INTEGER := 1, copy_triggers IN BOOLEAN := TRUE, copy_constraints IN BOOLEAN := TRUE, copy_privileges IN BOOLEAN := TRUE, ignore_errors IN BOOLEAN := FALSE, num_errors OUT PLS_INTEGER, copy_statistics IN BOOLEAN := FALSE, copy_mvlog IN BOOLEAN := FALSE);
パラメータ
表110-5 COPY_TABLE_DEPENDENTSプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
表のスキーマ名。 |
|
再定義する表の名前。 |
|
仮表の名前。 |
|
索引をコピーするかどうかを示すフラグ。
|
|
|
|
|
|
|
|
|
|
依存オブジェクトのクローニング中に発生したエラーの数。 |
|
|
|
|
使用上の注意
オブジェクトのクローニング中にエラーが発生しないように、列num_errors
をチェックしてから処理を行う必要があります。
エラーが発生した場合は、エラーの原因を修正し、COPY_TABLE_DEPENDENTSプロシージャを再度コールして、依存オブジェクトをクローニングします。また、依存オブジェクトを手動でクローニングした後、REGISTER_DEPENDENT_OBJECTプロシージャを使用して、クローニングした依存オブジェクトを手動で登録することもできます。
仮表にクローニングされた参照制約はすべて無効に作成され(再定義後に自動的に有効になります)、仮表のすべてのトリガーは再定義が完了するまで実行されません。再定義が完了すると、クローニングされたオブジェクトには、それぞれクローン元のオブジェクトと同じ再定義前の名前が再び付けられます。
これはユーザーの責任となります(クローニングされた依存オブジェクトは再定義の影響を受けません)。すべてのトリガーがクローニングされ、これはユーザーの責任となります(クローニングされたトリガーは再定義の影響を受けません)。
このプロシージャは、再定義プロセスを完了します。このステップの前に、新しい索引、トリガー、権限および制約を仮表に作成できます。仮表に含まれる参照制約は無効にする必要があります。このステップが完了すると、仮表の属性とデータを使用して元の表が再定義されます。このプロシージャの実行時は、元の表が一時的にロックされます。
このプロシージャは、再定義中の表の依存オブジェクト(索引、トリガー、制約またはマテリアライズド・ビューのログ)および仮表の対応する依存オブジェクトを登録します。
このプロシージャを使用すると、各表で異なる属性の同じオブジェクトを持つことができます。たとえば、索引の場合、記憶域および表領域の属性は異なる可能性がありますが、索引付けされた列は同じままです。
構文
DBMS_REDEFINITION.REGISTER_DEPENDENT_OBJECT( uname IN VARCHAR2, orig_table IN VARCHAR2, int_table IN VARCHAR2, dep_type IN PLS_INTEGER, dep_owner IN VARCHAR2, dep_orig_name IN VARCHAR2, dep_int_name IN VARCHAR2);
このプロシージャをコールする前に、再定義後の表に必要な属性を指定して(再定義する表と同じスキーマで)空の仮表を手動で作成してから、このプロシージャをコールして再定義を開始する必要があります。
構文
DBMS_REDEFINITION.START_REDEF_TABLE ( uname IN VARCHAR2, orig_table IN VARCHAR2, int_table IN VARCHAR2, col_mapping IN VARCHAR2 := NULL, options_flag IN BINARY_INTEGER := 1, orderby_cols IN VARCHAR2 := NULL, part_name IN VARCHAR2 := NULL);
パラメータ
表110-8 START_REDEF_TABLEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
表のスキーマ名。 |
|
再定義する表の名前。 |
|
仮表の名前。 |
|
元の表の列から仮表の列にマッピングする情報。(これは問合せの |
|
使用する再定義方法のタイプ。
|
|
このオプション・パラメータは、仮表の初期インスタンス化時に行を順序付けるために使用する列のリストを、オプション・キーワードの昇順/降順とともに受け入れます(順序付けは初期インスタンス化についてのみ実行され、その後の同期化では行われません)。 |
|
再定義するパーティションの名前。表の単一パーティションのみを再定義する場合は、このパラメータにパーティション名を指定します。 |
このプロシージャは、仮表と元の表との同期を保ちます。
構文
DBMS_REDEFINITION.SYNC_INTERIM_TABLE ( uname IN VARCHAR2, orig_table IN VARCHAR2, int_table IN VARCHAR2, part_name IN VARCHAR2 := NULL);
使用上の注意
このステップは、オンライン再定義を完了する前に、FINISH_REDEF_TABLEプロシージャで処理する必要のある同期化の量を最小化するのに役立ちます。
このプロシージャは、仮表で長時間実行される操作(CREATE
INDEX
など)と操作の間でコールして元の表のデータと仮表を同期化し、こうした操作の処理を高速化します。
このプロシージャは、再定義中の表の依存オブジェクト(索引、トリガー、制約またはマテリアライズド・ビューのログ)および仮表の対応する依存オブジェクトの登録を解除します。