ヘッダーをスキップ
Oracle® Database PL/SQLパッケージおよびタイプ・リファレンス
11g リリース2(11.2)
B56262-06
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

110 DBMS_REDEFINITION

DBMS_REDEFINITIONパッケージは、オンラインで表の再定義を行うためのインタフェースを提供します。


関連項目:

オンラインで表を再定義する方法の詳細は、『Oracle Database管理者ガイド』を参照してください。

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


DBMS_REDEFINITIONの使用方法


概要

オンラインで再定義を行うには、段階的に維持可能なローカル・マテリアライズド・ビューを使用します。これらのログは、マスター表に対する変更を追跡し、リフレッシュ同期時にマテリアライズド・ビューで使用されます。


セキュリティ・モデル

DBMS_REDEFINTIONパッケージ内のサブプログラムは、実行者権限(現行のユーザーの権限)を使用して実行されます。次の2つのモードがあります。

  • USERモードでは、CREATE TABLEおよびCREATE MVIEW権限を持つユーザーが自身のスキーマ内にある表を再定義できます。

  • FULLモードでは、ANY権限を持つユーザーが任意のスキーマ内にある表を再定義できます。


定数

DBMS_REDEFINITIONパッケージでは、表110-1「DBMS_REDEFINITIONの定数」に示す定数が使用されます。

表110-1 DBMS_REDEFINITION定数

定数 タイプ 説明

CONS_CONSTRAINT

PLS_INTEGER

3

依存オブジェクト・タイプが制約であることを指定するために使用します。

CONS_INDEX

PLS_INTEGER

2

依存オブジェクト・タイプが索引であることを指定するために使用します。

CONS_MVLOG

PLS_INTEGER

10

マテリアライズド・ビュー・ログを、表の依存オブジェクトとしてREGISTER_DEPENDENT_OBJECTプロシージャおよびUNREGISTER_DEPENDENT_OBJECTプロシージャを使用して登録(または登録解除)する場合に使用します。

CONS_ORIG_PARAMS

PLS_INTEGER

1

索引は元の記憶域パラメータでクローニングする必要があることを指定するために使用します。

CONS_TRIGGER

PLS_INTEGER

4

依存オブジェクト・タイプがトリガーであることを指定するために使用します。

CONS_USE_PK

BINARY_INTEGER

1

再定義は主キーまたは擬似主キー(すべてのコンポーネント列にNULLでない制約がある一意キー)を使用して行う必要があることを示すために使用します。

CONS_USE_ROWID

BINARY_INTEGER

2

再定義は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_INDEXCONS_MVLOGCONS_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パラメータの入力として使用します。このパラメータを使用すると、元の表の索引が、元の索引と同じ記憶域パラメータを使用して仮表にコピーされます。


ルールおよび制限

このパッケージの実装に適用する様々なルールおよび制限については、『Oracle Database管理者ガイド』を参照してください。


DBMS_REDEFINITIONサブプログラムの要約

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

サブプログラム 説明

ABORT_REDEF_TABLEプロシージャ


再定義プロセスで発生したエラーをクリーンアップし、再構成プロセスで作成されたすべての一時オブジェクトを削除します。

CAN_REDEF_TABLEプロシージャ


指定された表がオンラインで再定義可能かどうかを判断します。

COPY_TABLE_DEPENDENTSプロシージャ


元の表の依存オブジェクトを仮表にコピーします。

FINISH_REDEF_TABLEプロシージャ


再定義プロセスを完了します。

REGISTER_DEPENDENT_OBJECTプロシージャ


再定義中の表の依存オブジェクト(索引、トリガー、制約またはマテリアライズド・ビューのログ)および仮表の対応する依存オブジェクトを登録します。

START_REDEF_TABLEプロシージャ


再定義プロセスを開始します。

SYNC_INTERIM_TABLEプロシージャ


仮表と元の表との同期を保ちます。

UNREGISTER_DEPENDENT_OBJECTプロシージャ


再定義中の表の依存オブジェクト(索引、トリガー、制約またはマテリアライズド・ビュー・ログ)および仮表の対応する依存オブジェクトの登録を解除します。



ABORT_REDEF_TABLEプロシージャ

このプロシージャは、再定義プロセスで発生したエラーをクリーンアップします。START_REDEF_TABLEプロシージャのコール後で、FINISH_REDEF_TABLEプロシージャのコール前であれば、このプロシージャを使用して任意の時点で再定義プロセスを終了することもできます。このプロセスによって、マテリアライズド・ビュー・ログなどの再定義プロセスで作成された一時オブジェクトが削除されます。

構文

DBMS_REDEFINITION.ABORT_REDEF_TABLE (
   uname       IN VARCHAR2,
   orig_table  IN VARCHAR2,
   int_table   IN VARCHAR2,
  part_name    IN  VARCHAR2 := NULL);

パラメータ

表110-3 ABORT_REDEF_TABLEプロシージャのパラメータ

パラメータ 説明

uname

表のスキーマ名。

orig_table

再定義する表の名前。

int_table

仮表の名前。

part_name

再定義するパーティションの名前。表の単一パーティションのみを再定義する場合は、このパラメータにパーティション名を指定します。NULLを指定すると、テーブル全体が再定義されます。



CAN_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プロシージャのパラメータ

パラメータ 説明

uname

表のスキーマ名。

tname

再構成する表の名前。

options_flag

使用する再定義方法のタイプ。

  • dbms_redefinition.cons_use_pkの場合、再定義は主キーまたは擬似主キー(すべてのコンポーネント列にNOT NULL制約がある一意キー)を使用して行われます。デフォルトの再定義方法は主キーを使用します。

  • dbms_redefinition.cons_use_rowidの場合、再定義はROWIDを使用して行われます。

part_name

再定義するパーティションの名前。表の単一パーティションのみを再定義する場合は、このパラメータにパーティション名を指定します。NULLを指定すると、テーブル全体が再定義されます。


例外

その表がオンラインでの再定義の候補ではない場合は、エラー・メッセージが表示されます。


COPY_TABLE_DEPENDENTSプロシージャ

このプロシージャは、再定義中の表の依存オブジェクトを仮表にクローニングし、その依存オブジェクトを登録します。すでに登録されている依存オブジェクトのクローニングは行われません。

このサブプログラムは、再定義対象の表から仮表(再定義後の表を表す)に権限付与、トリガー、制約および権限などの依存オブジェクトをクローニングするために使用します。

構文

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プロシージャのパラメータ

パラメータ 説明

uname

表のスキーマ名。

orig_table

再定義する表の名前。

int_table

仮表の名前。

copy_indexes

索引をコピーするかどうかを示すフラグ。

  • 0: 索引をコピーしません。

  • dbms_redefinition.cons_orig_params: ソース索引の物理パラメータを使用して索引をコピーします。

copy_triggers

TRUEはトリガーをクローニングすることを、FALSEは何もしないことを示します。

copy_constraints

TRUEは制約をクローニングすることを、FALSEは何もしないことを示します。互換性設定が10.2以上の場合、CHECKおよびNOT NULL制約をクローニングします。

copy_privileges

TRUEは権限をクローニングすることを、FALSEは何もしないことを示します。

ignore_errors

TRUEは、特定の依存オブジェクトのクローニング中にエラーが発生した場合に、そのオブジェクトをスキップして他の依存オブジェクトのクローニングを続行することを示します。FALSEは、エラーの発生時点でクローニング・プロセスを停止することを示します。

num_errors

依存オブジェクトのクローニング中に発生したエラーの数。

copy_statistics

TRUEは統計をコピーすることを、FALSEは何もしないことを示します。

copy_mvlog

TRUEはマテリアライズド・ビュー・ログをコピーすることを、FALSEは何もしないことを示します。


使用上の注意

  • オブジェクトのクローニング中にエラーが発生しないように、列num_errorsをチェックしてから処理を行う必要があります。

  • エラーが発生した場合は、エラーの原因を修正し、COPY_TABLE_DEPENDENTSプロシージャを再度コールして、依存オブジェクトをクローニングします。また、依存オブジェクトを手動でクローニングした後、REGISTER_DEPENDENT_OBJECTプロシージャを使用して、クローニングした依存オブジェクトを手動で登録することもできます。

  • 仮表にクローニングされた参照制約はすべて無効に作成され(再定義後に自動的に有効になります)、仮表のすべてのトリガーは再定義が完了するまで実行されません。再定義が完了すると、クローニングされたオブジェクトには、それぞれクローン元のオブジェクトと同じ再定義前の名前が再び付けられます。

  • これはユーザーの責任となります(クローニングされた依存オブジェクトは再定義の影響を受けません)。すべてのトリガーがクローニングされ、これはユーザーの責任となります(クローニングされたトリガーは再定義の影響を受けません)。


FINISH_REDEF_TABLEプロシージャ

このプロシージャは、再定義プロセスを完了します。このステップの前に、新しい索引、トリガー、権限および制約を仮表に作成できます。仮表に含まれる参照制約は無効にする必要があります。このステップが完了すると、仮表の属性とデータを使用して元の表が再定義されます。このプロシージャの実行時は、元の表が一時的にロックされます。

構文

DBMS_REDEFINITION.FINISH_REDEF_TABLE (
   uname       IN VARCHAR2,
   orig_table  IN VARCHAR2,
   int_table   IN VARCHAR2,
   part_name   IN  VARCHAR2 := NULL);

パラメータ

表110-6 FINISH_REDEF_TABLEプロシージャのパラメータ

パラメータ 説明

uname

表のスキーマ名。

orig_table

再定義する表の名前。

int_table

仮表の名前。

part_name

再定義するパーティションの名前。表の単一パーティションのみを再定義する場合は、このパラメータにパーティション名を指定します。NULLを指定すると、テーブル全体が再定義されます。



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);

パラメータ

表110-7 REGISTER_DEPENDENT_OBJECTプロシージャのパラメータ

パラメータ 説明

uname

表のスキーマ名。

orig_table

再定義する表の名前。

int_table

仮表の名前。

dep_type

依存オブジェクトのタイプ(「定数」および「使用上の注意」を参照)

dep_owner

依存オブジェクトの所有者。

dep_orig_name

元の依存オブジェクトの名前。

dep_int_name

仮の依存オブジェクトの名前。


使用上の注意

  • すでに登録されているオブジェクトを登録しようとするとエラーになります。

  • エントリがすでに存在する依存オブジェクトを登録した場合、そのオブジェクトはDBA_REDEFINITION_ERRORSから自動的に削除されます。


START_REDEF_TABLEプロシージャ

このプロシージャをコールする前に、再定義後の表に必要な属性を指定して(再定義する表と同じスキーマで)空の仮表を手動で作成してから、このプロシージャをコールして再定義を開始する必要があります。

構文

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プロシージャのパラメータ

パラメータ 説明

uname

表のスキーマ名。

orig_table

再定義する表の名前。

int_table

仮表の名前。

col_mapping

元の表の列から仮表の列にマッピングする情報。(これは問合せのSELECT句の列リストと同じです)。NULLの場合は、元の表の列がすべて選択され、再定義後の名前は変更されません。

options_flag

使用する再定義方法のタイプ。

  • dbms_redefinition.cons_use_pkの場合、再定義は主キーまたは擬似主キー(すべてのコンポーネント列にNOT NULL制約がある一意キー)を使用して行われます。デフォルトの再定義方法は主キーを使用します。

  • dbms_redefinition.cons_use_rowidの場合、再定義はROWIDを使用して行われます。

orderby_cols

このオプション・パラメータは、仮表の初期インスタンス化時に行を順序付けるために使用する列のリストを、オプション・キーワードの昇順/降順とともに受け入れます(順序付けは初期インスタンス化についてのみ実行され、その後の同期化では行われません)。

part_name

再定義するパーティションの名前。表の単一パーティションのみを再定義する場合は、このパラメータにパーティション名を指定します。NULLを指定すると、テーブル全体が再定義されます。



SYNC_INTERIM_TABLEプロシージャ

このプロシージャは、仮表と元の表との同期を保ちます。

構文

DBMS_REDEFINITION.SYNC_INTERIM_TABLE (
   uname          IN  VARCHAR2,
   orig_table     IN  VARCHAR2,
   int_table      IN  VARCHAR2,
   part_name      IN  VARCHAR2 := NULL);

パラメータ

表110-9 SYNC_INTERIM_TABLEプロシージャのパラメータ

パラメータ 説明

uname

表のスキーマ名。

orig_table

再定義する表の名前。

int_table

仮表の名前。

part_name

再定義するパーティションの名前。表の単一パーティションのみを再定義する場合は、このパラメータにパーティション名を指定します。NULLを指定すると、テーブル全体が再定義されます。


使用上の注意

  • このステップは、オンライン再定義を完了する前に、FINISH_REDEF_TABLEプロシージャで処理する必要のある同期化の量を最小化するのに役立ちます。

  • このプロシージャは、仮表で長時間実行される操作(CREATE INDEXなど)と操作の間でコールして元の表のデータと仮表を同期化し、こうした操作の処理を高速化します。


UNREGISTER_DEPENDENT_OBJECTプロシージャ

このプロシージャは、再定義中の表の依存オブジェクト(索引、トリガー、制約またはマテリアライズド・ビューのログ)および仮表の対応する依存オブジェクトの登録を解除します。

構文

DBMS_REDEFINITION.UNREGISTER_DEPEPENDENT_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);

パラメータ

表110-10 UNREGISTER_DEPENDENT_OBJECTプロシージャのパラメータ

パラメータ 説明

uname

表のスキーマ名。

orig_table

再定義する表の名前。

int_table

仮表の名前。

dep_type

依存オブジェクトのタイプ。

dep_owner

依存オブジェクトの所有者。

dep_orig_name

元の依存オブジェクトの名前。

dep_int_name

仮の依存オブジェクトの名前。