gpt4 book ai didi

ORACLE 中的 MySQL LOCK 表

转载 作者:行者123 更新时间:2023-11-29 07:54:35 25 4
gpt4 key购买 nike

我正在尝试锁定 Oracle 中的一些表。我的 MySQL 查询如下所示:

LOCK TABLES mytable WRITE;

我尝试在 Oracle 中使用此查询:

LOCK TABLE mytable IN SHARE MODE;

我收到“锁定成功”消息,但我仍然可以在另一个 session 中从此表中进行选择。

我做错了什么吗?

谢谢

最佳答案

Oracle采用多版本读一致性。这意味着,除其他外,读者永远不会阻止作家,作家也永远不会阻止读者。因此,您无法取出任何锁来阻止用户(当然具有适当的权限)查询表。在绝大多数情况下,阻止读者阅读数据是没有意义的;即使您删除所有数据并将其重新插入到不同的 session 中,只要您在单个事务中执行此操作,读取器和写入器就永远不会互相阻塞。同样,在 Oracle 中显式锁定表也是极其不寻常的——在我个人的 Oracle 职业生涯中,我个人还没有遇到过显式锁定表有意义的情况。

如果您确实需要阻止读取器读取数据,您需要实现自己的序列化机制。例如,您可以在编写器启动之前使用 dbms_lock 获取自定义锁,然后对读取器进程进行编码以在执行 SELECT 语句之前检查该锁。或者,您可以维护一个正在运行的进程表,将其作为加载进程的一部分进行写入,并对读取器进程进行编码以在执行任何读取之前检查该表。不过,正如我上面所说,向系统添加这种复杂性是很不寻常的。

关于ORACLE 中的 MySQL LOCK 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25499408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com