设为首页 收藏本站
查看: 1214|回复: 0

[经验分享] oracle的TX lock信息在哪里?

[复制链接]

尚未签到

发表于 2016-7-28 07:08:04 | 显示全部楼层 |阅读模式
  我们都知道ORACLE不会发生锁升级,锁对于ORACLE来说并不是稀缺资源,为什么DML lock对于ORACLE来说不是稀缺资源,下面来寻找答案。
  SQL> select * from emp where sal>2999;
  EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7788 SCOTT ANALYST 7566 4/19/1987 3000.00 20
7839 KING PRESIDENT 11/17/1981 5000.00 10
7902 FORD ANALYST 7566 12/3/1981 3000.00 20
  SQL> select dbms_rowid.rowid_relative_fno(rowid)file_id,dbms_rowid.rowid_block_number(rowid)block_id from emp where sal>2999;
  FILE_ID BLOCK_ID
---------- ----------
5 204
5 204
5 204
  SQL> update emp set job='ANALYST' where sal>2999;-----此处更新3行,那三行就会被lock
  3 rows updated
  SQL> select dump(job,'16') from emp where sal>2999;
  DUMP(JOB,'16')
--------------------------------------------------------------------------------
Typ=1 Len=7: 41,4e,41,4c,59,53,54
Typ=1 Len=7: 41,4e,41,4c,59,53,54
Typ=1 Len=7: 41,4e,41,4c,59,53,54
  SQL> alter system dump datafile 5 block 204;
  系统已更改。
  我现在省略一些无关信息,贴出主要的DUMP信息
  Object id on Block? Y
seg/obj: 0xcd4c csc: 0x00.1a6167 itc: 3 flg: E typ: 1 - DATA
brn: 0 bdba: 0x14000c9 ver: 0x01 opc: 0
inc: 0 exflg: 0

Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0004.001.00000348 0x0080003e.027c.08 ---- 3 fsc 0x0002.00000000
  -----此处loc为3说明刚才发生的update就是由这条ITL记录的,loc表示这个事物影响了多少行。
0x02 0x0003.021.000003e9 0x008002f5.021f.16 C--- 0 scn 0x0000.001a41a8
  -----此处的flag 为C--- 表示事物已经提交,而且清除了行锁定
0x03 0x0005.016.000003f9 0x008006de.0190.12 --U- 1 fsc 0x0000.001a81eb
----此处的 flag 为 --U- 表示这个事物已经提交,但是没有发生块清除,关于块清除这里暂不讨论。
data_block_dump,data header at 0x988787c
===============
tsiz: 0x1f80
hsiz: 0x2e
pbl: 0x0988787c
bdba: 0x014000cc
76543210
flag=--------
ntab=1
nrow=14
frre=-1
fsbo=0x2e
fseo=0x1d25
avsp=0x1d1b
tosp=0x1d1d
0xe:pti[0]nrow=14offs=0
0x12:pri[0]offs=0x1f5a
0x14:pri[1]offs=0x1f2f
0x16:pri[2]offs=0x1f04
0x18:pri[3]offs=0x1edb
0x1a:pri[4]offs=0x1eae
0x1c:pri[5]offs=0x1e85
0x1e:pri[6]offs=0x1e5c
0x20:pri[7]offs=0x1e34
0x22:pri[8]offs=0x1d25
0x24:pri[9]offs=0x1de3
0x26:pri[10]offs=0x1dbd
0x28:pri[11]offs=0x1d97
0x2a:pri[12]offs=0x1d70
0x2c:pri[13]offs=0x1d49
block_row_dump:
tab 0, row 0, @0x1f5a
tl: 38 fb: --H-FL-- lb: 0x3 cc: 8
col 0: [ 3] c2 4a 46
col 1: [ 5] 53 4d 49 54 48
col 2: [ 5] 43 4c 45 52 4b
col 3: [ 3] c2 50 03
col 4: [ 7] 77 b4 0c 11 01 01 01
col 5: [ 2] c2 0b
col 6: *NULL*
col 7: [ 2] c1 15
tab 0, row 1, @0x1f2f
tl: 43 fb: --H-FL-- lb: 0x0 cc: 8
col 0: [ 3] c2 4b 64
col 1: [ 5] 41 4c 4c 45 4e
col 2: [ 8] 53 41 4c 45 53 4d 41 4e
col 3: [ 3] c2 4d 63
col 4: [ 7] 77 b5 02 14 01 01 01
col 5: [ 2] c2 11
col 6: [ 2] c2 04
col 7: [ 2] c1 1f
tab 0, row 2, @0x1f04
tl: 43 fb: --H-FL-- lb: 0x0 cc: 8
col 0: [ 3] c2 4c 16
col 1: [ 4] 57 41 52 44
col 2: [ 8] 53 41 4c 45 53 4d 41 4e
col 3: [ 3] c2 4d 63
col 4: [ 7] 77 b5 02 16 01 01 01
col 5: [ 3] c2 0d 33
col 6: [ 2] c2 06
col 7: [ 2] c1 1f
tab 0, row 3, @0x1edb
tl: 41 fb: --H-FL-- lb: 0x0 cc: 8
col 0: [ 3] c2 4c 43
col 1: [ 5] 4a 4f 4e 45 53
col 2: [ 7] 4d 41 4e 41 47 45 52
col 3: [ 3] c2 4f 28
col 4: [ 7] 77 b5 04 02 01 01 01
col 5: [ 3] c2 1e 4c
col 6: *NULL*
col 7: [ 2] c1 15
tab 0, row 4, @0x1eae
tl: 45 fb: --H-FL-- lb: 0x0 cc: 8
col 0: [ 3] c2 4d 37
col 1: [ 6] 4d 41 52 54 49 4e
col 2: [ 8] 53 41 4c 45 53 4d 41 4e
col 3: [ 3] c2 4d 63
col 4: [ 7] 77 b5 09 1c 01 01 01
col 5: [ 3] c2 0d 33
col 6: [ 2] c2 0f
col 7: [ 2] c1 1f
tab 0, row 5, @0x1e85
tl: 41 fb: --H-FL-- lb: 0x0 cc: 8
col 0: [ 3] c2 4d 63
col 1: [ 5] 42 4c 41 4b 45
col 2: [ 7] 4d 41 4e 41 47 45 52
col 3: [ 3] c2 4f 28
col 4: [ 7] 77 b5 05 01 01 01 01
col 5: [ 3] c2 1d 33
col 6: *NULL*
col 7: [ 2] c1 1f
tab 0, row 6, @0x1e5c
tl: 41 fb: --H-FL-- lb: 0x0 cc: 8
col 0: [ 3] c2 4e 53
col 1: [ 5] 43 4c 41 52 4b
col 2: [ 7] 4d 41 4e 41 47 45 52
col 3: [ 3] c2 4f 28
col 4: [ 7] 77 b5 06 09 01 01 01
col 5: [ 3] c2 19 33
col 6: *NULL*
col 7: [ 2] c1 0b
tab 0, row 7, @0x1e34
tl: 40 fb: --H-FL-- lb: 0x1 cc: 8 ----此处lb表示这一行被lock了,lock这行的事物是 0x1,也就是刚才看见的ITL 0x1,cc表示有8列
col 0: [ 3] c2 4e 59
col 1: [ 5] 53 43 4f 54 54
col 2: [ 7] 41 4e 41 4c 59 53 54
col 3: [ 3] c2 4c 43
col 4: [ 7] 77 bb 04 13 01 01 01 ----此处[7]表示len=7 与select dump(job,'16') from emp where sal>2999;信息一致
col 5: [ 2] c2 1f
col 6: *NULL*
col 7: [ 2] c1 15
tab 0, row 8, @0x1d25
tl: 36 fb: --H-FL-- lb: 0x1 cc: 8 ---此行被事物0x1 lock
  col 0: [ 3] c2 4f 28
col 1: [ 4] 4b 49 4e 47
col 2: [ 7] 41 4e 41 4c 59 53 54
col 3: *NULL*
col 4: [ 7] 77 b5 0b 11 01 01 01 ----此处[7]表示len=7 byte与select dump(job,'16') from emp where sal>2999;信息一致
col 5: [ 2] c2 33
col 6: *NULL*
col 7: [ 2] c1 0b
tab 0, row 9, @0x1de3
tl: 43 fb: --H-FL-- lb: 0x0 cc: 8
col 0: [ 3] c2 4f 2d
col 1: [ 6] 54 55 52 4e 45 52
col 2: [ 8] 53 41 4c 45 53 4d 41 4e
col 3: [ 3] c2 4d 63
col 4: [ 7] 77 b5 09 08 01 01 01
col 5: [ 2] c2 10
col 6: [ 1] 80
col 7: [ 2] c1 1f
tab 0, row 10, @0x1dbd
tl: 38 fb: --H-FL-- lb: 0x0 cc: 8
col 0: [ 3] c2 4f 4d
col 1: [ 5] 41 44 41 4d 53
col 2: [ 5] 43 4c 45 52 4b
col 3: [ 3] c2 4e 59
col 4: [ 7] 77 bb 05 17 01 01 01
col 5: [ 2] c2 0c
col 6: *NULL*
col 7: [ 2] c1 15
tab 0, row 11, @0x1d97
tl: 38 fb: --H-FL-- lb: 0x0 cc: 8
col 0: [ 2] c2 50
col 1: [ 5] 4a 41 4d 45 53
col 2: [ 5] 43 4c 45 52 4b
col 3: [ 3] c2 4d 63
col 4: [ 7] 77 b5 0c 03 01 01 01
col 5: [ 3] c2 0a 33
col 6: *NULL*
col 7: [ 2] c1 1f
tab 0, row 12, @0x1d70
tl: 39 fb: --H-FL-- lb: 0x1 cc: 8-----这行被事物0x1 lock
  col 0: [ 3] c2 50 03
col 1: [ 4] 46 4f 52 44
col 2: [ 7] 41 4e 41 4c 59 53 54
col 3: [ 3] c2 4c 43
col 4: [ 7] 77 b5 0c 03 01 01 01 ----此处[7]表示len=7byte 与select dump(job,'16') from emp where sal>2999;信息一致
col 5: [ 2] c2 1f
col 6: *NULL*
col 7: [ 2] c1 15
tab 0, row 13, @0x1d49
tl: 39 fb: --H-FL-- lb: 0x0 cc: 8
col 0: [ 3] c2 50 23
col 1: [ 6] 4d 49 4c 4c 45 52
col 2: [ 5] 43 4c 45 52 4b
col 3: [ 3] c2 4e 53
col 4: [ 7] 77 b6 01 17 01 01 01
col 5: [ 2] c2 0e
col 6: *NULL*
col 7: [ 2] c1 0b
end_of_block_dump
End dump data blocks tsn: 6 file#: 5 minblk 204 maxblk 204
由此,我们知道ORACLE中的TX -row lock是记录在 block中的,它不像其他数据库那样将lock记录在内存中,避免因为内存资源不足发生锁升级,在ORACLE中,锁开销是很小很小的。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-250320-1-1.html 上篇帖子: oracle job + 存储过程 的使用示例 下篇帖子: Oracle中动态SQL详解[转]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表