【问题标题】:Global Temporary Table Concurrency全局临时表并发
【发布时间】:2010-04-21 08:26:00
【问题描述】:

我有一个全局临时表,它设置为提交时删除。它在并发问题上的表现如何?我的意思是如果另一个会话想要使用该全局临时表会发生什么?答案可能不是“他们共享相同的数据”。

现在,如果我的猜测是正确的 :),表是在第一个连接提交之前锁定的,还是 dbms 为每个连接创建一个全局临时表? (类似于表格的实例?)

【问题讨论】:

    标签: oracle concurrency


    【解决方案1】:

    来自documentation

    临时表中的数据仅对将数据插入表中的会话可见。

    每个会话都有其临时表的逻辑独立副本。

    由于您看不到其他会话的数据,并且由于 Oracle 在行级别处理锁,因此您不会被其他会话的 DML 阻塞。并发 DML(插入、删除、更新)不会影响其他会话。

    只有 DDL 需要对表进行锁定(即:ALTER TABLE...)

    【讨论】:

    • 我对这个问题很感兴趣——你是说全局临时表不是锁定一组行的好方法吗?如果我有两个线程需要在给定时间对条目列表进行操作,全局临时表是否可以帮助每个线程在不重叠的情况下抓取该条目列表的一部分?
    • @michael:每个线程都有自己的会话(或者它们不能并行运行),因此它们不会看到彼此的临时数据。单独的临时表不允许您锁定没有重叠的行,您将需要其他功能。见your question
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 2023-03-27
    • 1970-01-01
    • 2023-04-08
    • 2011-12-17
    • 2015-04-25
    • 2016-04-02
    相关资源
    最近更新 更多