2011-11-23 80 views
4

我已经读过会话表中的数据在提交过程中存活。用文字Ask TomOracle会话临时表中的数据何时会被删除?

ON COMMIT PRESERVE ROWS使这个会话基于临时 表。行将保留在此表中,直到注销。只有我能看到,虽然他们 ,没有其他的会议永远不会看到“我”行即使我 提交

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

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

回答

7

这就是为什么Oracle提供'ON COMMIT DELETE ROWS'选项的原因。

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

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

希望有所帮助。

+0

+1实际上,OP的问题中的文章明确提到临时表“可能基于SESSION(数据存在提交而不是断开/重新连接),它们可能是基于TRANSACTION的(数据在提交后消失)”。 –

+0

好的,所以我想这意味着我的结论是正确的。 – AppleGrew

相关问题