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;
/

编辑:

是的,我知道它不是严格意义上的 ACID,因为它会在一瞬间绕过 D 部分。问题是 - 它是否“和”ACID 一样好,因为它与只使用真正 COMMIT 的版本没有任何不同的可能场景?还是我弄错了,可能会有所不同?

4

1 回答 1

1

一句话:没有。ACID 中的 D 代表 Durability,这意味着即使数据库在之后立即崩溃,提交 100% 也能保证事务被保留。异步提交为违反 ACID 的这一方面提供了机会。

有关使用异步提交的优点/缺点的更多信息在这里:http ://www.orafaq.com/node/93

于 2012-06-01T13:54:04.433 回答