Oracel:事务和锁

事务和锁是两个联系非常紧密的概念。事务很重要,它可以保证多用户并发系统中数据的完整性。在数据库中,存在多个用户同时对某一数据进行读写操作的情况,为了确保数据的并发性和一致性,可以使用事务。锁是Oracle数据库引擎用来同步多个用户,同时确保对同一份数值快访问的机制。锁可以消除多用户操作同一个资源产生的隐患.

什么是事务

事务是在数据库中主要用于保证数据完整性的一致性,防止出现错误数据。在数据库中,数据的完整性是一个广义的概念,它包括数据的并行性和一致性。事务是单个的工作单元。
如果某一事务成功,则在该事务中进行的所有数据的修改均会提交,称为数据库中的永久组成部分。如果事务遇到错误必须取消或回滚,则所有的数据均会被清除。
Oracle数据库的事务基本控制语句如下:

  • set transaction:设置事务的属性
  • commit:提交事务
  • savepoint:设置保存点
  • rollback:回滚事务
  • rollback to savepoint:回滚至保存点

事务的ACID特性

事务的4个特性,原子性、一致性、分离性、持久性
原子性指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么什么都不发生。
一致性事务必须使数据库从一个状态变换到另一个一致性状态。
分离性即使每个事务都能保证一致性和原子性,但如果有几个事务并发执行,如果在执行过程中发生了事务间的交叉,也会导致数据库发生不一致的情况。
持久性指一个事务一旦被提交,他对数据库中数据的改变就是持久性的,接下来的其它操作和数据库故障不应该对其有任何影响。

事务类型

在Oracle数据库中,操作事务可以分为两种方式:显示操作方式和隐式管理方式。

事务的状态

对数据库进行操作的事务共有5种状态。
分分别为:获得状态,部分提交状态,失败状态,提交状态,终止状态。

锁是在事务访问相同资源时,防止事务之间的有害性交互的机制。这些资源包括用户系统对象,内存和数据字典中的共享数据结构。Oracle通过不同类型的锁,来设置用户允许或阻止其它用户对相同资源的同时访问,从而事项数据的完整性,并行性与一致性。在Oracle数据库中,多个事务并发执行的正确性由数据库管理系统的并发控制机制提供支持。

并发访问的常见问题

数据库系统的并发控制是以事务为单位进行的,而事务中用到的数据或资源,可以使用内部锁定的机制来限制事务对所需共同资源的存取操作,从而确保数据的并发性和一致性。
1、丢失信息
2、未确认的相关性
3、不一致的分析
4、幻想读

锁概述

锁是对数据进行并发控制的机制。Oracle数据库用它来同步多个用户。党对一个数据源加锁后,此数据源就有了一定的访问机制。
Oracle使用锁来保证事务的隔离性,即事务内部的操作和使用的数据对并发执行的其它事务是隔离的,互补干扰的。
若Oracle的事务要执行,必须先申请对该资源的锁,按照获得的锁的不同,就能够对该资源进行锁赋予的操作。如果没有获得锁,就不能执行对该资源的任何操作。当某个事务出现或该事务完成后,自动解除对资源的锁。
Oracle所有的锁的管理和分配都是由数据库管理系统自动完成的,不需要用户进行干预,同时也提供了手工加锁的命令,供有经验的用户使用。

锁分类

锁是实现并发访问的重要手段,数据库将自动启用和取消锁,不需要人的参与。按照锁的权限来分,Oracle数据库中存在两种类型的锁,分别是排他锁(X锁)和共享锁(S锁)

  • 排他锁:被称为写锁,该模式下的锁可以防止资源的共享。当进行是数据修改时,会启用该类型的锁。
  • 共享锁:被称为读锁,该模式下的锁锁定的数据只能被读取,不能被修改。加了共享锁的记录允许被并发地读取。

在Oracle大型数据库中,它利用不同类型的锁来管理并发会话对数据对象的操作。Oracle数据库中的锁按照所用对象的不同分为以下几种类型。

  • DML锁:用来保护数据的完整性,称为数据锁。DML锁分为行级锁(TX)和表级锁(TM)。行级锁(TX)也属于排他锁。
  • DDL锁:可以保护模式中对象的结构
  • 内部闫锁:保护数据库的内部结构,完全自动调用。

锁等待和死锁

在某些情况下,由于占用的资源不能i及时释放,而造成锁等待。锁等待会严重影响数据库的性能和日常工作。例如,当一个会话修改表A的记录时,它会对该记录加锁,而此时如果另一个会话也来修改此记录,那么第二个会话因得不到排他锁而一直等待,此时会出现执行SQL时,数据库长时间没有响应的现象。直到第一个会话把事务提交,释放锁,第二个会话才能对数据进行操作。

预防死锁

尽管死锁不能完全避免。但是遵循特定的编码惯例可以将发生死锁的机会降到最低。一般而言,需要遵循以下原则:

  • 按同一顺序访问对象
  • 避免事务中的用户交互
  • 保持事务简短并处于一个批处理中

总结

事务保证了数据的一致性。而锁和事务两者紧密联系。重点是熟练掌握事务和锁的含义及实现功能,难点是如何避免死锁以及如何利用OEM管理器解决锁冲突。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章