oracle高级—事务和锁

事务

事务特性

事务必须具备以下四个属性,简称ACID属性:

  • 原子性(Atomicity):事务是一个完整的操作。事务的各步操作是不可分的(原子的)﹔要么都执行,要么都不执行
    场景:银行转账,A-100 B+100同时成功或同时失败
  • 一致性(Consistency) :一个查询的结果必须与数据库在查询开始的状态一致(读不等待写,写不等待读)。
    场景:查询数据,9:00开始查询数据,9:15查询完毕,在这期间所查询的数据被其他操作更新,且在9:00-9:15之间查询结果显示的是9:00时候并没有被更改的数据.一般oracle是把这个没有更新的数据放入'undo'里,如果oracle在’undo’里没有找到数据,则宁可报错,也不会让你看到其他操作更新的新的数据.
  • 隔离性(lsolation):对于其他会话来说,未完成的(也就是未提交的)事务必须不可见。
    场景:事务和事务之间相互隔离,2个session一个查询一个更新,那么在更新操作没有commit之前,查询所看到的数据是没有提交之前的,相互没有影响。
  • 持久性(Durability):事务一旦提交完成后,数据库就不可以丢失这个事务的结果,数据库通过日志能够保持事务的持久性。
    场景:事务提交之后不可逆,提交数据是由内存的数据刷新到磁盘上,这个过程的快慢和性能有关。那么oracle主要是靠'redo'日志,先记录日志,在写到磁盘上。

事务的开始和结束

事务的开始:
  事务采用隐性的方式,起始于session的第一条DML语句
事务结束于:
1)COMMIT(提交)或ROLLBACK(回滚)
2) DDL语句被执行(提交)
3) DCL语句被执行(提交)
4) 用户退出SQLPLUS(正常退出是提交,非正常退出是回滚)
5) 机器故障或系统崩溃(回滚)
6) shutdowm immediate(回滚)

锁用途:只有有事物才会产生锁,保证数据的完整性和正确性。

锁大概分为:共享锁与排他锁

  • 排他锁(独占),排斥其他排他锁和共享锁。
  • 共享锁,排斥其他排他锁,但不排斥其他共享锁。

锁类型:

  • DML锁(data locks,数据锁),用于保护数据的完整性和正确性。
  • TX(行级锁)
  • TM(表级锁)
  • DDL锁(dictionary locks,数据字典锁),用于保护数据库对象的结构,如表、索引等的结构定义。
  • SYSTEM锁(internal locks and latches),保护数据库的内部结构

我们日常所使用的DML操作就会产生事物和锁。
查看事务: select * from v$transaction;
查看锁: select * from v$lock;

加锁模式

自动加锁,做DML操作时,如insert,update,delete,以及select...forupdate由oracle自动完成加锁.

select * from earnings where sname='大凯' for update;

在这里插入图片描述

修改其姓名为‘大凯’的记录则会被锁定,我们可以进行试探要修改数据记录是否被加锁。如下三种形式均可:

select * from earnings where sname='大凯' for update nowait;
select* from earnings where sname='大凯' for update wait 5;
select * from earnings where sname='大凯' for update skip locked;

在这里插入图片描述
如果这个锁占用的时间太长,我们可以通过管理员杀掉session用户
首先要找到是哪个sid占用了太长时间,查看v$lock
然后根据v$lock表的SID,去v$session里面去找到,进行kill操作。

select sid, serial# from v$session where sid =SID;
alter system kill session 'sid,serial';

例如:

查询正在占用的进程
在这里插入图片描述

kill进程
在这里插入图片描述

提交时,显示连接已断开
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值