系统管理Lesson 10. Managing Data Concurrency
1. 请对 Oracle 数据库锁机制做一个完整的说明。 10-4
锁:
可以防止多个会话同时更改同一数据
是在指定语句的最低可能级别自动获取(行、块、表)(对象、数据库、方案)
锁机制:
(提供)高级数据并发处理(能力):
- 执行插入、更新和删除时用行级锁
- 查询不需要任何锁
自动队列管理
在事务处理结束(使用 COMMIT 或 ROLLBACK 操作)之前会一直保持锁定
2. 事务在获取排他的行锁的同时,为什么要同时获取一个共享的表锁? 10-5
row share、row exclusive、share、share row exclusive、exclusive
防止用户在修改表行数据的同时,其他管理员删除删除表
(修改数据库时,将数据从块中读取到内存,修改完后提交,由数据库写进程写入到数据文件中)
3. 当锁冲突发生时,如何解决,请给出相应的 SQL 命令。 10-3
第一步 找出 Session ID(会话 ID)
SELECT sid, serial#, username FROM v$session
WHERE sid IN (SELECT blocking_session FROM v$session);
v$session 当前会话
blocking_session 凡是持有锁的会话
第二步 解决锁冲突
ALTER SYSTEM KILL SESSION 'SID,SERIAL#' IMMEDIATE;
A. 持有锁的会话提交或者回退(释放掉)
B. 终止持有锁的会话(紧急情况下)
4. 死锁是如何发生的,如何解决? 10-14
事务T1在等待T2,而T2又在等待T1,两个事务永远不能结束
两个或更多会话等待已被其中另一个会话锁定的数据
ORA-00060
Deadlock detectd while waiting for resource
解决:
完全自动、杀死其中一个事务
5. Oracle 数据库的行锁,本质上是对数据块的锁定,这个说法对不对?
不对
关系型表格数据在块内部一行一行存储的,行片段(Row piece)
6. 其他:
ABE
TM 锁(表级锁)
TX 锁(事务锁或行级锁)
封锁类型:
排他锁(exclusive lock,即X锁)(写锁) 只允许事务T读取和修改数据对象A,其他事务都不能在对数据对象A
共享锁(share lock,即S锁) (读锁) 事务T可以读数据对象A但不能修改A,其他事务只能再对A加S锁,而不能加S锁
数据库锁机制
oracle-数据库的各种-锁-详解