`
liwenshui322
  • 浏览: 519295 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle锁介绍

阅读更多

      锁(lock)机制用于管理对共享资源的并发访问。注意,我说的是“共享资源”而不是“数据库行”。Oracle会在行级对表数据锁定,这固然不错,不过Oracle也 会在其他多个级别上使用锁,从而对多种不同的资源提供并发访问。例如,执行一个存储过程时,过程本身会以某种模式锁定,以允许其他用户执行这个过程,但是 不允许另外的用户以任何方式修改这个过程。数据库中使用锁是为了支持对共享资源进行并发访问,与此同时还能提供数据完整性和一致性。

      在单用户数据库中,并不需要锁。根据定义,只有一个用户修改信息。不过,如果有多个用户访问和修改数据或数据结构,就要有一种机制来防止对同一份信息的并发修改,这一点至关重要。这正是锁定所要做的全部工作。

      Sql Server在没有行锁的情况下,如果采用页级锁,多个用户就不能同时修改同一个表。另外,如果正在修改一个表,这会有效地阻塞对这个表的多个查询。如果我想查询一个表,而且所需的页被一个更新锁住了,那我就必须等待(等待,再等待……)。这种锁定机制太糟糕了,要想支持耗时超过1秒 的事务,结果可能是致命的;倘若真的这样做了,整个数据库看上去可能就像是“冻住”了一样。我从这里学到了很多坏习惯。我认识到:事务很“不好”,应该尽 快地提交,而且永远不要持有数据的锁。并发性要以一致性为代价。要么保证正确,要么保证速度,在我看来,鱼和熊掌不可兼得。

      然而,Oracle却推翻了我在Sql Server中得出的结论。

      在Oracle中,你会了解到:

      1. 事务是每个数据库的核心,它们是“好东西”。 

      2. 应该延迟到适当的时刻才提交。不要太快提交,以避免对系统带来压力。这是因为,如果事务很长或很大,一般不会对系统有压力。相应的原则是:在必要时才提交,但是此前不要提交。事务的大小只应该根据业务逻辑来定。

      3. 只要需要,就应该尽可能长时间地保持对数据所加的锁。这些锁是你能利用的工具,而不是让你退避三舍的东西。锁不是稀有资源。恰恰相反,只要需要,你就应该长期地保持数据上的锁。锁可能并不稀少,而且它们可以防止其他会话修改信息。

      4. 在Oracle中,行级锁没有相关的开销,根本没有。不论你是有1个行锁,还是1 000 000个行锁,专用于锁定这个信息的“资源”数都是一样的。当然,与修改1行相比,修改1 000 000行要做的工作肯定多得多,但是对1 000 000行锁定所需的资源数与对1行锁定所需的资源数完全相同,这是一个固定的常量。

      5. 不要以为锁升级“对系统更好”(例如,使用表锁而不是行锁)。在Oracle中,锁升级(lock escalate)对系统没有任何好处,不会节省任何资源。也许有时会使用表锁,如批处理中,此时你很清楚会更新整个表,而且不希望其他会话锁定表中的行。但是使用表锁绝对不是为了避免分配行锁,想以此来方便系统。

      6. 可以同时得到并发性和一致性。每次你都能快速而准确地得到数据。数据读取器不会被数据写入器阻塞。数据写入器也不会被数据读取器阻塞。这是Oracle与大多数其他关系数据库之间的根本区别之一。

      注:《ORACLE9i&10g编程艺术》阅读笔记

     

分享到:
评论

相关推荐

    Oracle 锁机制问题详解

    本文将详细介绍 Oracle 中的锁机制原理及其解锁方法。 #### 二、锁机制的重要性 在任何多用户数据库应用中,最终都会出现两个或更多用户希望同时处理相同记录的情况。这种情况在逻辑上是不可能的,并且数据库必须...

    oracle锁表查询oracle锁表查询oracle锁表查询

    ### Oracle锁表查询详解 #### 一、Oracle锁机制简介 在Oracle数据库中,锁是一种重要的并发控制机制,用于管理多个用户对同一数据资源的访问。通过锁机制,Oracle能够确保数据的一致性和完整性,避免多用户操作时...

    查看Oracle锁表

    ### 查看Oracle锁表 在Oracle数据库管理过程中,锁定机制是一项重要的功能,它用于确保数据的一致性和事务处理的安全性。当多个用户试图同时访问同一数据时,可能会出现并发问题,这时就需要通过锁定来控制对数据的...

    ORACLE解锁方法的一点资料

    本文将详细介绍Oracle解锁方法的相关知识点,包括如何识别锁定的会话(session)、如何查看锁定的SQL语句以及如何解除锁定。 #### 二、识别锁定的会话 在Oracle数据库中,当一个会话被另一个会话锁定时,通常会遇到...

    Oracle查询用户锁表

    本文档将详细介绍如何查询用户锁表,并提供相关的代码。 一、查询用户锁表的必要性 在 Oracle 数据库中,锁表是指用户在进行数据操作时临时锁定的表,以防止其他用户同时对该表进行操作。但是,锁表也可能会导致...

    oracle数据库锁使用

    本文将详细介绍Oracle数据库中的锁机制,并深入探讨各种锁类型的使用方法及其优缺点。 #### 二、锁的概念 锁是防止在两个事务操作同一个数据源(表或行)时交互破坏数据的一种机制。Oracle采用封锁技术保证并发...

    Oracle锁机制

    Oracle数据库多粒度锁机制介绍概述.内容简单易懂,容易掌握

    Oracle锁表问题的简捷处理技巧

    ### Oracle锁表问题的简捷处理技巧 在Oracle数据库开发过程中,锁机制是确保数据一致性和并发控制的关键组件之一。当多个用户或进程试图同时访问同一个资源时,Oracle数据库通过实施不同的锁定策略来协调这些访问...

    oracle 解锁 语句

    本文将详细介绍如何在Oracle中使用特定的SQL语句解锁被锁定的对象或会话。 #### 二、基本概念解析 在深入探讨具体的解锁方法之前,我们需要了解几个关键的概念: - **锁定(Lock)**:锁定是在数据库对象上设置的...

    oracle用户解锁三种方法

    下面将详细介绍这三种解锁方法。 **第一种方法:使用PL/SQL Developer** 1. 以`system`用户身份登录PL/SQL Developer,选择连接类型为`Sysdba`。 2. 在对象浏览器中,导航到`Security` -> `Users`,找到需要解锁的...

    Oracle解锁scott用户

    本文将详细介绍如何通过简单的三句SQL语句来实现这一过程。 ### 一、理解Oracle中的scott用户 在Oracle数据库中,scott用户是一个经典的示例用户,常用于教学和测试目的。scott用户的默认密码通常是“tiger”,而...

    解锁或者修改oracle 数据库用户密码.doc

    Oracle 数据库用户密码解锁和修改 ...在本文中,我们了解了 Oracle 数据库用户密码的锁定机制和解锁步骤,并且介绍了密码管理的重要性。希望这些知识能够帮助数据库管理员更好地管理 Oracle 数据库用户密码。

    怎样快速查出Oracle 数据库中的锁等待

    本文将详细介绍如何高效地检测Oracle数据库中的锁等待情况,并提供一种优化方案来加速锁等待的诊断过程。 #### Oracle数据库锁概述 在Oracle数据库中,锁主要分为以下几种类型: - **只读锁**:通常用于只读操作...

    oracle用户解锁三种方法.doc

    本文将详细介绍三种解锁Oracle用户账户的方法。 首先,我们可以通过PL/SQL Developer工具来解锁用户。如果你收到"ORA-28000: the account is locked"的错误信息,可以按照以下步骤操作: 1. 使用具有DBA权限的用户...

    相克军 ORACLE 讲座 深度剖析 锁 笔记

    本篇笔记主要围绕相克军老师的ORACLE锁讲座内容展开,详细介绍了Oracle中的锁类型、行级锁与表级锁的使用,以及锁的兼容性和相关视图。 1. **ORACLE 锁类型** - **Latch 锁**:Latch 是一种轻量级锁,用于保护...

    Oracle的锁内幕解惑

    通过本文的详细介绍,我们了解到Oracle锁机制的复杂性和多样性。DML锁、DDL锁以及Latch锁各有其独特的应用场景和功能。深入理解这些锁的工作原理对于DBA来说至关重要,可以帮助他们更有效地管理和优化Oracle数据库...

    oracle 检测数据库是否有对象被锁的脚本

    本文将详细介绍如何使用提供的脚本`ckobject_lock.sh`和`ckobject_lock.sql`来监控和检测Oracle数据库中的对象锁。 首先,我们需要理解什么是Oracle数据库的对象锁。对象锁是数据库管理系统用于控制并发访问的一种...

Global site tag (gtag.js) - Google Analytics