1

Oracle 11g で大規模なインデックス構成テーブル (2,000 万行) の主キーを更新する必要があります。

複数の UPDATE クエリを使用してこれを行うことは可能ですか? つまり、一度に 100,000 行と言う小さな UPDATE が多数あります。問題は、これらの UPDATE バッチの 1 つが一時的に重複する主キー値を生成する可能性があることです (すべての UPDATE が完了すると、重複はなくなります)。

したがって、主キー制約を一時的に無効にする (ただし、これは IOT に必要です!) か、テーブルを一時的に別の方法で変更することは可能でしょうか。このテーブルに排他的かつオフラインでアクセスできます。

私が見ることができる唯一の解決策は、新しいテーブルを作成し、完了したら元のテーブルを削除して、新しいテーブルの名前を元のテーブル名に変更することです。

私は別の可能性を見逃していますか?

4

2 に答える 2

0

主キー制約は定義上一意のインデックスであるため、IOT から主キー制約を無効化/削除することはできません。

このように IOT を変更する必要がある場合は、新しいプレーン ヒープ テーブルに対して CTAS (テーブルを作成) を実行し、メンテナンスを行ってから、新しい IOT を CTAS します。

何かのようなもの:

create table t_temp as select * from t_iot;
-- do maintenance
create table t_new_iot as select * from t_temp;

ただし、単純に新しいフィールドを既存のキーに追加または結合する必要がある場合は、新しい IOT 構造を作成し、古い IOT からクエリを使用して直接入力することで、1 つの手順でこれを行うことができます。

残念ながら、これは IOT の欠点の 1 つです。

于 2014-10-01T03:04:09.407 に答える