129 DBMS_REDEFINITION

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

この章のトピックは、次のとおりです:

参照:

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

129.1 DBMS_REDEFINITIONの概要

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

129.2 DBMS_REDEFINITIONのセキュリティ・モデル

DBMS_REDEFINITIONパッケージ内のサブプログラムは、実行者権限(現行のユーザーの権限)を使用して実行されます。

次の2つのモードがあります。

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

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

129.3 DBMS_REDEFINITIONの定数

DBMS_REDEFINITIONパッケージは、パラメータ値の指定に使用するいくつかの定数を定義します。

表129-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_VPD_AUTO

BINARY_INTEGER

2

VPDポリシーを自動的にコピーすることを示すために使用します。

CONS_VPD_MANUAL

BINARY_INTEGER

4

VPDポリシーを手動でコピーすることを示すために使用します。

CONS_VPD_NONE

BINARY_INTEGER

1

元の表にVPDポリシーが含まれていないことを示すために使用します。

129.4 DBMS_REDEFINITIONの操作上のノート

DBMS_REDEFINITIONには、次の操作上のノートが適用されます。

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

129.5 DBMS_REDEFINITIONのルールおよび制限

DBMS_REDEFINITIONパッケージの実装には、様々なルールおよび制限が適用されます。

これらの詳細は、『Oracle Database管理者ガイド』を参照してください。

129.6 DBMS_REDEFINITIONの例

次の例では、DBMS_REDEFINITIONの機能を示します。

2つの表EMPEMP_INTを、元の表および仮表としてそれぞれ作成します。

CREATE TABLE "EMP"
( "EMPNO" NUMBER(4,0) PRIMARY KEY,
"ENAME" VARCHAR2(10),
"JOB" VARCHAR2(9),
"MGR" NUMBER(4,0),
"HIREDATE" DATE,
"SAL" NUMBER(7,2),
"COMM" NUMBER(7,2),
"DEPTNO" NUMBER(2,0)) 

TABLESPACE myts;

CREATE TABLE "EMP_INT"
( "EMPNO" NUMBER(4,0) PRIMARY KEY,
"ENAME" VARCHAR2(10),
"JOB" VARCHAR2(9),
"MGR" NUMBER(4,0),
"HIREDATE" DATE,
"SAL" NUMBER(7,2),
"COMM" NUMBER(7,2),
"DEPTNO" NUMBER(2,0)) 

TABLESPACE compressed_ts;

標準のマルチステップ再定義

DBMS_REDEFINITION.START_REDEF_TABLE(‘SCOTT’, ‘EMP’, ‘EMP_INT’, ENABLE_ROLLBACK => TRUE);
DBMS_REDEFINITION.FINISH_REDEF_TABLE(‘SCOTT’, ‘EMP’, ‘EMP_INT’);

DBAは、表EMPを表領域mytsからcompressed_tsに移動した後、アプリケーションのパフォーマンスを2日間評価すると仮定します。sync_interim_table SYNC_INTERIM_TABLEプロシージャを実行して、両方の表を同期状態に保つことができます(たとえば、毎時)。

DBMS_REDEFINITION.SYNC_INTERIM_TABLE(‘SCOTT’, ‘EMP’, ‘EMP_INT’);

ケース1 - DBAはパフォーマンスに満足しないため、ロールバックを行うことを決定します。

DBMS_REDEFINITION.ROLLBACK(‘SCOTT’, ‘EMP’, ‘EMP_INT’);

ケース2 - DBAはパフォーマンスに満足したため、ロールバックを行わないことを決定します。

DBMS_REDEFINITION.ABORT_ROLLBACK(‘SCOTT’, ‘EMP’, ‘EMP_INT’);

これにより、ロールバックの可能性はなくなります。

単一ステップ再定義

DBMS_REDEFINITION.REDEF_TABLE(’SCOTT’,’EMP’,'ROW STORE COMPRESS ADVANCED', enable_rollback => TRUE);

ノート:

REDEF_TABLEプロシージャを使用して表を再定義した場合は、表のオンライン再定義のロールバックはサポートされません。

129.7 DBMS_REDEFINITIONサブプログラムの要約

この表は、DBMS_REDEFINITIONサブプログラムを示し、簡単に説明しています。

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

サブプログラム 説明

ABORT_REDEF_TABLEプロシージャ

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

ABORT_ROLLBACKプロシージャ

ロールバックを中断します。

ABORT_UPDATEプロシージャ

EXECUTE_UPDATEプロシージャで開始された更新を中断します。

CAN_REDEF_TABLEプロシージャ

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

COPY_TABLE_DEPENDENTSプロシージャ

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

EXECUTE_UPDATEプロシージャ

表への一括更新のパフォーマンスを最適化します。

FINISH_REDEF_TABLEプロシージャ

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

REDEF_TABLEプロシージャ

いくつかの再定義ステップが統合された単一のプッシュボタン・インタフェースを提供します。

REGISTER_DEPENDENT_OBJECTプロシージャ

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

ROLLBACKプロシージャ

ロールバックを実行します。

SET_PARAMプロシージャ

再定義IDによって識別される再定義プロセスで使用される、指定したパラメータの新しい値を設定します。

START_REDEF_TABLEプロシージャ

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

SYNC_INTERIM_TABLEプロシージャ

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

UNREGISTER_DEPENDENT_OBJECTプロシージャ

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

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

パラメータ

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

パラメータ 説明

uname

表のスキーマ名。

orig_table

再定義する表の名前。

int_table

仮表の名前。カンマで区切られた仮表名のリストを指定できます。

part_name

再定義するパーティションの名前。表の単一パーティションのみを再定義する場合は、このパラメータにパーティション名を指定します。NULLを指定すると、テーブル全体が再定義されます。カンマで区切られた、再定義するパーティション名のリストを指定できます。

129.7.2 ABORT_ROLLBACKプロシージャ

このプロシージャは、再定義された表のロールバックを中断します。

表のオンライン再定義がSTART_REDEF_TABLEプロシージャで開始された場合、enable_rollbackパラメータをTRUEに設定して、表のオンライン再定義で実行された変更に対してロールバックを有効にできます。オンライン再定義で行われた変更を保持する場合は、ロールバックを中断して、ロールバックを有効にするデータベース・オブジェクトをクリーンアップできます。

構文

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

パラメータ

表129-4 ABORT_ROLLBACKプロシージャのパラメータ

パラメータ 説明

uname

表のスキーマ名。

orig_table

再定義する表の名前。

int_table

仮表の名前。

part_name

再定義するパーティションの名前

129.7.3 ABORT_UPDATEプロシージャ

このプロシージャは、RDBMS_REDEFINITIONパッケージのEXECUTE_UPDATEプロシージャで開始された更新を中断できます。

構文

DBMS_REDEFINITION.ABORT_UPDATE (
   update_stmt  IN  CLOB); 

パラメータ

表129-5 ABORT_UPDATEプロシージャのパラメータ

パラメータ 説明

update_stmt

中断するSQL UPDATE文。

SQL文は、EXECUTE_UPDATEプロシージャのSQL文と完全に一致する必要があります。

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

パラメータ

表129-6 CAN_REDEF_TABLEプロシージャのパラメータ

パラメータ 説明

uname

表のスキーマ名。

tname

再構成する表の名前。

options_flag

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

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

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

part_name

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

例外

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

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

パラメータ

表129-7 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プロシージャを使用して、クローニングした依存オブジェクトを手動で登録することもできます。

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

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

129.7.6 EXECUTE_UPDATEプロシージャ

このプロシージャは、表への一括更新のパフォーマンスを最適化できます。REDOログに更新が記録されないため、パフォーマンスが最適化されます。

EXECUTE_UPDATEプロシージャは、仮表、マテリアライズド・ビュー、マテリアライズド・ビュー・ログなどのオンライン表再定義のコンポーネントを自動的に使用して、表のバルク更新を最適化します。また、EXECUTE_UPDATEプロシージャは影響を受ける行のフラグメンテーションも除去して、アトミックな更新を保証します。バルク更新でエラーが発生した場合は、ABORT_UPDATEプロシージャを使用して、EXECUTE_UPDATEプロシージャで行った変更を元に戻すことができます。

構文

DBMS_REDEFINITION.EXECUTE_UPDATE (
   update_stmt  IN  CLOB); 

パラメータ

表129-8 EXECUTE_UPDATEプロシージャのパラメータ

パラメータ 説明

update_stmt

SQL UPDATE文。

129.7.7 FINISH_REDEF_TABLEプロシージャ

このプロシージャは、再定義プロセスを完了します。

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

構文

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,
   disable_rollback        IN   PLS_INTEGER := FALSE);

パラメータ

表129-9 FINISH_REDEF_TABLEプロシージャのパラメータ

パラメータ 説明

uname

表のスキーマ名。

orig_table

再定義する表の名前。

int_table

仮表の名前。カンマで区切られた仮表名のリストを指定できます。

part_name

再定義するパーティションの名前。表の単一パーティションのみを再定義する場合は、このパラメータにパーティション名を指定します。NULLを指定すると、テーブル全体が再定義されます。カンマで区切られた、再定義するパーティション名のリストを指定できます。

dml_lock_timeout

必要なロックを獲得するために待機する秒数を指定します(この秒数が経過するとプロシージャは失敗する)。設定可能なタイムアウトの値の範囲は、0から1,000,000です。デフォルトはNULL(待機モード)です。

continue_after_errors

複数のパーティションを再定義する場合、次のパーティションに対する操作を続けて実行できます(バッチ化されたパーティション再定義にのみ適用される)。

disable_rollback

TRUEに設定すると、ロールバック・オプションがSTART_REDEF_TABLEプロシージャで有効にされていた場合、無効になります。TRUEを指定すると、ロールバックを有効にするデータベース・オブジェクトをクリーンアップします。

SH.SALESに必要なロックを最大600秒待機します。

EXECUTE DBMS_REDEFINITION.FINISH_REDEF_TABLE (
  'SH', 'SALES', 'INT_SALES', 600);

129.7.8 REDEF_TABLEプロシージャ

このプロシージャでは、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,
   refresh_dep_mviews          IN  VARCHAR2 := 'N',
   dml_lock_timeout            IN  PLS_INTEGER := NULL); 

パラメータ

表129-10 REDEF_TABLEプロシージャのパラメータ

パラメータ 説明

uname

表のスキーマ名。

tname

再定義する表の名前。

table_compression_type

表圧縮句のテキスト文字列。NULLは変更がないことを示します。

table_part_tablespace

表またはパーティション全体の表領域名。NULLは変更がないことを示します。

index_key_compression_type

表のすべての索引に使用する圧縮句のテキスト文字列。NULLは変更がないことを示します。

index_tablespace

表のすべての索引に使用する表領域名。NULLは変更がないことを示します。

lob_compression_type

表全体のすべてのLOBに使用する圧縮句のテキスト文字列。NULLは変更がないことを示します。

lob_tablespace

表のすべてのLOBに使用する表領域名。NULLは変更がないことを示します。

lob_store_as

LOBストアは、'SECUREFILE'または'BASICFILE'として指定されます。NULLは変更がないことを示します。

refresh_dep_mviews

'Y'に設定すると、再定義操作の最後に一度、依存マテリアライズド・ビューの高速リフレッシュが実行されます。

dml_lock_timeout

必要なロックを獲得するために待機する秒数を指定します(この秒数が経過するとプロシージャは失敗する)。設定可能なタイムアウトの値の範囲は、0から1,000,000です。デフォルトはNULL(待機モード)です。

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管理者ガイド』を参照してください。

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

パラメータ

表129-11 REGISTER_DEPENDENT_OBJECTプロシージャのパラメータ

パラメータ 説明

uname

表のスキーマ名。

orig_table

再定義する表の名前。

int_table

仮表の名前。

dep_type

依存オブジェクトのタイプ(「定数」および「操作上のノート」を参照)

dep_owner

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

dep_orig_name

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

dep_int_name

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

使用上のノート

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

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

129.7.10 ROLLBACKプロシージャ

このプロシージャは、表のオンライン再定義後の表への変更をロールバックして、表を元の定義に戻し、表に対して行われたDML変更を保持します。

構文

DBMS_REDEFINITION.ROLLBACK (
   uname                   IN  VARCHAR2,
   orig_table              IN  VARCHAR2,
   int_table               IN  VARCHAR2 := NULL,
   part_name               IN  VARCHAR2 := NULL,
   dml_lock_timeout        IN  PLS_INTEGER := NULL,
   continue_after_errors   IN  BOOLEAN := FALSE);

パラメータ

表129-12 ROLLBACKプロシージャのパラメータ

パラメータ 説明

uname

再定義する表のスキーマ名。

orig_table

再定義する表の名前。

int_table

仮表の名前。

part_name

再定義するパーティションの名前。

dml_lock_timeout

必要なロックを獲得するために待機する秒数を指定します(この秒数が経過するとプロシージャは失敗する)。設定可能なタイムアウトの値の範囲は、0から1,000,000です。デフォルトはNULL(待機モード)です。

continue_after_errors

複数のパーティションの再定義変更をロールバックする場合、次のパーティションに対する操作を続けて実行できます(バッチ化されたパーティション再定義にのみ適用される)。

129.7.11 SET_PARAMプロシージャ

このプロシージャは、再定義IDによって識別される再定義プロセスで使用される、指定したパラメータの新しい値を設定します。

ノート:

現在、このプロシージャで変更できる値は、REDEF_TABLEプロシージャまたはSTART_REDEF_TABLEプロシージャで指定されたrefresh_dep_mviewsパラメータの値のみです。再定義IDを特定し、表のオンライン再定義操作のrefresh_dep_mviewsパラメータの値を確認するには、DBA_REDEFINITION_STATUSビューを問い合せます。

構文

DBMS_REDEFINITION.SET_PARAM (
   redefinition_id  IN  VARCHAR2,
   param_name       IN  VARCHAR2,
   param_value      IN  VARCHAR2); 

パラメータ

表129-13 SET_PARAMプロシージャのパラメータ

パラメータ 説明

redefinition_id

再定義プロセスを識別する再定義ID。

param_name

パラメータ名。

param_value

新しいパラメータ値。

129.7.12 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,
   continue_after_errors   IN  BOOLEAN := FALSE,    
   copy_vpd_opt            IN  BINARY_INTEGER := CONS_VPD_NONE,
   refresh_dep_mviews      IN  VARCHAR2 := 'N',
   enable_rollback         IN  BOOLEAN := FALSE);

パラメータ

表129-14 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を指定すると、テーブル全体が再定義されます。カンマで区切られた、再定義するパーティション名のリストを指定できます。

continue_after_errors

複数のパーティションを再定義する場合、次のパーティションに対する操作を続けて実行できます(バッチ化されたパーティション再定義にのみ適用される)。

copy_vpd_opt

オンライン再定義におけるVPDポリシーの処理方法を指定します。

refresh_dep_mviews

'Y'に設定すると、START_REDEF_TABLEプロシージャの実行時、SYNC_INTERIM_TABLEプロシージャの実行のたび、およびFINISH_REDEF_TABLEプロシージャの実行時に、依存マテリアライズド・ビューの高速リフレッシュが実行されます。

enable_rollback

TRUEに設定すると、ロールバック・オプションが有効になります。

このパラメータをTRUEに設定すると、再定義中に作成された仮表が再定義完了後もOracle Databaseに保持されます。SYNC_INTERIM_TABLEプロシージャを実行して仮表を定期的に同期し、再定義された表に対して行われたDML変更を仮表に適用できます。内部マテリアライズド・ビューおよびマテリアライズド・ビュー・ログを使用して、仮表をメンテナンスできます。表のオンライン再定義をROLLBACKプロシージャでロールバックする場合は、仮表が同期され、表が元の定義になるようにOracle Databaseは仮表にスイッチ・バックします。

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

129.7.13 SYNC_INTERIM_TABLEプロシージャ

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

構文

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

パラメータ

表129-15 SYNC_INTERIM_TABLEプロシージャのパラメータ

パラメータ 説明

uname

表のスキーマ名。

orig_table

再定義する表の名前。

int_table

仮表の名前。カンマで区切られた仮表名のリストを指定できます。

part_name

再定義するパーティションの名前。表の単一パーティションのみを再定義する場合は、このパラメータにパーティション名を指定します。NULLを指定すると、テーブル全体が再定義されます。カンマで区切られた、再定義するパーティション名のリストを指定できます。

continue_after_errors

複数のパーティションを再定義する場合、次のパーティションに対する操作を続けて実行できます(バッチ化されたパーティション再定義にのみ適用される)。

使用上のノート

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

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

129.7.14 UNREGISTER_DEPENDENT_OBJECTプロシージャ

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

構文

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

パラメータ

表129-16 UNREGISTER_DEPENDENT_OBJECTプロシージャのパラメータ

パラメータ 説明

uname

表のスキーマ名。

orig_table

再定義する表の名前。

int_table

仮表の名前。

dep_type

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

dep_owner

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

dep_orig_name

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

dep_int_name

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