系统管理Lesson 10. Managing Data Concurrency

本文详细介绍了Oracle数据库的锁机制,包括行级锁、表级锁的使用及其在并发处理中的作用。同时,解释了事务在获取排他锁时为何会获取共享表锁的原因,以及在锁冲突和死锁发生时的解决策略,如通过SQL命令终止持有锁的会话。此外,讨论了Oracle行锁的本质并非直接锁定数据块。
摘要由CSDN通过智能技术生成

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-数据库的各种-锁-详解

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值