什么时候Oracle会话临时表中的数据会被删除?

App*_*rew 4 sql oracle temp-tables

我已经读过,在会话表中,数据在提交过程中仍然存在.用Ask Tom的话来说.

ON COMMIT PRESERVE ROWS使这成为一个基于会话的临时表.在注销之前,行将保留在此表中.只有我可以看到它们,即使我提交后也没有其他会话会看到"我的"行

这里的问题短语是"直到注销".以Web应用程序为例,该应用程序与DB保持单一连接.因此,这意味着登录到Web应用程序的所有用户将共享相同的数据库会话.那么,这是否意味着所有用户都将在该临时表中看到相同的内容?

在实际的Web应用程序中,我们通常会维护多个DB连接.这些连接保存在"池"中,并且可以为许多用户重用它们.在这种情况下,行为可能非常不稳定,用户可能会查看上一个用户填充的数据.

Mar*_*bak 7

这也是Oracle提供"ON COMMIT DELETE ROWS"选项的原因.

全局临时表中的数据可以具有会话范围(即ON COMMIT PRESERVE ROWS)或事务范围(ON COMMIT DELETE ROWS).

显然,在连接池和共享服务器/共享会话的情况下,您将需要事务范围(ON COMMIT DELETE ROWS).

希望有所帮助.