私はかなり新しいSQLで、誰かが私を助けてくれるのだろうかと思っていました。1000万件以上のレコードを持つ高速更新データベース
約1,000万行のデータベースがあります。
いくつかのNULLフィールドを持つレコードを見つけて、特定の値に更新するスクリプトを作成する必要があります。
私が単純な更新ステートメントを実行することから得られる問題は、ロールバックスペースを吹き飛ばすことです。
私は、BULK COLLECT AND FETCHを使用する必要があることを読んでいました。
私の考えは、一度に10,000レコードを取り出し、更新し、コミットして、引き続き取り出すことでした。
私はGoogleで例題を探してみましたが、まだ何も見つかりませんでした。
助けが必要ですか?
ありがとうございます!
これは私がこれまで持っているものです。
DECLARE
CURSOR rec_cur IS
SELECT DATE_ORIGIN
FROM MAIN_TBL WHERE DATE_ORIGIN IS NULL;
TYPE date_tab_t IS TABLE OF DATE;
date_tab date_tab_t;
BEGIN
OPEN rec_cur;
LOOP
FETCH rec_cur BULK COLLECT INTO date_tab LIMIT 1000;
EXIT WHEN date_tab.COUNT() = 0;
FORALL i IN 1 .. date_tab.COUNT
UPDATE MAIN_TBL SET DATE_ORIGIN = '23-JAN-2012'
WHERE DATE_ORIGIN IS NULL;
END LOOP;
CLOSE rec_cur;
END;
したがって、単一のUPDATEステートメントを試してみましたが、エラーが発生しましたか?正確なエラーは何でしたか?エラーがあなたが 'UNDO'スペースから外れていた場合は、' UNDO'スペースを増やすようにDBAに依頼しましたか? 1,000万行は大したことではありません。あなたのデータベースは、数MBのディスク容量を節約するコードを書くのではなく、妥当な作業負荷を処理するためのサイズにする必要があります。 –
あなたは正しい道にいると思います。いくつかのコードを投稿すると、誰かがあなたのためにそれを批評することができるかもしれません。 –
データベースはプロダクションサーバーなので、まだ単一の更新ステートメントを実行していませんが、私の上司の経験から、以前はクラッシュしています...一括フェッチスタイルでも可能ですか? –