OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

一括更新の際のロールバックセグメント

  • 暇なときにでも
  • 質問No.181923
  • 閲覧数396
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 62% (5/8)

 ただいまOracleの勉強中でふと気になったので、暇なときにでもお答えくださいませんか。

 A と B と二つのテーブルがあって、一方の値で他方を一括更新かけるのに、以下のような SQL を発行したとします。

UPDATE TABLE_A A
SET ( A.COL_1 ) =
(SELECT B.COL_2 FROM TABLE_B B, A WHERE B.COL_KEY = A.COL_KEY)

 この場合、A のデータがもし100万件あれば100万回、サブクエリーを実行して UPDATEをかけるといった処理が走ると思いますが、このとき、ロールバックセグメントも100万件分の大きさが必要になるのでしょうか?

 そして、もしロールバックセグメントが不足した場合は、全体がロールバックされて何もなかったことになるのでしょうか?
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル10

ベストアンサー率 42% (79/186)

更新の条件がすべて当てはまるのであれば、100万件のロールバックセグメントが必要になります。(実際は、もう少しいる)

まずひとつ、このSQL文を実行しても必ずしも100万回のサブクエリが走るとはいえません。Oracleのオプティマイザがもう少しいいパスを見つけるでしょう。

それから、先ほども書いたように、条件があわなければ、Updateをかけませんので必ずしも100万件の更新をするわけではありません。

ロールバックセグメントの容量が足りなくなれば、すべてロールバックされますので、何もなかったことになります。(件数によりますが、ものすごく時間はかかると思います)
お礼コメント
Snowman

お礼率 62% (5/8)

明快なお答え,ありがとうございます。
オプティマイザがもう少しいいパスを見つけるというのはなるほどと思いました。

ロールバックセグメントの件は了解です。実際、やってみたところロールバックされてしまいました(^^;;
投稿日時 - 2001-12-16 04:06:48
-PR-
-PR-
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ