【问题标题】:When will data in Oracle session temporary table get deleted?Oracle会话临时表中的数据什么时候会被删除?
【发布时间】:2012-01-04 15:55:39
【问题描述】:

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

ON COMMIT PRESERVE ROWS 使其成为基于会话的临时 桌子。行将保留在此表中,直到注销。只有我能看到 但是,即使在我之后,其他会话也不会看到“我的”行 提交

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

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

【问题讨论】:

    标签: sql oracle temp-tables


    【解决方案1】:

    这就是 Oracle 还提供“ON COMMIT DELETE ROWS”选项的原因。

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

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

    希望对您有所帮助。

    【讨论】:

    • +1 实际上,OP 问题中的文章明确指出临时表“可能是基于 SESSION 的(数据在提交后仍然存在,但不是断开/重新连接)。它们可能是基于 TRANSACTION 的(数据在提交)。”
    • 好的,所以我想这意味着我的结论是正确的。
    猜你喜欢
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 2021-12-30
    相关资源
    最近更新 更多