突然!某大客户核心凌晨突然崩溃....

news2024/11/11 4:45:59

这几天实在太忙,刚弄完文档。业务线的同事就找到我,说一个银行客户的核心系统昨晚出了故障,还没找到原因,希望能帮忙分析下。

从提供的信息来看是业务跑任务报错,遇到了Oracle-00600和ora-07445 错误。

Doing block recovery for file 408 block 1405699
Resuming block recovery (PMON) for file 408 block 1405699
Block recovery from logseq 127486, block 19033 to scn 0x00000040ee407ee9
Tue Jun 25 02:32:39 2024
Recovery of Online Redo Log: Thread 1 Group 46 Seq 127486 Reading mem 0
  Mem# 0: +DATA1/xxxxx/ONLINELOG/group_46.01.log
Block recovery completed at rba 127486.19061.16, scn 0x00000040ee407ef6
Exception [type: SIGSEGV, Address not mapped to object] [ADDR:0x30044C4E535002C9] [PC:0x100222454, kghrst()+500] [flags: 0x0, count: 1]
Errors in file /u01/oracle/app/diag/rdbms/xxxxx/xxxxx1/trace/xxxxx1_ora_16384202.trc  (incident=4925384):
ORA-07445: exception encountered: core dump [kghrst()+500] [SIGSEGV] [ADDR:0x30044C4E535002C9] [PC:0x100222454] [Address not mapped to object] []
ORA-00607: Internal error occurred while making a change to a data block
ORA-00600: internal error code, arguments: [17182], [0x121242CE0], [], [], [], [], [], [], [], [], [], []
Incident details in: /u01/oracle/app/diag/rdbms/xxxxx/xxxxx1/incident/incdir_4925384/xxxxx1_ora_16384202_i4925384.trc

这里完全不用去看这个600错误和7445错误是什么含义,从前文的日志来看,似乎在做一个block recovery出了异常。通过提供的alert 继续往前翻发现,在当天晚上22点过就开始报错了。

Mon Jun 24 22:29:29 2024
Errors in file /u01/oracle/app/diag/rdbms/xxxxx/xxxxx1/trace/xxxxx1_ora_21038638.trc  (incident=4926767):
ORA-00600: internal error code, arguments: [kdsgrp1-qetlbrcb], [7], [1712681731], [95], [], [], [], [], [], [], [], []
Mon Jun 24 22:29:29 2024
Errors in file /u01/oracle/app/diag/rdbms/xxxxx/xxxxx1/trace/xxxxx1_ora_35193336.trc  (incident=4924391):
ORA-00600: internal error code, arguments: [4512], [128], [23], [0.0.0], [85557], [527736], [7], [1712681731], [], [], [], []
Incident details in: /u01/oracle/app/diag/rdbms/xxxxx/xxxxx1/incident/incdir_4924391/xxxxx1_ora_35193336_i4924391.trc
Incident details in: /u01/oracle/app/diag/rdbms/xxxxx/xxxxx1/incident/incdir_4926767/xxxxx1_ora_21038638_i4926767.trc

老实说这个报错其实很眼熟,但是用户google都搜不到这个错误。其实也搜了下mos发现根本搜不到。

但是从字面意思来看,kdsgrp1-qetlbrcb 和kdsgrp1 应该是差不多的含义和处理思路。

这里简单解释一下这个关键错误: ORA-00600: internal error code, arguments: [kdsgrp1-qetlbrcb], [7], [1712681731], [95], [], [], [], [], [], [], [], []

这表示读取数据时发现第7号表空间的第1712681731号block(这是10进制,需要转换成file/block)的第95行数据 读取报错。

既然如此我们就干脆来看看trace文件得了,更加直观一些。

kdsDumpState: cdb: 0 dspdb: 0 type: 1 info: 0x5 flag: 0x0
kdsDumpState: sample type: 0 layer: 0
* kdsgrp1-1: where 4 *************************************
        row 0x66157303.5f no continuation RID
        row likely from index rdba: 0x602ba953, tsn: 8
 rfile# 408 block# 1405699 slot 95 not found (dscnt: 0)
Objd 527736 tsn 7  Bigfile TS : NO 
  Next off 0 last piece 0 curlvl 0 flag 0x0 slotn 95 
  Head RID 0x00000000
KDSTABN_GET: 0 ..... ntab: 1
curSlot: 95 ..... nrows: 113
Dumping kcb descriptor:
kcbds 0x12129caa8: pdb 0, tsn 7, rdba 0x66157303, afn 408, objd 527736, cls 1, tidflg 0x8 0x80 0x0

实际上这里就描述的相对清晰了。 看到这里,我是多么希望国产数据库在这方面也能加强加强。

上面的信息我简单翻译一下就是,该业务SQL通过索引回表发现该表所在的408号文件的1405699号block的95行数据找不到。 那么这里可以根据trace来看看上面提到的索引block的dump,看看索引中的数据是否存在:

Block header dump:  0x602ba953
 Object id on Block? Y
 seg/obj: 0x80ccd  csc:  0x00000040eaf1e443  itc: 29  flg: E  typ: 2 - INDEX
     brn: 0  bdba: 0x602ba900 ver: 0x01 opc: 0
     inc: 0  exflg: 0
 
 Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0687.01a.005827a7  0x69441431.81ca.01  CB--    0  scn  0x00000040ea5d1092
0x02   0x0578.017.0058304a  0x13854664.81bd.05  C---    0  scn  0x00000040eaf091ca
0x03   0x0691.000.00527481  0x13481b1e.7a65.02  --U-    1  fsc 0x0000.eaf1e447
0x04   0x0ac7.01c.0057faf6  0x014694b8.8239.34  --U-    1  fsc 0x0000.eaf452de
0x05   0x0893.01a.005513e8  0x13c63a6d.801b.1f  --U-    1  fsc 0x0000.eaf50ce1
0x06   0x0e66.00e.0056e394  0x0147e001.7ebf.18  --U-    1  fsc 0x0000.eaf759d4
0x07   0x09de.01a.00550cd8  0x0146f9b1.7d9d.0a  --U-    1  fsc 0x0000.eafc97cf
0x08   0x0e71.014.0057f64e  0x0145946a.803d.2b  C---    0  scn  0x00000040eaa00c93
0x09   0x0634.01b.00554046  0x1348c984.7f41.10  --U-    1  fsc 0x0000.eb00fbf7
0x0a   0x0c22.011.00524991  0x14035b22.7b9a.37  C---    0  scn  0x00000040ea7dc8fb
。。。。。。
0x1d   0x0397.00b.0058ff56  0x1385a287.8186.10  C---    0  scn  0x00000040ead9fe73
Leaf block dump
===============
header address 504404435098002156=0x70001294925e2ec
kdxcolev 0
KDXCOLEV Flags = - - -
kdxcolok 0
kdxcoopc 0x80: opcode=0: iot flags=--- is converted=Y
kdxconco 2
kdxcosdc 1
kdxconro 112
kdxcofbo 260=0x104
kdxcofeo 2456=0x998
kdxcoavs 2196
kdxlespl 0
kdxlende 0
kdxlenxt 1879049743=0x7000060f
kdxleprv 1692400010=0x64dff98a
kdxledsz 6
kdxlebksz 7384
row#0[3952] flag: -------, lock: 0, len=44, data:(6):  65 dc 06 09 00 5c
col 0; len 24; (24): 
......
row#95[3248] flag: -------, lock: 0, len=44, data:(6):  55 fb bf dd 00 55
col 0; len 24; (24): 
 30 39 36 35 34 32 34 31 32 32 30 36 33 30 32 47 39 32 30 36 35 35 32 36
col 1; len 10; (10):  32 30 32 34 2d 30 36 2d 32 34
......

可见索引数据是存在的,且索引block的数据是完整的,但rows只有112条。

接下来我们继续看对应的数据块dump内容:

kdsgrp - dump CR block dba=0x66157303
buffer tsn: 7 rdba: 0x66157303 (408/1405699)
scn: 0x40eb045a4d seq: 0x01 flg: 0x02 tail: 0x5a4d0601
frmt: 0x02 chkval: 0x0000 type: 0x06=trans data
Block header dump:  0x66157303
 Object id on Block? Y
 seg/obj: 0x80d78  csc:  0x00000040eb0456d2  itc: 23  flg: E  typ: 1 - DATA
     brn: 0  bdba: 0x66157300 ver: 0x01 opc: 0
     inc: 0  exflg: 0
......
 Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0741.01e.00582a93  0x6947578f.8183.1f  C---    0  scn  0x00000040eb044b19
......
0x06   0x0be6.002.004fc3b0  0x13c6fde1.79e5.06  C---    0  scn  0x00000040eb044f1c
0x07   0x022e.017.00553cca  0x1347f24f.7f8e.1e  --U-    1  fsc 0x0000.eb045744
0x08   0x0966.002.0057fef0  0x6985968d.8291.04  --U-    1  fsc 0x0000.eb045a4d
......
0x0d   0x0987.012.00524580  0x13c71e54.7b57.32  C---    0  scn  0x00000040eb044e04
0x0e   0x01a7.00c.00559065  0x1385fe1e.80e6.11  --U-    1  fsc 0x0000.eb0456e8
.....
0x14   0x036b.005.00527dfc  0x1385dc2e.7cfd.34  --U-    1  fsc 0x0000.eb0456d4
0x15   0x03ce.013.0055663e  0x0108a195.7ff5.03  C---    0  scn  0x00000040eb0420d8
0x16   0x0728.017.0059a11a  0x134743fa.82a9.19  C---    0  scn  0x00000040eb0424c6
0x17   0x02ff.01e.00553ed3  0x1385cbcc.8005.1f  C---    0  scn  0x00000040eb042df6
bdba: 0x66157303
data_block_dump,data header at 0x700012ec8f9825c
===============
tsiz: 0x1da0
hsiz: 0xf4
pbl: 0x700012ec8f9825c
     76543210
flag=--------
ntab=1
nrow=113
frre=-1
fsbo=0xf4
fseo=0xf9
avsp=0x5
tosp=0x5
0xe:pti[0] nrow=113 offs=0
0x12:pri[0] offs=0x1d50
0x14:pri[1] offs=0x1d06
。。。。。。
0xcc:pri[93] offs=0x5a2
0xce:pri[94] offs=0x559
0xd0:pri[95] offs=0x525
0xd2:pri[96] offs=0x4f0
。。。。。。
0xf0:pri[111] offs=0x18c
0xf2:pri[112] offs=0x142
block_row_dump:
。。。。。。。
tab 0, row 94, @0x559
tl: 2 fb: --HDF--- lb: 0x31 
tab 0, row 95, @0x525
tl: 1716 fb: KC-----N lb: 0x56  cc: 43 cki: 2
nrid:  0xc10b0831.3133
col  0: [50]
 30 36 30 31 01 80 0a 32 30 32 32 2d 31 31 2d 30 31 01 80 03 c1 56 2b 03 c1
 56 2b 01 80 01 80 2c 00 10 18 30 38 35 35 38 31 38 31 31 39 30 36 32 35 32
col  1: [88]
 30 30 30 31 38 39 36 31 03 49 30 31 06 35 35 38 31 38 31 03 43 4e 59 10 35
 35 38 31 38 31 30 31 36 30 31 31 30 31 30 31 03 c1 56 2b 01 80 02 c1 2b 08
 36 30 31 31 30 31 30 31 03 c1 56 2b 0a 32 30 32 32 2d 31 30 2d 33 31 01 80
 01 80 03 c1 56 2b 01 80 01 80 2c 00 10
col  2: [24]
 30 38 35 35 38 31 38 31 31 39 30 36 32 35 32 58 30 30 30 31 38 39 36 31
col  3: [ 3]  48 30 31
col  4: [ 6]  35 35 38 31 38 31
col  5: [ 3]  43 4e 59
col  6: [16]  35 35 38 31 38 31 30 31 31 33 30 31 30 31 30 33
col  7: [ 1]  80
col  8: [ 3]  c1 56 2b
col  9: [ 2]  c1 32
col 10: [ 8]  31 33 30 31 30 31 30 33
col 11: [ 1]  80
col 12: [10]  32 30 32 32 2d 31 31 2d 30 31
col 13: [ 1]  80
col 14: [ 3]  c1 56 2b
col 15: [ 3]  c1 56 2b
col 16: [ 1]  80
col 17: [ 1]  80
col 18: [44]
 00 10 18 30 38 35 35 37 31 34 31 32 31 31 31 31 36 32 43 35 37 34 38 31 35
 35 33 03 41 30 31 06 35 35 37 31 34 31 03 43 4e 59 10 35
col 19: [53]
 37 31 34 31 30 31 31 31 33 32 30 36 30 31 01 80 03 c1 05 49 02 c1 04 08 31
 31 33 32 30 36 30 31 01 80 0a 32 30 32 32 2d 31 30 2d 30 31 01 80 03 c1 05
 49 03 c1
col 20: [ 5]  49 01 80 01 80
col 21: [44]
 00 10 18 30 39 36 35 35 32 38 31 32 32 30 37 30 35 32 43 35 39 37 31 38 32
 34 37 03 41 30 31 06 36 35 35 32 38 31 03 43 4e 59 10 36
col 22: [53]
 35 32 38 31 30 31 31 31 33 32 30 36 30 31 01 80 04 c2 03 08 33 02 c1 0e 08
 31 31 33 32 30 36 30 31 01 80 0a 32 30 32 33 2d 30 31 2d 30 39 01 80 04 c2
 03 08 33
col 23: [ 4]  c2 03 08 33
col 24: [ 1]  80
col 25: [ 1]  80
col 26: [44]
 00 10 18 30 37 36 30 32 32 35 31 32 32 30 34 31 31 32 47 37 32 30 33 36 37
 35 37 03 41 30 31 06 36 30 32 32 35 31 03 43 4e 59 10 36
col 27: [48]
 32 32 35 31 30 31 31 31 33 32 30 36 30 31 01 80 03 c1 1e 1b 02 c1 10 08 31
 31 33 32 30 36 30 31 01 80 0a 32 30 32 33 2d 30 32 2d 30 31 01 80 03
col 28: [193]
 1e 1b 03 c1 1e 1b 01 80 01 80 2c 00 10 18 30 37 36 30 32 32 35 31 32 32 30
 34 31 31 32 47 37 32 30 33 36 37 35 37 03 49 30 31 06 36 30 32 32 35 31 03
 43 4e 59 10 36 30 32 32 35 31 30 31 36 30 31 31 30 31 30 31 03 c1 1e 1b 01
 80 03 c2 02 26 08 36 30 31 31 30 31 30 31 03 c1 1e 1b 0a 32 30 32 33 2d 30
 31 2d 33 31 01 80 01 80 03 c1 1e 1b 01 80 01 80 2c 00 10 18 30 37 36 30 32
 32 35 31 32 32 30 34 31 31 32 47 37 32 30 33 36 37 35 37 03 48 30 31 06 36
 30 32 32 35 31 03 43 4e 59 10 36 30 32 32 35 31 30 31 31 33 30 31 30 31 30
 33 01 80 03 c1 1e 1b 03 c2 02 2c 08 31 33 30 31 41 30
col 29: [49]
 31 35 35 35 30 31 0a 32 30 32 34 2d 30 36 2d 32 34 02 32 30 04 4c 4e 53 50
 01 80 01 53 01 80 08 b4 a6 c0 ed b3 c9 b9 a6 0a 32 30 32 34 2d 30 36 2d
col 30: [50]
 35 2c 00 09 18 30 32 30 32 30 30 38 30 31 30 30 30 36 32 34 41 30 33 35 38
 32 37 30 31 0a 32 30 32 34 2d 30 36 2d 32 34 02 32 30 04 4c 4e 53 50 02 c1
col 31: [19]  01 53 01 80 08 b4 a6 c0 ed b3 c9 b9 a6 0a 32 30 32 34 2d
col 32: [48]
 36 2d 32 35 0c 00 09 68 15 98 53 00 3a 18 30 34 33 36 30 31 33 33 32 33 30
 32 32 37 32 43 33 36 30 39 37 30 39 32 0a 32 30 32 34 2d 30 36 2d 32
col 33: [52]
 02 32 30 04 4c 4e 53 50 02 c1 14 01 53 01 80 08 b4 a6 c0 ed b3 c9 b9 a6 0a
 32 30 32 34 2d 30 36 2d 32 35 2c 00 07 18 31 30 31 31 30 30 36 30 31 38 39
 30 33
col 34: [49]
 36 41 30 33 35 37 35 37 30 31 0a 32 30 32 34 2d 30 36 2d 32 34 01 30 04 4c
 4f 41 4e 02 c1 1a 01 53 01 80 2c 00 07 18 30 34 33 35 38 31 34 31 32 32
col 35: [48]
 31 31 39 32 47 33 34 37 33 37 35 30 33 0a 32 30 32 34 2d 30 36 2d 32 34 01
 30 04 4c 4f 41 4e 02 c1 1a 01 53 01 80 2c 00 07 18 30 37 36 30 38 31
col 36: [48]
 33 32 34 30 31 31 31 32 47 38 38 31 38 39 33 33 34 0a 32 30 32 34 2d 30 36
 2d 32 34 01 30 04 4c 4f 41 4e 02 c1 1a 01 53 01 80 2c 00 07 18 30 38
col 37: [53]
 35 37 33 39 31 32 31 31 31 31 31 32 43 37 39 37 30 36 32 36 33 0a 32 30 32
 34 2d 30 36 2d 32 34 01 30 04 4c 4f 41 4e 02 c1 1c 01 53 01 80 2c 00 07 18
 30 39 36
col 38: [53]
 37 31 31 31 32 32 31 32 31 35 32 43 30 31 39 33 30 33 36 35 0a 32 30 32 34
 2d 30 36 2d 32 34 01 30 04 4c 4f 41 4e 02 c1 18 01 53 01 80 2c 00 07 18 30
 35 34 37
col 39: [57]
 34 34 31 32 33 30 38 31 37 32 43 30 39 33 38 37 32 31 37 0a 32 30 32 34 2d
 30 36 2d 32 34 01 30 04 4c 4f 41 4e 02 c1 18 01 53 01 80 0c 00 09 67 15 90
 81 00 3b 18 30 38 35
col 40: [53]
 37 32 38 31 32 32 31 31 31 34 32 43 30 30 32 39 39 37 38 35 0a 32 30 32 34
 2d 30 36 2d 32 34 02 32 30 04 4c 4e 53 50 02 c1 1a 01 53 01 80 08 b4 a6 c0
 ed b3 c9
col 41: [185]
 a6 0a 32 30 32 34 2d 30 36 2d 32 35 2c 00 07 18 30 32 31 35 36 30 33 31 32
 33 30 37 32 35 32 43 37 37 33 34 33 32 31 31 0a 32 30 32 34 2d 30 36 2d 32
 34 01 30 04 4c 4f 41 4e 02 c1 16 01 53 01 80 2c 00 07 18 30 34 33 35 38 32
 37 31 32 31 30 39 31 30 32 47 35 33 34 36 36 35 30 33 0a 32 30 32 34 2d 30
 36 2d 32 34 01 30 04 4c 4f 41 4e 02 c1 16 01 53 01 80 0c 00 09 68 15 98 d4
 00 17 18 31 30 33 31 34 30 39 31 32 32 30 36 31 33 32 43 30 33 34 37 31 31
 37 37 0a 32 30 32 34 2d 30 36 2d 32 34 02 32 30 04 4c 4e 53 50 02 c1 1a 01
 53 01 80 08 b4 a6 c0 ed b3 c9
col 42: [185]
 a6 0a 32 30 32 34 2d 30 36 2d 32 35 20 00 00 64 1d 81 02 00 55 2c 00 09 18
 30 39 36 36 32 32 34 31 32 32 30 39 30 35 32 43 36 34 37 31 38 35 34 35 0a
 32 30 32 34 2d 30 36 2d 32 34 02 32 30 04 4c 4e 53 50 01 80 01 53 01 80 08
 b4 a6 c0 ed b3 c9 b9 a6 0a 32 30 32 34 2d 30 36 2d 32 35 2c 00 09 18 30 32
 30 32 30 30 39 30 31 39 33 30 31 30 31 41 30 30 37 36 36 36 30 31 0a 32 30
 32 34 2d 30 36 2d 32 34 02 32 30 04 4c 4e 53 50 01 80 01 53 01 80 08 b4 a6
 c0 ed b3 c9 b9 a6 0a 32 30 32 34 2d 30 36 2d 32 35 2c 00 09 09 31 32 37 36
 30 31 31 37 31 0a 32 30 32 34
tab 0, row 96, @0x4f0
tl: 2 fb: --HDF--- lb: 0x31 

Oh my God!这个数据看起来是有问题的。首先看dump 该block显示有113行数据,似乎跟index的数据是不匹配的(索引只有112条);其次该block对应的第95行数据。。。这看起来完全是乱码呀。

先不说是不是真的乱码,首先这行数据的行指针指向了另外一个block 0xc10b0831的3133行数据。而且看上去这行数据显示该block时一个cluster table。

很明显,我们这个数据块所在的表是一个普通表,不是cluster table。最起码的,列都对不上呀。

实际上看该trace的上下文,发现这个数据块有3行数据都有问题。实际上这个数据块的结构是完整的,只是block的数据异常(包括row directory),因此这是一个逻辑坏块。

比如看该block的itl中比较新的一个事务对应的redo record记录,发现是有行迁移的(实际上看block dump也能看到)。

CHANGE #2 CON_ID:0 TYP:0 CLS:1 AFN:408 DBA:0x66157303 OBJ:527736 SCN:0x00000040eb042db8 SEQ:1 OP:11.6 ENC:0 RBL:0 FLG:0x0000
KTB Redo
op: 0x02  ver: 0x01  
compat bit: 4 (post-11) padding: 1
op: C  uba: 0x1385cbcc.8005.1f
KDO Op code: ORP row dependencies Disabled
  xtype: XA flags: 0x00000000  bdba: 0x66157303  hdba: 0x04402305
itli: 23  ispac: 0  maxfr: 4858
tabn: 0 slot: 68(0x44) size/delt: 9
fb: --H----- lb: 0x17  cc: 0
nrid:  0x641d8102.55
null:

通过分析trace发现该数据块之前的redo dump记录都是正常的,而且只有update和insert操作,并无delete记录(看redo opcode即可)。

最终客户通过重建表暂时解决了问题。

那么问题来了,这个问题是怎么产生的呢?

老实说我比较怀疑写丢失导致的bug,毕竟redo都是正常的。

而看前面的dump我们可以看到:kdsgrp - dump CR block dba

这表示oracle报错的时候dump 内存块时,发现这个block是一个cr block。我们知道Oracle中的cr是利用 落盘后的数据块+undo 进行重构的。

难道说之前写数据落盘的时候,这个block就有问题了,所以后面构造的cr block也是有问题的。

这里我在测试环境验证一下这个问题。

破坏一下行头 是否可以恢复

+++Session 1
SQL> show user
USER is "ROGER"
SQL> create table test0626(a number,b varchar2(100));

Table created.

SQL> insert into test0626 values(10,'enmotech.com');

1 row created.

SQL> insert into test0626 values(20,'mogdb.io');

1 row created.

SQL> insert into test0626 values(30,'killdb.com');

1 row created.

SQL> insert into test0626 values(100,'china chengdu');

1 row created.

SQL> commit;

Commit complete.

SQL> alter system checkpoint;

System altered.

SQL>  
SQL> select  a.*,
  2          dbms_rowid.rowid_object(rowid) object_id,
        dbms_rowid.rowid_relative_fno(rowid) file_id,
  3    4          dbms_rowid.rowid_block_number(rowid) block_id,
  5          dbms_rowid.rowid_row_number(rowid) num,
  6          rowidtochar(rowid)
  7  from test0626 a;

         A B                               OBJECT_ID    FILE_ID   BLOCK_ID        NUM ROWIDTOCHAR(ROWID)
---------- ------------------------------ ---------- ---------- ---------- ---------- ------------------------------------
        10 enmotech.com                       113932          4     374414          0 AAAb0MAAEAABbaOAAA
        20 mogdb.io                           113932          4     374414          1 AAAb0MAAEAABbaOAAB
        30 killdb.com                         113932          4     374414          2 AAAb0MAAEAABbaOAAC
       100 china chengdu                      113932          4     374414          3 AAAb0MAAEAABbaOAAD

SQL> alter system flush buffer_cache;

System altered.


++++Session 2

BBED> set file 4 block 374414
        FILE#           4
        BLOCK#          374414

BBED> p kdbr
sb2 kdbr[0]                                 @118      8069
sb2 kdbr[1]                                 @120      8054
sb2 kdbr[2]                                 @122      8037
sb2 kdbr[3]                                 @124      8017

BBED> p *kdbr[2] 
rowdata[20]
-----------
ub1 rowdata[20]                             @8137     0x2c

BBED> x /rnnnnnnnnccccccc
rowdata[20]                                 @8137    
-----------
flag@8137: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8138: 0x01
cols@8139:    2

col    0[2] @8140: 30 
col   1[10] @8143: ######################################### 

BBED> x /rnnnnnnnnccccccc
rowdata[20]                                 @8137    
-----------
flag@8137: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8138: 0x01
cols@8139:    2

col    0[2] @8140: 30 
col   1[10] @8143: ######################################### 

BBED> modify /x 6c0103   
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
 File: /u01/app/oracle/oradata/data/OGGDB/datafile/users01.dbf (4)
 Block: 374414           Offsets: 8137 to 8140           Dba:0x0105b68e
------------------------------------------------------------------------
 6c010302 

 <32 bytes per line>

BBED> sum apply
Check value for File 4, Block 374414:
current = 0xd734, required = 0xd734

BBED>



+++Session 2

SQL> update test0626 set b='www.baidu.com' where a=100;

1 row updated.

SQL>  不提交

+++session 3
SQL> shutdown abort;
ORACLE instance shut down.
SQL> startup    
ORACLE instance started.

Total System Global Area 3423965184 bytes
Fixed Size                  2258040 bytes
Variable Size             855640968 bytes
Database Buffers         2550136832 bytes
Redo Buffers               15929344 bytes
Database mounted.
Database opened.
SQL> set lines 120
SQL> select * from roger.test0626;

         A
----------
B
------------------------------------------------------------------------------------------------------------------------
        10
enmotech.com

        20
mogdb.io


db.io, ?

        enmotech.comG??  E?                T  ?
                                               ? ?  ?   


         A
----------
B
------------------------------------------------------------------------------------------------------------------------
       100
china chengdu


SQL> 

++++session 4

oracle@Ora11g-ogg-Target:/home/oracle $sqlplus roger/roger

SQL*Plus: Release 11.2.0.4.0 Production on Wed Jun 26 21:18:51 2024

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select * from test0626;

         A
----------
B
--------------------------------------------------------------------------------
        10
enmotech.com

        20
mogdb.io


db.io, ?

              ??? ~   ??         @ ?C           ?

         A
----------
B
--------------------------------------------------------------------------------

       100
china chengdu


SQL>             
++++Session 5 
oracle@Ora11g-ogg-Target:/home/oracle $sqlplus roger/roger

SQL*Plus: Release 11.2.0.4.0 Production on Wed Jun 26 21:18:59 2024

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>     conn /as sysdba
Connected.
SQL> select dbms_utility.make_data_block_address(4,374414) from dual;

DBMS_UTILITY.MAKE_DATA_BLOCK_ADDRESS(4,374414)
----------------------------------------------
                                      17151630

SQL> oradebug setmypid
Statement processed.
SQL> oradebug tracefile_name
/u01/app/oracle/diag/rdbms/oggdb/oggdb/trace/oggdb_ora_5736.trc
SQL> alter session set events 'immediate trace name set_tsn_p1 level 5';

Session altered.

SQL> alter session set events 'immediate trace name buffer level 17151630';

Session altered.

SQL>  SELECT lru_flag,
  2         tch,
       BA,
       decode(STATE,0,'free',1,'xcur',2,'scur',3,'cr', 4,'read',5,'mrec',6,'irec',7,'write',8,'pi', 9,'memory',10,'mwrite',11,'donated', 12,'protected', 13,'securefile', 14,'siop',15,'recckpt', 16, 'flashfree', 17, 'flashcur', 18, 'flashna') status
FROM x$bh
  3    4    5    6  WHERE FILE#=4
  7    AND DBABLK=374414;

  LRU_FLAG        TCH BA               STATUS
---------- ---------- ---------------- --------------------
         0          1 00000000B0A0C000 cr
         0          1 000000009139C000 cr
         0          1 0000000092EE2000 xcur
         2          1 0000000092EE4000 cr
         4          0 00000000994F0000 free

SQL>

可以看到,居然能恢复这个逻辑坏块。这个逻辑坏块可查,只不过有问题这行数据显示为乱码而已。

如果去dump数据块看,确实是乱码:

oracle@Ora11g-ogg-Target:/home/oracle $cat /u01/app/oracle/diag/rdbms/oggdb/oggdb/trace/oggdb_ora_5736.trc|grep "Block header dump:  0x0105b68e"
Block header dump:  0x0105b68e
Block header dump:  0x0105b68e
Block header dump:  0x0105b68e
Block header dump:  0x0105b68e

Block header dump:  0x0105b68e
 Object id on Block? Y
 seg/obj: 0x1bd0c  csc: 0x00.2af3579  itc: 2  flg: E  typ: 1 - DATA
     brn: 0  bdba: 0x105b688 ver: 0x01 opc: 0
     inc: 0  exflg: 0
 
 Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0008.00d.000067f5  0x00c0010b.1a54.0c  C---    0  scn 0x0000.02af32fd
0x02   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000
bdba: 0x0105b68e
data_block_dump,data header at 0xb0a0c064
===============
tsiz: 0x1f98
hsiz: 0x1a
pbl: 0xb0a0c064
     76543210
flag=--------
ntab=1
nrow=4
frre=-1
fsbo=0x1a
fseo=0x1f51
avsp=0x1f37
tosp=0x1f37
0xe:pti[0]      nrow=4  offs=0
0x12:pri[0]     offs=0x1f85
0x14:pri[1]     offs=0x1f76
0x16:pri[2]     offs=0x1f65
0x18:pri[3]     offs=0x1f51
block_row_dump:
tab 0, row 0, @0x1f85
tl: 19 fb: --H-FL-- lb: 0x0  cc: 2
col  0: [ 2]  c1 0b
col  1: [12]  65 6e 6d 6f 74 65 63 68 2e 63 6f 6d
tab 0, row 1, @0x1f76
tl: 15 fb: --H-FL-- lb: 0x0  cc: 2
col  0: [ 2]  c1 15
col  1: [ 8]  6d 6f 67 64 62 2e 69 6f
tab 0, row 2, @0x1f65
tl: 200 fb: -CH-FL-- lb: 0x0  cc: 3 cki: 2
col  0: [193]
 1f 0a 6b 69 6c 6c 64 62 2e 63 6f 6d 2c 00 02 02 c1 15 08 6d 6f 67 64 62 2e
 69 6f 2c 00 02 02 c1 0b 0c 65 6e 6d 6f 74 65 63 68 2e 63 6f 6d 00
dmp lmt after 47
col  1: [0]
col  2: [0]
tab 0, row 3, @0x1f51
tl: 20 fb: --H-FL-- lb: 0x0  cc: 2
col  0: [ 2]  c2 02
col  1: [13]  63 68 69 6e 61 20 63 68 65 6e 67 64 75
end_of_block_dump

因为这里模拟构造了cr block,因此可以看到实际上有多个cr block,因为dump 该dba buffer会发现trace中有多行记录。

不过这不重要,我们发现多个dump 记录中的第三行数据都是乱码。

那么这说明什么问题,说明实际上默认情况下对于逻辑坏块在读取时并没有进行校验。

那么如果预防这样的问题,实际上oracle提供了一些方法,比如打开block和索引的读写校验,实际上就可以避免上面测试遇到的问题。

SQL> alter system set db_ultra_safe=DATA_AND_INDEX scope=spfile;

System altered.

SQL> shutdown abort;
ORACLE instance shut down.
SQL> startup 
ORACLE instance started.

Total System Global Area 3423965184 bytes
Fixed Size                  2258040 bytes
Variable Size             855640968 bytes
Database Buffers         2550136832 bytes
Redo Buffers               15929344 bytes
Database mounted.
Database opened.
SQL> conn roger/roger
Connected.
SQL> set lines 120
SQL> col b for a40
SQL> select * from test0626;

         A B
---------- ----------------------------------------
        10 enmotech.com
        20 mogdb.io
           db.io, ?

                   enmotech.com??      )                        ?
                         ??

           china chengdu

SQL> update test0626 set b='MogDB 5.2' where a=20;
update test0626 set b='MogDB 5.2' where a=20
       *
ERROR at line 1:
ORA-00607: Internal error occurred while making a change to a data block
ORA-00600: internal error code, arguments: [kdBlkCheckError], [4], [374414], [6103], [], [], [], [], [], [], [], []


SQL> 
SQL> show parameter db_block

NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- ------------------------------
db_block_buffers                     integer                0
db_block_checking                    string                 FULL
db_block_checksum                    string                 FULL
db_block_size                        integer                8192
SQL> 

此时报错的信息,也会在alert log详细打印,明确告你是什么对象的什么block有问题。

写在最后。所以你认为B表的数据被写到了A表,你认为这是Oracle Bug吗。

想了解更多内容,可以参考这2个课程系列文章。

alt

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1870131.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Python实现深度学习模型通常涉及以下几个步骤

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把手教你开发炫酷的vbs脚本制作(完善中……&#xff09; 4、牛逼哄哄的 IDEA编程利器技巧(编写中……&#xff09; 5、面经吐血整理的 面试技…

2024年【焊工(初级)】实操考试视频及焊工(初级)考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 焊工&#xff08;初级&#xff09;实操考试视频根据新焊工&#xff08;初级&#xff09;考试大纲要求&#xff0c;安全生产模拟考试一点通将焊工&#xff08;初级&#xff09;模拟考试试题进行汇编&#xff0c;组成一…

Windows条件竞争提权漏洞复现(CVE-2024-300889)

漏洞原理 当内核将当前令牌对象的 _AUTHZBASEP_SECURITY_ATTRIBUTES_INFORMATION 复制到用户模式时&#xff0c;错误位于函数 AuthzBasepCopyoutInternalSecurityAttributes 内部&#xff0c;该模式的结构如下&#xff1a; //0x30 bytes (sizeof) struct _AUTHZBASEP_SECURIT…

有哪些方法可以恢复ios15不小心删除的照片?

ios15怎么恢复删除的照片&#xff1f;在手机相册里意外删除了重要的照片&#xff1f;别担心&#xff01;本文将为你介绍如何在iOS 15系统中恢复已删除的照片。无需专业知识&#xff0c;只需要按照以下步骤操作&#xff0c;你就能轻松找回宝贵的回忆。 一、从iCloud云端恢复删除…

台式机通过网线直连笔记本,台式机通过笔记本上网【解决台式机没有网络的问题】

一、总览 将笔记本电脑和台式机使用网线连接起来。在笔记本电脑上打开网络和共享中心&#xff0c;进入“更改适配器设置”选项&#xff0c;找到当前连接的网卡&#xff0c;右键点击选择“属性”。在网卡属性中&#xff0c;找到“共享”选项卡&#xff0c;勾选“允许其他网络用…

怎么打印加密的Excel文件,有哪些方法?

很多小伙伴都喜欢使用Excel来创建或是编辑表格文档&#xff0c;因为Excel中的功能十分的丰富且强大&#xff0c;在Excel中我们可以对表格文档进行各种操作。有的小伙伴可能在打印时需要给每一页表格添加页码&#xff0c;但又不知道该在哪里找到相关操作&#xff0c;其实很简单&…

elasticsearch重置密码

0 案例背景 Elasticsearch三台集群环境&#xff0c;对外端口为6200&#xff0c;忘记elasticsearch密码&#xff0c;进行重置操作 注&#xff1a;若无特殊说明&#xff0c;三台服务器均需进行处理操作 1 停止es /rpa/bin/elasticsearch.sh stop 检查状态 ps -ef|grep elast…

武汉星起航:深度洞察消费趋势,亚马逊美国站选品独具匠心

亚马逊美国站作为全球电商巨头的重要分支&#xff0c;其选品特点不仅反映了美国市场的消费趋势&#xff0c;更引领着全球消费者的购物潮流。从运动户外、宠物用品到美容个人护理&#xff0c;亚马逊美国站的选品策略始终紧跟市场脉搏&#xff0c;为消费者提供丰富多样、品质优良…

深入浅出:npm常用命令详解与实战

theme: smartblue npm是什么 npm&#xff08;Node Package Manager&#xff09;是Node.js平台的默认包管理器&#xff0c;它让JavaScript开发者能够轻松地共享、管理和使用彼此编写的代码模块。npm不仅仅是一个安装工具&#xff0c;它还是一个全面的生态系统&#xff0c;用于发…

应用监控pinpoint调研

参考 https://blog.csdn.net/Rose_juvenile/article/details/135285508?utm_mediumdistribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-135285508-blog-132330996.235^v43^pc_blog_bottom_relevance_base6&spm1001.2101.3001.4242.1&a…

2024年6月大众点评广州餐饮店铺POI分析20万家

2024年6月大众点评广州餐饮店铺POI共有199175家 店铺POI点位示例&#xff1a; 店铺id k9uiFADtAvs9EdPC 店铺名称 点都德(聚福楼店) 十分制服务评分 8.6 十分制环境评分 8.3 十分制划算评分 8.5 人均价格 77 评价数量 41673 店铺地址 惠福东路470号(富临食府对面) 大…

算法力扣刷题记录十【19.删除链表的倒数第N个节点】

前言 链表练习&#xff0c;继续 题目&#xff1a;力扣【19.删除链表的倒数第N个节点】 题目阅读 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1…

使用Anaconda Prompt安装cv2模块

问题 使用命令&#xff1a; conda install opencv-python出现找不到包 使用命令&#xff1a;pip install opencv-python下载很慢&#xff08;kb/s速度&#xff09;而且会由于断连报错&#xff08;不一定是网的问题&#xff09; 解决方案 使用清华镜像下载&#xff0c;这样…

逆变器使用手册:类型详解、安装要点与维护须知

逆变器随着可再生能源的兴起和移动电源需求的激增已成为连接直流电与交流电世界的桥梁&#xff0c;其重要性不言而喻。无论是太阳能发电系统的高效利用&#xff0c;还是汽车、游艇等移动设备的电力供应&#xff0c;逆变器都扮演着关键角色。然而&#xff0c;正确的使用方法是确…

3D在线展览馆的独特魅力,技术如何重塑展览业的未来?

在数字化和虚拟现实技术迅猛发展的今天&#xff0c;3D在线展览馆已经成为一种颇具前景的创新形式。搭建3D在线展览馆不仅能够突破传统展览的时空限制&#xff0c;还能为参观者提供身临其境的体验&#xff0c;极大地提升展示效果和用户互动。 一、3D在线展览馆的意义 1、突破时空…

idea 自动生成序列化数字

目标&#xff1a;当类继承Serializable后自动生成序列化Uid 网上查了很多说勾选class without ‘serialVersionUID’ 但是我勾选没用 最后发现&#xff0c;我勾选的是Serialization issues里面的配置&#xff0c;要勾选的是JVM languages下的 如下图所示&#xff0c;记录一下…

鸿蒙期末项目(2)

主界面 主界面和商店详情界面参考如下设计图&#xff08;灵感严重匮乏&#xff09; 简单起见&#xff0c;将整个app分为4个布局&#xff0c;分别是主界面、搜索界面、购物车界面&#xff0c;以及个人界面。 所以在app中也需要使用tab组件进行分割&#xff0c;且需要通过tabBa…

笔记本电脑录屏,教你3个方法,简单录屏

随着科技的飞速发展&#xff0c;笔记本电脑录屏功能已经不再局限于传统的录制需求&#xff0c;而是成为了探索屏幕动态的新方式。无论是创意工作者、游戏爱好者还是日常办公者&#xff0c;都可以借助这一功能&#xff0c;将屏幕上的精彩瞬间、重要信息或创新思路记录下来&#…

Quads,一个无敌的 Python 库!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个无敌的 Python 库 - Quads。 Github地址&#xff1a;https://github.com/fogleman/Quads 在科学计算和工程应用中&#xff0c;数值积分是一个常见的问题。Python的Quads库…

maven仓库的作用以及安装 , DEA配置本地Maven

ay12-maven 主要内容 Maven的作用Maven仓库的作用Maven的坐标概念Maven的安装IDEA配置本地Maven 一、maven概述 1.1、项目开发中的问题 1、我的项目依赖一些jar包&#xff0c;我把他们放在哪里&#xff1f;直接拷贝到项目的lib文件夹中?如果我开发的第二个项目还是需要上面…