別のプラットフォームへの移行プロセスでは、パーティション テーブルとパーティション結合インデックスが新しいシステムに復元されるか、コピーされた後で、それらのテーブルと結合インデックスのテーブル ヘッダーがデータベースによって再生成されます。
新しいシステムで、別のハッシュ アルゴリズムが使用されているか、16ビットのハッシュ バケットではなく20ビットのハッシュ バケットが設定されている場合は、ハッシュ関数によって返される値の変動によって、パーティション式の評価が変わってしまう可能性があります。また、HASHBUCKET関数を使用してパーティション式を指定したときに、再生成後のテーブル ヘッダーによって、パーティション テーブルとパーティション結合インデックスから不正なクエリー結果が返されることがあります。HASHBUCKET機能の詳細は、<Teradata Vantage™ - SQL関数、式、および述部、B035-1145>を参照してください。
以下の手順を使用して、影響を受けたいずれかのテーブルまたは結合インデックスのパーティションを再検証する必要があります。
- 移行の前にpre_upgrade_prep.plスクリプトを実行して、この問題によって影響を受けたパーティション テーブルとパーティション結合インデックスを特定します。次に、hashbucket_ppi.rptスクリプトを実行します。
pre_upgrade_prep.plスクリプトは、移行後に再検証が必要なテーブルまたは結合インデックスを検索して報告するSELECTリクエストを実行します。
スタンドアロンのSELECTリクエストを実行して、再検証が必要な行を返す場合は、pre_upgrade_prep.plスクリプトが実行するリクエストを複製するために以下のリクエストを実行できます。
SELECT TRIM(DataBasenamei)||'.'||TRIM(TVMNamei), TableKind FROM DBC.TableConstraints AS tc JOIN DBC.TVM ON tc.TVMID=TVM.TVMID JOIN DBC.Dbase ON tc.DBaseId=Dbase.DatabaseId WHERE ConstraintType = 'Q' AND UPPER(TableCheck) LIKE '%HASHBUCKET%' ORDER BY 1;
再検証するデータベース オブジェクト ステップ パーティション テーブル 2. パーティション結合インデックス 5. - pre_upgrade_prep.plで特定した各データ テーブルの行を再検証します(結合インデックスの行の場合は、該当しません)。
データ テーブルの再検証で、行が正しいパーティションに格納されていることを確認するには、save_tableによるnullパーティション ハンドラーを指定する必要があります。
パーティション結合インデックスの場合にnullパーティション ハンドラー句WITH DELETEまたはWITH INSERT [INTO] save_tableを指定することはできません。パーティション テーブルの場合にこのスクリプトが使用する手順を以下にまとめます。
- 影響を受けたパーティション テーブルに対してDDLを使用して、保存テーブルを作成します。ただし、save_tableには、パーティションまたはセカンダリ インデックスを指定しません。
このステップが当てはまるのは、パーティションtableを再検証する場合に限られます。パーティション結合インデックスを再検証する場合に、nullパーティション ハンドラーを使用することはできません。
- 以下のALTER TABLEリクエストを実行して、table_nameのパーティションを再検証します。
ALTER TABLE database_name.table_name REVALIDATE WITH DELETE;
または
ALTER TABLE database_name.table_name REVALIDATE WITH INSERT INTO save_table;
説明
- database_name
- table_nameを含むデータベースまたはユーザーの名前を指定します。
- table_name
- 影響を受けるパーティション テーブルの名前を指定します。
- save_table
- パーティション テーブルの再検証時に作成されるnullパーティションを保存するために作成するテーブル名を指定します。
- 影響を受けたパーティション テーブルに対してDDLを使用して、保存テーブルを作成します。ただし、save_tableには、パーティションまたはセカンダリ インデックスを指定しません。
- このステップで実行される処理は、save_tableに行が入っているかどうかによって異なります。
save_tableの状態 結果 行が入っていない データ テーブルの再検証プロセスが完了します。 行が入っている save_tableで各行をどのように処理するかを選択できます。 - 行を再挿入できるように、元のテーブルのパーティションを再定義します。
または
- 行を別のテーブルに保存します。
- save_table内の各行が正常に処理されたら、NULLパーティション ハンドラー保存テーブルを削除します。
- 影響を受けた各パーティション結合インデックスを削除し、再作成して、パーティション結合インデックスの行を再検証します。