程序员
董欣欣的个人博客

Oracle 锁

  • 锁用来在多用户并发访问和操作数据库时保证数据的一致性。锁由Oracle自动管理。如一个DML操作,ORACLE默认的机制是在DML操作涉及到的行上加锁(行级别),但不会在更高的级别(表级别)上加更严格的锁,比如只改某行的数据不会锁住整个表。这提供了很好的并发性,因为整个表没有锁定,只是某些行被锁定了,其他用户可以修改其他行数据。

    查询不需要任何锁。

    锁的生命周期,锁在被相关的操作申请并持有后,会一直保持到事务的结束。事务结束后,锁才会被释放。
    锁的内部维护机制是采用排队机制(enqueue),一个对象的排他锁被持有后,该对象相同级别的锁被其他事务申请时候,所有等待该锁的事务都在一个等待队列中排队,其他事务处于等待状态。直到该锁被释放,等待的事务才重新竞争使用该资源。
    锁的模式
    –排他锁模式(Exclusive)排他锁在被释放之前,会阻止其锁住的资源被其他任何事务共享。

    –共享模式(Share)

    两种类型的锁,DML锁和DDL锁。
    DML锁,也称数据锁,用于在数据被多个不同的用户改变时,保证数据的完整性。
    DDL锁,也称为数据字典锁,执行DDL语句时,DDL语句涉及到的对象获得DDL锁。由于被持有的时间很短,因此很少看到冲突的DDL锁,并且以nowait方式被请求。
    3种DDL锁类型:
    –排他的DDL锁,很多对象的创建、修改和删除定义时候都需要获得该锁。比如执行Create Table、Drop Table等时会获得表上的排他DDL锁。

    –共享的DDL锁。在执行Grant、Create Procedure等命令时,会获得命令相关操作对象的共享DDL锁。

    –Breakable Parse Lock,用来在共享SQL区校验语句。

    如使用锁的方式不当,可能会产生锁冲突,不适当的使用方式包括:
    –不必要的高级别的锁

    –长时间运行的事务

    –没有提交的事务

    –其他产品产生了高级别的锁

    死锁:当两个或者两个以上的用户彼此等待被对方锁定的资源时,就有可能产生死锁

未经允许不得转载:董不董 - 董欣欣的个人博客 » Oracle 锁
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

www.dongxinxin.cn 技术博客

联系我关于我