您当前位置:主页 > 资讯攻略 >
来源:未知
2020-07-09 23:18:51 浏览: 分类:资讯攻略

oracle丢失更新与乐观锁定

乐观锁定,即延迟所有锁定,直到即将执行更新。换句话说,我们将在不锁定屏幕的情况下修改屏幕上的信息。我们乐观地认为数据不会被其他用户修改;所以,我们会等到最后一刻,看看我们的想法对不对。总之,当用户填写完修改内容并点击修改按钮后,我们锁定了要修改的记录。

这种锁定方法适用于所有环境,使用这种方法,执行更新的用户“失败”的可能性将会增加。这说明当这个用户想要更新他的数据行时,他发现数据被修改了,所以他不得不重新开始。

实现乐观并发控制的方法有很多。我们将介绍三种方法,即:

1.使用一个特殊的列,它由数据库触发器或应用程序代码维护,可以告诉我们记录的“版本”。

2.使用使用原始数据计算的校验和或哈希值。

3.使用oracle 10g的新特性ORA_ROWSCN。

第一种方法描述如下:

这是一个简单的实现。如果希望保护数据库表不丢失更新,应该为每个要保护的表添加一列。该列通常是数字或日期/时间戳列,通常由表上的行触发器维护。每次修改一行时,该触发器负责递增NUMBER列中的值或更新DATE/TIMESTAMP列。每次用户进行修改时,他都会将该列中的值与数据库中的值进行比较。如果是一样的,说明没人修改过,否则早就被修改过了!

实际上,对于这样简单的工作,建议避免使用触发器,让DML负责。触发器会引入很多开销,在这种情况下没有必要使用它们。

但是,我们不能总是依赖每个应用程序来维护这个领域,原因有很多。比如这样会增加应用代码,只要在表中需要修改,就必须重复正确实现。在一个大型应用程序中,可能会有很多这样的地方。此外,未来开发的每个应用程序都必须遵循这些规则。“将会”很有可能在某处缺失,此字段使用不当。因此,如果应用程序代码本身不负责维护这个LAST_MOD字段,我相信应用程序也不应该负责检查这个LAST_MOD字段(如果它确实可以执行检查,它当然可以执行更新!)。所以在这种情况下,我建议将更新逻辑封装到存储过程中,而不是让应用程序直接更新表。如果您不能信任应用程序来维护该字段的值,也不能信任它来正确检查该字段。存储过程可以将上述更新中使用的绑定变量作为输入,并执行相同的更新。当检测到0行已被更新时,存储过程将向客户返回一个异常,让客户知道更新实际上失败了。

个人觉得还是太麻烦,且看以下两种方式!

关键词:甲骨文

优侠库网站每天提供最新最热门的安卓手机软件、游戏下载、分享热门手游资讯攻略教程、手机软件教程步骤,专注安卓手机游戏软件下载。

本文链接:http://www.123down.cn/gonglue/227352.html

上一篇:Oracle表连接
攻略资讯
安卓软件