oracle锁定

锁定(lock)是一种机制,它用来管理对一个共享资源的并行访问。oracle确实在行一级锁定表数据,但是它也在其他级上使用锁定,以提供对不同资源的并行访问。例如,当运行存储过程时,过程本身在允许其他过程运行的模式中也是锁定的,但不劲旅另一个用户以任何方式对它发出 警告。应用于数据库中的锁定,允许对这些共享资源并行访问,但同时,提供数据的完整性和一致性支持。

       锁定用在多用户访问并更改数据或数据结构时。锁定的目的:以适当的机制来防止对相同的信息段进行并行修改。

       了解了一个特殊的RDBMS封锁模型并不意味就了封锁的全部模型。

        在oracle中,应该知道:<1>事务处理是数据库的全部工作,它们是好的事务、

<2>只要必须,就应该推迟提交。不应该迅速地提交面给系统重压。其规则是:在必须提交时提交,而不是在必须提交之前提交。事务应该只是和商务逻辑规定的大小一样。

<3>只要需要,就应该保持对数据的锁定。它们是可供使用的工具,不是要避免的东西。锁定不是一个稀有的资源。

<4>在oracle中行一级锁定不包含开销。

<5>不应该由于系统上的性能较好而将锁定扩大(例如,使用代替使用行锁定)。在oracle中。这样不会系统更好----它不会节省任何资源。

<6>可以获得并行处理和一致性。可以既快又准确得到,且每次都一样。

两种封锁类型:<1>悲观封锁  <2>乐观封锁

1.悲观封锁

此封锁方法在修改屏幕上的一个值之前就要 开始发挥作用。

        没有封锁用户查询数据的输出为:

sql>select empno,sal from emp where deptno=10;

EMPNO                   ENAME

------------------           ------------

          7782                 CLARK

          7839                KING

          7934                MILLER

最后,用户获得想要更新的行。假设在这种情况下,他们选择更新MILLER行。应用程序在那里及时(在他们在屏幕上做出任何更改之前)发出下面命令:

sql>select empno,ename,sal from emp where empno=:empno and ename=:ename and sal=:sal for update nowait

应用程序所执行的是,给屏幕上数据的绑定变量(bind variables)提供值(这里是7934、MILLER和1300),并从数据库中重新查询这个相同的行--这次,封锁该行,以防其他的会话对其的更新。这是此方法叫做悲观锁定的原因,在试图更新之前封锁行,否则的话,我们会怀疑那个行没有更改。

因为每一个表都 有一个主码(primary key)主码应该是不变的(我们不应该更新它们)。我们将获得下面陈述中的3个结果中的一个:<1>如果基本数据没有更改,那么我们将获得MILLER行,这一行将被锁定,不能由其他人更新。

<2>如果另一个用户在修改那一行的进程中,我们将获得“ORA_00054”资源忙的错误,我们被阻塞,必须等待该用户完成工作。<3>在选择数据和指出更新意图之间的时间里,如果有人已经更改了那个行,那么我们将获得零行。

2.乐观封锁

sql>update table set columen1=:new_columen1 where columen1=:old_columen1;

如果更新了一行---数据在读取和提交更新这段时间没有更改。如果更新了零行,将丢失更新---其他人更改了数据。,现在我们必须搞明白为了避免丢失更新而做的事情。最终用户在对行查询了新的值之后应该重新输入事务吧

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值