WEB开发网
开发学院数据库Oracle SQL Server和Oracle数据锁定比较 阅读

SQL Server和Oracle数据锁定比较

 2007-05-12 12:28:31 来源:WEB开发网   
核心提示: SQL Server的解决方案听起来很简单,但实际上其幕后为提供足够的系统高性能而采取了很多措施,SQL Server和Oracle数据锁定比较(3),例如,如果你在同时修改多行数据,指定(NOLOCK)实际上只是得到了没有提交的数据,Oracle的方法则提供了数据的一致视图,SQL Se

SQL Server的解决方案听起来很简单,但实际上其幕后为提供足够的系统高性能而采取了很多措施。例如,如果你在同时修改多行数据,SQL Server则会把数据锁定范围提升到页级别乃至锁定整个数据表,从而不必针对每一记录跟踪和维护各自的数据锁。

Oracle方法

下面我们再看看Oracle数据库是如何实施类似操作的。首先,我打开一个SQLPlus实例执行下列查询语句(这个例子可以在Oracle 9i中示例中找到)。这个实例称做查询实例:

  select first_name, last_name, salary
  from hr.employees
  where
  department_id = 20;

代码返回两行数据,然后,再打开另一个SQLPlus实例——更新实例来执行以下命令:

  SQL> update hr.employees
  2 set salary = salary * 1.05
  3 where
  4 department_id = 20
  5 /

代码执行后回复消息称两行数据已被更新。

注意,以上代码中并每有像在SQL Server示例那样键入“begin tran”字样的代码。Oracle 的SQLPlus隐含启用交易(你还可以模仿SQL Server的行为,设置“autocommit to on”自动地提交交易)。接下来我们在SQLPlus更新实例中再执行同查询实例一样的select语句。

结果清楚地表明:Michael和Pat的薪水都增加了,然而这个时候我还没有提交数据变更交易。Oracle不需要用户等待数据更新实例中操作被提交,它径直返回Michael和Pat的查询信息,但实际上返回的是数据更新开始之前的数据视图!

这时候,熟悉SQL Server的人可能会说了,在查询中设置(NOLOCK)不也能达到同样的效果吗?可是,对SQL Server而言,在数据映像之前是不能获取数据的。指定(NOLOCK)实际上只是得到了没有提交的数据。Oracle的方法则提供了数据的一致视图,所有的信息都是针对交易的、基于存储数据快照的。

上一页  1 2 3 4  下一页

Tags:SQL Server Oracle

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接