通常のテーブルのパーティションテーブルで変換DBMS_REDEFINITION

はじめに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 /

おすすめ

転載: www.linuxidc.com/Linux/2019-07/159602.htm