はじめに1. DBMS_REDEFINITION
- インポート/エクスポート。
- ...選択...挿入します。
- ゾーニングの法律を交換。
- オンライン再定義(DBMS_REDEFINITION)。
これらのプログラムのアイデアは、新しいパーティションテーブルを作成するには、その後、新しいテーブルトップに古いテーブルからデータを転送するために、対応する依存関係を転送し、最終的に再テーブル名を、新しいテーブルの古いテーブルをし、名前の変更です。前の三つのプログラムと比較すると、DBMS_REDEFINITIONはほとんどので、現在一般的に使用されている変換プログラムのパーティションテーブルになってきて、古いテーブルの通常の使用には影響しません。
大きなテーブルTP_CARD_INFO(約12万レコード)の次のプロジェクトは、例えば、パーティションテーブルの手順を説明するために、通常のテーブルに変換します。
通常のパーティションテーブルかどうか2.チェック
これは、主キーに確認されました。
SQL>開始
2 DBMS_REDEFINITION.CAN_REDEF_TABLE( 'HSADM'、 'TP_CARD_INFO'、dbms_redefinition.cons_use_pkのを)。
3末端;
4 /
PL / SQLプロシージャが正常に完了します
エラー出力を表していません。
3.パーティションテーブルを作成します。
:主キーパーティション、各これ以上の200万人以上を記録することで
表TP_CARD_INFO_PARTを作成する
(
ID番号(15)NOT NULL、
card_num VARCHAR2(32)、
card_num2 VARCHAR2(32)、
CREATE_TIME日、
CREATE_USER VARCHAR2(16)、
UPDATE_TIMEのDATE、
VARCHAR2(16)update_user、
print_date VARCHAR2(8)、
print_by NVARCHAR2 (40)
、(16)VARCHAR2 をprint_unit_code
print_unit_name NVARCHAR2(70)、
print_reason NVARCHAR2(40)、
NVARCHAR2 finger_absence(10)
)
の範囲によってパーティション(ID)
(
パーティションTP_CARD_INFO_01値未満(2000000)表領域HS_DAT、
パーティションTP_CARD_INFO_02値は、以下表領域のHS_DAT(4000000)より、
パーティションTP_CARD_INFO_03値以下(6000000)表領域HS_DATより、
パーティションTP_CARD_INFO_04値以下(8000000)表領域HS_DATより、
パーティションTP_CARD_INFO_05値未満(10000000)表領域HS_DAT、
パーティションTP_CARD_INFO_06値未満(12000000)表領域HS_DAT、
パーティションTP_CARD_INFO_99値未満( MAXVALUE)表領域HS_DAT
)。
4.データの移行
SQL> execのDBMS_REDEFINITION.START_REDEF_TABLE( 'HSADM'、 'TP_CARD_INFO'、 'TP_CARD_INFO_PART');
PL / SQLプロシージャが正常に完了しました
全体のプロセスは、256秒です。
移行許可オブジェクト
SQL>宣言
2 NUM_ERRORS PLS_INTEGERを。
3開始
4 DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS( 'HSADM'、 'TP_CARD_INFO'、 'TP_CARD_INFO_PART'、
5 dbms_redefinition.cons_orig_params、TRUE、TRUE、TRUE、TRUE、NUM_ERRORS)を、
6終わり;
7 /
PL / SQLプロシージャが正常に完了します
526秒で全体のプロセス。
6.間違ったクエリがあります
SQL>を選択object_nameの、base_table_name、DBA_REDEFINITION_ERRORSからddl_txt。
OBJECT_NAME BASE_TABLE_NAME DDL_TXT
----------------------------------------------- --------------------------------- ----------------- -------------------------------------------------- -------------
エラーなし。
7.終了再定義プロセス
開始
2 DBMS_REDEFINITION.FINISH_REDEF_TABLE( 'HSADM'、 'TP_CARD_INFO'、 'TP_CARD_INFO_PARTを');
3末端;
4 /
PL / SQLプロシージャが正常に完了します
73秒全体のプロセス。
出口8.例外が発生します
珍しい再定義プロセスの場合は、終了手順を実行する必要があります。
SQL>開始
2 dbms_redefinition.abort_redef_table( 'HSADMを'、 'TP_CARD_INFO'、 'TP_CARD_INFO_PART');
3末端;
4 /