在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的版本不同?或者我错了,可能会有区别?
答案 0 :(得分:1)
总之:不。 ACID中的D代表持久性,这意味着提交100%保证即使数据库在之后立即崩溃也会保留事务。异步提交为违反ACID的这一方面提供了一个机会窗口。
有关使用异步提交的优缺点的更多信息,请访问:http://www.orafaq.com/node/93