文章目录
oracle锁的机制
1. 概括
1)说明
锁是一种机制,多个事务同时访问一个数据库对象时,该机制可以实现对并发的控制
2) oracle中锁的类别
1.DDL锁: oracle自动的施加和释放
2.DML锁:事务开始时施加,使用Commit后者Rollback被释放、
3.内部锁: 由oracle自己管理以保护内部数据库结构
3)oracle锁的粒度
-
行级锁(TX):阻止该行上的DML操作,直到Commit或者Rollback
-
表级锁(TM):
-
数据库级锁: eg: 将数据库锁定为只读模式 alter database open read only;
eg: 将数据库设置为限制模式(导入导出数据库时使用):alter system enable restricted session;
2.锁的模式
1)概括
数字越大,级别越高
dart
lock table student in row share mode;
lock table student in row exclusive mode; --用于行的修改
lock table student in share mode; --阻止其他DML操作
lock table student in share row exclusive mode; --阻止其他事务操作
lock table student in exclusive mode; --独立访问使用
3.锁查看
clike
SELECT * FROM V$SESSION;--查看会话和锁的信息
SELECT * FROM V$SESSION_WAIT;--查看等待的会话信息
SELECT * FROM V$LOCK;--系统中所有锁
SELECT * FROM V$LOCKED_OBJECT;--系统中DML锁
死锁
1. 说明
- 当两个用户希望持有对方的资源时就会发生死锁。即两个用户互相等待对方释放资源,oracle认定为产生了死锁,在这种情况下,将以牺牲一个用户作为代价,另一个用户继续执行,牺牲的用户的事务将回滚。
2. lORA-00060的错误并记录在数据库的日志文件alertSID.log中。同时在user_dump_dest下产生了一个跟踪文件,详细描述死锁的相关信息。
2.死锁产生条件
- Mutual exclusion(互斥):资源不能被共享,只能由一个进程使用。
2. Hold and wait(请求并保持):已经得到资源的进程可以再次申请新的资源。
3. No pre-emption(不可剥夺):已经分配的资源不能从相应的进程中被强制地剥夺。
4. Circular wait(循环等待条件):系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源。
3.解决死锁冲突
1)执行commit或者rollback结束事务
2)终止会话
4. 事务和死锁预防总结
- 避免应用不运行长事务。
2. 经常提交以避免长时间锁定行。
3. 避免使用LOCK命令锁定表。
4. 在非高峰期间执行DDL操作,在非高峰期间执行长时间运行的查询或事务。
另外需注意,需监测系统中死锁,调查为什么这些锁正被保持,频率;当死锁发生通过回滚事务rollback或者终止会话来解决它。
持续更此篇章--------->2024年9月6日!!!!!