在遗留数据库上实现乐观并发

发布于 2024-11-16 14:32:42 字数 309 浏览 7 评论 0原文

我有一个数据库,其中包含一些表以及其中的数据。我需要为所有表实现乐观并发。

我想知道最好的方法是什么。

带有谓词的查询将在应用程序端创建。

我关心的是如何存储 rowversion(timestamp) 值。

首先,我考虑使用 ora_rowscn 作为 rowversion 值,但后来我意识到我必须重新创建所有表才能设置 ora_rowscn。 也许只添加某种时间戳列会很好,但随后我将被迫为应用程序中的每个更新创建并保存新的时间戳值。

有什么想法吗?

I have a database with some tables and also data in them.I need to implement for all tables optimistic concurrency.

I was wondering what would be the best way.

Query with a predicate will be created on the application side.

My concern is how-to store the rowversion(timestamp) value.

First I was thinking of using ora_rowscn for rowversion value,but then I realised I have to recreate all tables to set up ora_rowscn.
Maybe just adding a some kind of timestamp column would be good,but then I would be forced to create and save a new timestamp value for every update in the application.

Any ideas ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

慕烟庭风 2024-11-23 14:32:42

Oracle 有一个内置的乐观锁定包 OWA_OPT_LOCK< /a>.这可以用来为任何行生成校验和,如下所示:

select owa_opt_lock.checksum('SCOTT','EMP',ROWID)
from emp
where empno = 123;

这可以在最初获取记录时调用,并在保存更改之前再次调用;如果这两个值不同,则说明自您获取记录以来其他人已更改该记录。

Oracle has a built-in package for optimistic locking called OWA_OPT_LOCK. This can be used to generate a checksum for any row like this:

select owa_opt_lock.checksum('SCOTT','EMP',ROWID)
from emp
where empno = 123;

This can be called when originally getting the record and again before saving the changes; if the 2 values are different, someone else has changed the record since you got it.

抱着落日 2024-11-23 14:32:42

一个非常简单但有效的模式是首先获取要编辑的整行而不保持锁定。当您最终准备好更新时,请使用 COLUMNA='OLDVALUEA' 等子句扩充 where 子句。更改记录的数量表明其他修改是否干扰了您的乐观更新。

当您尝试更新时,此方法将注意到仍然有效的所有修改。任何依赖校验和的方法都可能错误地表明没有发生任何修改。您需要的可靠性取决于您的应用。我不会把人的生命押在校验和上。然而,在这种情况下,我也尽量不依赖乐观的更新。

A very simple but effective pattern is to first fetch the whole row about to be edited without keeping a lock. When you are finally ready for the update, augment the where clause with clauses like COLUMNA='OLDVALUEA'. The number of changed records indicates if some other modification interfered with your optimistic update or not.

This method will notice all modifications that are still in effect when you try update. Any method relying on checksums can falsely indicate that no modifications have taken place. The reliability you need depends on your application. I would not bet human lifes on checksums. However, I would try not to rely on optimistic updates in this case either.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文