1

TEMPORARY テーブルで非同期コミットを発行しても問題ありませんか? トランザクションの耐久性が低下しますか?

CREATE GLOBAL TEMPORARY TABLE my_table_tmp (id number) ON COMMIT PRESERVE ROWS;
CREATE TABLE my_table (id number);

BEGIN
  INSERT --+ append
  INTO my_table_tmp (id)
  SELECT rownum 
  FROM all_objects;

  COMMIT WRITE BATCH NOWAIT; -- continue working without waiting on LGWR

  INSERT INTO my_table (id)
  SELECT id 
  FROM my_table_tmp;

  COMMIT; -- actually preserve transaction
END;
/

編集:

はい、D部分を一瞬バイパスするため、厳密にはACIDではないことを理解しています。問題は、実際の COMMIT のみが使用されているバージョンと異なるシナリオが考えられないため、ACID と「同じくらい良い」かどうかです。それとも私が間違っていて、違いがあるのでしょうか?

4

1 に答える 1

1

一言で言えば:いいえ。ACID の D は Durability を表します。これは、データベースが直後にクラッシュした場合でも、コミットが 100% トランザクションを保持することを保証することを意味します。非同期コミットは、ACID のこの側面に違反する機会を提供します。

非同期コミットを使用する利点/欠点の詳細については、http ://www.orafaq.com/node/93 を参照してください。

于 2012-06-01T13:54:04.433 に答える