• Oracle 事务操作


    在看本文之前,请确保你已经了解了Oracle事务和锁的概念即其作用,不过不了解,请参考数据库事务的一致性和原子性浅析Oracle TM锁和TX锁

    1、提交事务

    当执行使用commit语句可以提交事务.当执行了commit语句后,会确认事务的变化、结束事务、删除保存点、释放锁。在此之前,与当前事务相关的数据都会被加锁,直到当前事务进行了commit操作,如果在这个过程中有其他回话试图操作相关数据,(这些数据已经被当前事务加锁),那么其他回话会进行等待,或者直接返回错误。

    注意:只有在提交事务之后也就是进行commit操作之后,数据才会真正的发生改变,在commit提交之前操作,全部被记录入Oracle日志系统

    2、回退事务

    在说回退事务之前,先说Oracle事务的保存点(savepoint)的概念和作用,保存点是事务中的一点,用于取消部分事务,保存点记录的是当前数据库的状态

    在事务commit提交前,可以使用rollback 到指定的保存点,来回退到指定的保存点

    在事务commit提交后,保存点会被删除,这个时候,就无法进行回退了

    这里在使用保存点之前,强调一点,任何commit操作,也就是事务提交操作,都会导致savepoint的被删除!!!

    3、rollback to savepoint    取消部分事务

    select * from test;
    savepoint a;   ---创建回退点

    接着删除一条数据

    delete from test where deptno=10
    select * from test;

    ok,depetno为10的那行数据被删了,现在使用rollback+savepoint进行回退

    rollback to a;
    select * from test;

    数据又回来了,我在删除数据之前,添加了一个会退点,然后进行删除数据,接着发现那条数据不能删,我就通过保存点返回到删除数据之前的那个保存点所对应的数据库状态

     4、rollback  取消全部事务

     回退的机制和rollback to savepoint 一样,但是使用rollback就是取消当前事务的全部操作,也就说当前事务先前的操作会全部被取消

    5、只读事务

    只读事务是指只允许执行查询的操作,而不允许执行其他任何的DML操作,只读事务可以帮助获取某个时间点的数据。

    例:假定机票代售点每天18点统计今天的销售情况,这时可以使用只读事务,在设置了只读事务之后,尽管其他回话会提交新的事务,但是只读事务不会获取新的数据变化,从而保证取得特定时间点的数据信息。

    口令:

    set transaction read only

    使用scott登录的会话,设置只读事务

    ok,只读事务设置完毕

    现在我们用dba身份登录sqlplus,创建一个会话,然后向scoot.dept表中插入一条新数据

    ok,插入成功!

    现在看看scott回话中,能不能插到dept中新添加的记录;

    scott会话,并没有查到,新添加的记录。

    但是sysdba的回话中,数据已经添加了

    ok,根据上面的代码演示,我们可以得出,当一个事务被设置为只读事务,那么当前事务只能查询到这个时间点的数据记录,就算有其他会话对数据记录进行修改,也不会影响到只读事务。

  • 相关阅读:
    P5664 Emiya 家今天的饭
    P3944 肮脏的牧师
    P1233 木棍加工
    P4017 最大食物链计数
    P1287 盒子与球
    Java之未来已来(1)
    java-信息安全(二)-对称加密算法DES,3DES,AES,Blowfish,RC2,RC4
    java-信息安全(一)-BASE64,MD5,SHA,HMAC,RIPEMD算法
    SpringBoot集成Caffeine作本地缓存
    联想拯救者-触摸板手势
  • 原文地址:https://www.cnblogs.com/GreenLeaves/p/6638785.html
Copyright © 2020-2023  润新知