2017-02-07 11 views
0

1億5000万レコードのテーブル内の列(すべての行)を更新するような状況があります。前のテーブルの更新とドロップで複製テーブルのOracle12cでの一括更新

作成が最善の方法ですが、重複したテーブルを保持するために使用可能なディスクスペースがありません。 アップデートを短時間で実行する方法は?テーブルにはパーティションがあります。 私はクリーンなアプローチは、テーブルを更新していないOracle 12cの

+0

は私たちにあなたが実行したいアップデートを表示します。 –

+0

これは、移入する新しい列か、修正したい既存の列ですか?更新された値はこのテーブルの列から派生したものか、他のテーブルから値を取得する必要がありますか? – APC

+0

既存の列のために私はsubstr(column_name、1,5)のような文字をマスクする必要があります|| 'XXXX' @ APC – siva

答えて

1

を使用しますが、更新された行の新しい列を持つ新しいテーブルを作成しています。たとえば、のは、私が列を更新するために必要な言わせていくつかの値の最大値とold_valueと呼ばれる、代わりのOLD_TABLE 1を更新することはありません:

create new_table as select foo, bar, max(old_value) from old_table; 
drop table old_table; 
rename new_table as old_table. 

あなたも、もっとスピードが必要な場合は、パラレルを使用して、この作成を行うことができますnologgingを使ってクエリを実行すると、ほとんどやり直しログが生成されません。詳細はこちらを確認することができます:https://asktom.oracle.com/pls/asktom/f?p=100:11:0::NO::P11_QUESTION_ID:6407993912330

+0

私はこの技術を認識していますがスペースは、新しいテーブルを格納するのに使用できません。@グレゴリー – siva

+1

@sivaあなたはとても小さなスペースを持っている場合は、元に戻すためのスペースが不足してしまうことがあります。ストレージスペースは安いので、Gregoryの提案を再評価することをお勧めします。 – BobC

+0

テーブルがパーティション化されている場合は、一度にテーブルパーティションを再作成できます。 – BobC