DBMS_REDEFINITION
パッケージは、オンラインで表の再定義を行うためのインタフェースを提供します。
関連項目: オンラインで表を再定義する方法の詳細は、『Oracle Database管理者ガイド』を参照してください。 |
この章では、次の項目について説明します。
概要
セキュリティ・モデル
定数
使用上の注意
オンラインで再定義を行うには、段階的に維持可能なローカル・マテリアライズド・ビューを使用します。これらのログは、マスター表に対する変更を追跡し、リフレッシュ同期時にマテリアライズド・ビューで使用されます。
DBMS_REDEFINTION
パッケージ内のサブプログラムは、実行者権限(現行のユーザーの権限)を使用して実行されます。次の2つのモードがあります。
USER
モードでは、CREATE TABLE
およびCREATE MVIEW
権限を持つユーザーが自身のスキーマ内にある表を再定義できます。
FULL
モードでは、ANY
権限を持つユーザーが任意のスキーマ内にある表を再定義できます。
DBMS_REDEFINITION
パッケージでは、表122-1「DBMS_REDEFINITIONの定数」で示す定数が使用されます。
表122-1 DBMS_REDEFINITIONの定数
定数 | タイプ | 値 | 説明 |
---|---|---|---|
|
|
|
依存オブジェクト・タイプが制約であることを指定するために使用します。 |
|
|
|
依存オブジェクト・タイプが索引であることを指定するために使用します。 |
|
|
|
マテリアライズド・ビュー・ログを、表の依存オブジェクトとしてREGISTER_DEPENDENT_OBJECTプロシージャおよびUNREGISTER_DEPENDENT_OBJECTプロシージャを使用して登録(または登録解除)する場合に使用します。 |
|
|
|
索引は元の記憶域パラメータでクローニングする必要があることを指定するために使用します。 |
|
|
|
依存オブジェクト・タイプがトリガーであることを指定するために使用します。 |
|
|
|
再定義は主キーまたは擬似主キー(すべてのコンポーネント列に |
|
|
|
再定義はROWIDを使用して行う必要があることを示すために使用します。 |
|
|
|
VPDポリシーを自動的にコピーすることを示すために使用します。 |
|
|
|
VPDポリシーを手動でコピーすることを示すために使用します。 |
|
|
1 |
元の表にVPDポリシーが含まれていないことを示すために使用します。 |
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パラメータの入力として使用します。このパラメータを使用すると、元の表の索引が、元の索引と同じ記憶域パラメータを使用して仮表にコピーされます。
表122-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);
パラメータ
表122-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);
パラメータ
表122-5 COPY_TABLE_DEPENDENTSプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
表のスキーマ名。 |
|
再定義する表の名前。 |
|
仮表の名前。 |
|
索引をコピーするかどうかを示すフラグ。
|
|
|
|
|
|
|
|
|
|
依存オブジェクトのクローニング中に発生したエラーの数。 |
|
|
|
|
使用上の注意
オブジェクトのクローニング中にエラーが発生しないように、列num_errors
をチェックしてから処理を行う必要があります。
エラーが発生した場合は、エラーの原因を修正し、COPY_TABLE_DEPENDENTSプロシージャを再度コールして、依存オブジェクトをクローニングします。また、依存オブジェクトを手動でクローニングした後、REGISTER_DEPENDENT_OBJECTプロシージャを使用して、クローニングした依存オブジェクトを手動で登録することもできます。
仮表にクローニングされた参照制約はすべて無効に作成され(再定義後に自動的に有効になります)、仮表のすべてのトリガーは再定義が完了するまで実行されません。再定義が完了すると、クローニングされたオブジェクトには、それぞれクローン元のオブジェクトと同じ再定義前の名前が再び付けられます。
これはユーザーの責任となります(クローニングされた依存オブジェクトは再定義の影響を受けません)。すべてのトリガーがクローニングされ、これはユーザーの責任となります(クローニングされたトリガーは再定義の影響を受けません)。
このプロシージャは、再定義プロセスを完了します。このステップの前に、新しい索引、トリガー、権限および制約を仮表に作成できます。仮表に含まれる参照制約は無効にする必要があります。このステップが完了すると、仮表の属性とデータを使用して元の表が再定義されます。このプロシージャの実行時は、元の表が一時的にロックされます。
構文
DBMS_REDEFINITION.FINISH_REDEF_TABLE ( uname IN VARCHAR2, orig_table IN VARCHAR2, int_table IN VARCHAR2, part_name IN VARCHAR2 := NULL, dml_lock_timeout IN PLS_INTEGER := NULL, continue_after_errors IN BOOLEAN := FALSE);
パラメータ
表122-6 FINISH_REDEF_TABLEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
表のスキーマ名。 |
|
再定義する表の名前。 |
|
仮表の名前。カンマで区切られた仮表名のリストを指定できます。 |
|
再定義するパーティションの名前。表の単一パーティションのみを再定義する場合は、このパラメータにパーティション名を指定します。 |
|
必要なロックを獲得するために待機する秒数を指定します(この秒数が経過するとプロシージャは失敗する)。設定可能なタイムアウトの値の範囲は、0から1,000,000です。デフォルトは |
|
複数のパーティションを再定義する場合、次のパーティションに対する操作を続けて実行できます(バッチ化されたパーティション再定義にのみ適用される)。 |
このプロシージャでは、CAN_REDEF_TABLEプロシージャ、START_REDEF_TABLEプロシージャ、COPY_TABLE_DEPENDENTSプロシージャおよびFINISH_REDEF_TABLEプロシージャなど、いくつかの再定義手順を統合する単一のインタフェースが提供されます。このプロシージャでは、表領域(表、パーティション、サブパーティション、索引、LOB列が対象)、圧縮タイプ(表、パーティション、サブパーティション、索引、LOB列が対象)およびLOB列のSTORE_AS
句など、データ記憶域のプロパティを変更できます。
構文
DBMS_REDEFINITION.REDEF_TABLE ( uname IN VARCHAR2, tname IN VARCHAR2, table_compression_type IN VARCHAR2 := NULL, table_part_tablespace IN VARCHAR2 := NULL, index_key_compression_type IN VARCHAR2 := NULL, index_tablespace IN VARCHAR2 := NULL, lob_compression_type IN VARCHAR2 := NULL, lob_tablespace IN VARCHAR2 := NULL, lob_store_as IN VARCHAR2 := NULL);
パラメータ
表122-7 REDEF_TABLEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
表のスキーマ名。 |
|
再定義する表の名前。 |
|
表圧縮句のテキスト文字列。 |
|
表またはパーティション全体の表領域名。 |
|
表のすべての索引に使用する圧縮句のテキスト文字列。 |
|
表のすべての索引に使用する表領域名。 |
|
表全体のすべてのLOBに使用する圧縮句のテキスト文字列。 |
|
表のすべてのLOBに使用する表領域名。 |
|
LOBストアは、 |
例
BEGIN DBMS_REDEFINITION.REDEF_TABLE( uname => 'TABOWNER2', tname => 'EMP2', table_compression_type => 'ROW STORE COMPRESS ADVANCED', table_part_tablespace => 'NEWTBS', index_key_compression_type => 'COMPRESS 1', index_tablespace => 'NEWIDXTBS', lob_compression_type => 'COMPRESS HIGH', lob_tablespace => 'SLOBTBS', lob_store_as => 'SECUREFILE'); END;
関連項目: 「REDEF_TABLEプロシージャを使用したオンライン再定義の実行」については、『Oracle Database管理者ガイド』 を参照してください。 |
このプロシージャは、再定義中の表の依存オブジェクト(索引、トリガー、制約またはマテリアライズド・ビューのログ)および仮表の対応する依存オブジェクトを登録します。
このプロシージャを使用すると、各表で異なる属性の同じオブジェクトを持つことができます。たとえば、索引の場合、記憶域および表領域の属性は異なる可能性がありますが、索引付けされた列は同じままです。
構文
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, continue_after_errors IN BOOLEAN := FALSE copy_vpd_opt IN BINARY_INTEGER := CONS_VPD_NONE);
パラメータ
表122-9 START_REDEF_TABLEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
表のスキーマ名。 |
|
再定義する表の名前。 |
|
仮表の名前。カンマで区切られた仮表名のリストを指定できます。 |
|
元の表の列から仮表の列にマッピングする情報。(これは問合せの |
|
使用する再定義方法のタイプ。
|
|
このオプション・パラメータは、仮表の初期インスタンス化時に行を順序付けるために使用する列のリストを、オプション・キーワードの昇順/降順とともに受け入れます(順序付けは初期インスタンス化についてのみ実行され、その後の同期化では行われません)。 |
|
再定義するパーティションの名前。表の単一パーティションのみを再定義する場合は、このパラメータにパーティション名を指定します。 |
|
複数のパーティションを再定義する場合、次のパーティションに対する操作を続けて実行できます(バッチ化されたパーティション再定義にのみ適用される)。 |
|
オンライン再定義におけるVPDポリシーの処理方法を指定します。 |
例
int_salestable1
、int_salestable2
およびint_salestable3
の仮表をそれぞれ使用して、表'STEVE.salestable'
に含まれる3つのパーティション(sal03q1、sal03q2およびsal03q3
)の再定義を開始します。操作がsal03q1
で失敗した場合でも、sal03q3
まで操作は続行されます。
DBMS_REDEFINITION.START_REDEF_TABLE( uname => 'STEVE', orig_table => 'salestable', int_table => 'int_salestable1, int_salestable2, int_salestable3', col_mapping => NULL, options_flag => DBMS_REDEFINITION.CONS_USE_ROWID, part_name => 'sal03q1,sal03q2,sal03q3', continue_after_errors => TRUE);
VPDポリシーを自動的にコピーすることを指定します。
EXECUTE DBMS_REDEFINITION.START_REDEF_TABLE ( uname => 'SCOTT', orig_table => 'T', int_table => 'INT_T', copy_vpd_opt => DBMS_REDEFINITION.CONS_VPD_AUTO);
このプロシージャは、仮表と元の表との同期を保ちます。
構文
DBMS_REDEFINITION.SYNC_INTERIM_TABLE ( uname IN VARCHAR2, orig_table IN VARCHAR2, int_table IN VARCHAR2, part_name IN VARCHAR2 := NULL, continue_after_errors IN BOOLEAN := FALSE);
パラメータ
表122-10 SYNC_INTERIM_TABLEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
表のスキーマ名。 |
|
再定義する表の名前。 |
|
仮表の名前。カンマで区切られた仮表名のリストを指定できます。 |
|
再定義するパーティションの名前。表の単一パーティションのみを再定義する場合は、このパラメータにパーティション名を指定します。 |
|
複数のパーティションを再定義する場合、次のパーティションに対する操作を続けて実行できます(バッチ化されたパーティション再定義にのみ適用される)。 |
使用上の注意
このステップは、オンライン再定義を完了する前に、FINISH_REDEF_TABLEプロシージャで処理する必要のある同期化の量を最小化するのに役立ちます。
このプロシージャは、仮表で長時間実行される操作(CREATE
INDEX
など)と操作の間でコールして元の表のデータと仮表を同期化し、こうした操作の処理を高速化します。
このプロシージャは、再定義中の表の依存オブジェクト(索引、トリガー、制約またはマテリアライズド・ビューのログ)および仮表の対応する依存オブジェクトの登録を解除します。