Oracle事务和锁

系统 1612 0

Oracle事务和锁

1. 事务的概念:

  事务用于保证数据的一致性 , 它由一组相关的 dml ( 数据操作语言 [ 增删改]) 语句组成 , 该组的 dml 语句要么全部成功。要么全部失败。

      *事务的特性有四个: ACID
原子性 atomicity: 语句级原子性,过程级原子性,事务级原子性
一致性 consistency: 状态一致,同一事务中不会有两种状态
隔离性 isolation: 事务间是互相分离的互不影响 ( 这里可能也有自治事务 )
持久性 durability: 事务提交了,那么状态就是永久的

      *只读事务 :
只读事务是指只允许执行查询的操作,而不允许执行任何其它dml操作的事务,使用只读事务可以确保用户只能取得某时间点的数据。假定机票代售点每天18点开始统计今天的销售情况,这时可以使用只读事务。在设置了只读事务后,尽管其它会话可能会提交新的事务,但是只读事务将不会取得最新数据的变化,从而可以保证取得特定时间点的数据信息。
     设置只读事务: set transaction read only;

 

2.   事务的优点:

把逻辑相关的操作分成了一个组。

在数据永久改变前,可以预览数据变化。

能够保证数据的读一致性。

    COMMIT 操作把多个步骤对数据库的修改,一次性地永久写入数据库,代表数据库事务的成功执行。

    ROLLBACK 操作在发生问题时,把对数据库已经作出的修改撤消,回退到修改前的状态。在操作过程中,一旦发生问题,如果还没有提交操作,则随时可以使用 ROLLBACK 来撤消前面的操作。

    SAVEPOINT 则用于在事务中间建立一些保存点, ROLLBACK 可以使操作回退到这些点上边,而不必撤销全部的操作。一旦 COMMIT 完成,就不能用 ROLLBACK 来取消已经提交的操作。一旦 ROLLBACK 完成,被撤消的操作要重做,必须重新执行相关操作语句。

数据库事务

 

3.数据库锁

    * Oracle 数据库中的锁机制

      数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。

    在数据库中有两种基本的锁类型:排它锁( Exclusive Locks ,即 X 锁)和共享锁( Share Locks ,即 S 锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改;加了共享锁的数据对象可以被其他事务读取,但不能修改。

    *   Oracle 数据库锁分类(根据保护对象的不同):

(1) DML lock data locks ,数据锁):用于保护数据的完整性;

(2) DDL lock dictionary locks ,字典锁):用于保护数据库对象的结构(例如表、视图、索引的结构定义);

(3) Internal locks  latches (内部锁与闩):保护内部数据库结构;

(4) Distributed locks (分布式锁):用于 OPS (并行服务器)中;

(5) PCM locks (并行高速缓存管理锁):用于 OPS (并行服务器)中。

       Oracle 中最主要的锁是 DML (也可称为 data locks ,数据锁)锁。 DML 锁的目的在于保证并发情况下的数据完整性。在 Oracle 数据库中, DML 锁主要包括 TM 锁和 TX 锁,其中 TM 锁称为表级锁, TX 锁称为事务锁或行级锁。

      锁出现在数据共享的场合,用来保证数据的一致性。当多个 会话同时修改一个表时,需要对数据进行相应的锁定。锁有“只读锁”、“排它锁”,“共享排它锁”等多种类型,而且每种类型又有“行级锁” ( 一次锁住一条记录 ) ,“页级锁” ( 一次锁住一页,即数据库中存储记录的最小可分配单元 ) ,“表级锁” ( 锁住整个表 )

      若为“行级排它锁”,则除被锁住的行外,该表中其他行均可被其 他的用户进行修改 (Update) 或删除 (delete) 。若为“表级排它锁”,则所有其他用户只能对该表进行查询 (select) 操作,而无法对其中的任何记录进行修改或删除。当程序对所做的修改进行提交 (commit) 或回滚 (rollback) 后,锁住的资源便会得到释放,从而允许其他用户进行操作。如果两个事务,分别锁定一部分数据,而都在等待对方释放锁才能完成事务操作,这种情况下就会发生死锁。

 

4.   事务和锁

当执行事务操作时 (dml 语句 ),oracle 会在被作用的表上加锁 , 防止其他用户改变表的结构。

提交事务: 当执使用 commit 语句可以提交事务 . 当执行了 commit 语句之后 , 会确认事务的变化、结束事务、删除保存点、释放锁 , 当使用 commit 语句结束事务之后 , 其他会话将可以查看到事务变化后的新数据 ;

savepoint  保存点名称 ;     -- 创建一个保存点

rollback to 保存点名称 ;         -- 回滚到保存点

回滚事务

当执行 rollback , 通过指定保存点可以回退到指定的点

rollback      -- 取消全部事务

commit 之后不能 rollback

 

 

 

 

Oracle事务和锁


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论