系统管理Lesson 10. Managing Data Concurrency

1. 请对 Oracle 数据库锁机制做一个完整的说明。

锁:
可以防止多个会话同时更改同一数据
是在指定语句的最低可能级别自动获取(行、块、表)(对象、数据库、方案)
锁机制:
(提供)高级数据并发处理(能力):

  • 执行插入、更新和删除时用行级锁
  • 查询不需要任何锁
    自动队列管理
    在事务处理结束(使用 COMMIT 或 ROLLBACK 操作)之前会一直保持锁定

2. 事务在获取排他的行锁的同时,为什么要同时获取一个共享的表锁?

修改数据库时,将数据从块中读取到内存,修改完后提交,由数据库写进程写入到数据文件中
防止用户在修改表行数据的同时,其他管理员删除删除表

3. 当锁冲突发生时,如何解决,请给出相应的 SQL 命令。

第一步 找出 Session ID(会话 ID)
SQL语句

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. 死锁是如何发生的,如何解决?

事务T1在等待T2,而T2又在等待T1,两个事务永远不能结束
两个或更多会话等待已被其中另一个会话锁定的数据

ORA-00060
Deadlock detectd while waiting for resource
解决:
完全自动,杀死其中一个事务

5. Oracle 数据库的行锁,本质上是对数据块的锁定,这个说法对不对?

不对
关系型表格数据在块内部一行一行存储的,行片段(Row piece)
行锁

6. OCP 考题:

ABE

TM 锁(表级锁)
TX 锁(事务锁或行级锁)
封锁类型:
排他锁(exclusive lock,即X锁)(写锁) 只允许事务T读取和修改数据对象A,其他事务都不能在对数据对象A
共享锁(share lock,即S锁) (读锁) 事务T可以读数据对象A但不能修改A,其他事务只能再对A加S锁,而不能加S锁

数据库锁机制
oracle-数据库的各种-锁-详解

猜你喜欢

转载自blog.csdn.net/hezuijiudexiaobai/article/details/108777826