gpt4 book ai didi

sql - 你能锁定一个Oracle序列吗?

转载 作者:行者123 更新时间:2023-12-04 14:44:14 25 4
gpt4 key购买 nike

是否可以锁定一个 Oracle 序列,以便任何尝试在其上使用 nextval 的 session 都会阻塞,直到我完成我的脚本?

如果有不同的方法,我会解释我在做什么。我正在准备一个模式来使用流进行双向复制。我想确保所有主键序列都产生唯一值。我通过将序列递增 1 直到最后一个数字为 1,然后将增量更改为 100 来做到这一点。在另一台服务器上,我这样做直到最后一个数字为 2。这样服务器 1 总是生成主键 XXXXX01 和服务器 2 XXXX02.

问题是这是一个 24x7 的数据库,我在调整序列时无法停止所有事件。如果我能在短时间内获得独占锁,我就能可靠地做到这一点。

最佳答案

最简单的解决方案(在我看来)是对服务器 1 使用奇数,对服务器 2 使用偶数。这也消除了对序列化的需要。

create sequence server1_seq increment by 2 start with 1;
create sequence server2_seq increment by 2 start with 2;

这将产生一系列值,例如:

Server 1  Server 2
-------- --------
1 2
3 4
5 6
7 8
9 10

通过使用更大的增量(以及每个服务器的不同起始值),可以进一步扩展此解决方案以处理两个以上的服务器。

话虽如此,如果您打算随着时间的推移添加更多服务器,请不要使用此方法。您必须使所有数据库脱机并从头开始重建表。

关于sql - 你能锁定一个Oracle序列吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5601805/

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