第一步:登录数据库创建测试表 SQL> conn zc/zc Connected. SQL> SQL> SQL> create table test(id number,name varchar2(20),ctime date); Table created. SQL> insert into test values(5674,'zhangchao',sysdate); 1 row created. SQL> select * from test; ID NAME CTIME ---------- -------------------- --------- 5674 zhangchao 20-NOV-24 SQL> alter session set nls_date_format = 'yyyy/mm/dd hh24:mi:ss' ; Session altered. SQL> select * from test; ID NAME CTIME ---------- -------------------- ------------------- 5674 zhangchao 2024/11/20 17:47:29 SQL> select dbms_rowid.ROWID_RELATIVE_FNO(rowid) fno,dbms_rowid.rowid_block_number(rowid) blkno from test; FNO BLKNO ---------- ---------- 7 347 第二步:根据块id dump 改数据块 SQL> alter system dump datafile 7 block 347; System altered. Trace file /u02/app/oracle/diag/rdbms/gbk/gbk/trace/gbk_ora_7952.trc Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.22.0.0.0 Build label: RDBMS_19.22.0.0.0DBRU_LINUX.X64_231229 ORACLE_HOME: /u02/app/oracle/product/19.9.0/db_1 System name: Linux Node name: localhost.localdomain Release: 4.18.0-193.el8.x86_64 Version: #1 SMP Fri Mar 27 14:35:58 UTC 2020 Machine: x86_64 CLID: P Instance name: gbk Redo thread mounted by this instance: 1 Oracle process number: 50 Unix process pid: 7952, image: oracle@localhost.localdomain (TNS V1-V3) *** 2024-11-20T17:49:47.105940-08:00 *** SESSION ID:(462.62967) 2024-11-20T17:49:47.105974-08:00 *** CLIENT ID:() 2024-11-20T17:49:47.105995-08:00 *** SERVICE NAME:(SYS$USERS) 2024-11-20T17:49:47.106015-08:00 *** MODULE NAME:(SQL*Plus) 2024-11-20T17:49:47.106036-08:00 *** ACTION NAME:() 2024-11-20T17:49:47.106056-08:00 *** CLIENT DRIVER:(SQL*PLUS) 2024-11-20T17:49:47.106076-08:00 Start dump data blocks tsn: 4 file#:7 minblk 347 maxblk 347 Block dump from cache: Dump of buffer cache at level 3 for pdb=0 tsn=4 rdba=29360475 BH (0x9a3e5b18) file#: 7 rdba: 0x01c0015b (7/347) class: 1 ba: 0x9a1c2000 set: 3 pool: 3 bsz: 8192 bsi: 0 sflg: 2 pwc: 0,0 dbwrid: 0 obj: 74213 objn: 74213 tsn: [0/4] afn: 7 hint: f hash: [0x6d3cdfc0,0x6d3cdfc0] lru: [0x9a3e5d68,0x9a3e5a98] obj-flags: object_ckpt_list ckptq: [0x9a3e5848,0x9bfe7030] fileq: [0x9a3e5858,0x9a3e67d0] objq: [0x9a3e6768,0x9a3e5ac0] objaq: [0x9a3e6778,0x9a3e5ad0] st: XCURRENT md: NULL fpin: 'ktspbwh2: ktspfmdb' fscn: 0x2162e2 tch: 4 flags: buffer_dirty LRBA: [0xa.5b2c0.0] LSCN: [0x2162e2] HSCN: [0x2162e2] HSUB: [1] Printing buffer operation history (latest change first): (cnt 4) 01. sid:14 L464:chg1_mn:bic:FMS 02. sid:14 L778:chg1_mn:bis:FMS 03. sid:14 L353:gcur:set:MEXCL 04. sid:14 L464:chg1_mn:bic:FMS 05. sid:14 L614:chg1_mn:bis:FBD 06. sid:14 L922:klbc:sw:cq 07. sid:14 L778:chg1_mn:bis:FMS 08. sid:14 L004:new:acq:pin 09. sid:14 L229:bnew:bic:FEN 10. sid:14 L143:new:mk:EXCL 11. sid:14 L177:kcbnew:bic:FSI 12. sid:14 L982:new:bic:FBS 13. sid:14 L176:kcbnew:bic:FSQ 14. sid:14 L122:zgb:set:st 15. sid:14 L830:olq1:clr:WRT+CKT 16. sid:14 L951:zgb:lnk:objq buffer tsn: 4 rdba: 0x01c0015b (7/347) scn: 0x2162e2 seq: 0x03 flg: 0x00 tail: 0x62e20603 frmt: 0x02 chkval: 0x0000 type: 0x06=trans data Hex dump of block: st=0, typ_found=1 Dump of memory from 0x000000009A1C2000 to 0x000000009A1C4000 09A1C2000 0000A206 01C0015B 002162E2 00030000 [....[....b!.....] 09A1C2010 00000000 00000001 000121E5 002162E2 [.........!...b!.] 09A1C2020 00008000 00320002 01C00158 000B0003 [......2.X.......] 09A1C2030 000003F1 01000305 000D00E6 00000001 [................] 09A1C2040 00000000 00000000 00000000 00000000 [................] Repeat 1 times 09A1C2060 00000000 00010100 0014FFFF 1F6B1F7F [..............k.] 09A1C2070 00001F6B 1F7F0001 00000000 00000000 [k...............] 09A1C2080 00000000 00000000 00000000 00000000 [................] Repeat 501 times 09A1C3FE0 2C000000 C2030301 7A094B39 676E6168 [...,....9K.zhang] 09A1C3FF0 6F616863 0B7C7807 1E301214 62E20603 [chao.x|...0....b] Block header dump: 0x01c0015b Object id on Block? Y seg/obj: 0x121e5 csc: 0x00000000002162e2 itc: 2 flg: E typ: 1 - DATA brn: 0 bdba: 0x1c00158 ver: 0x01 opc: 0 inc: 0 exflg: 0 Itl Xid Uba Flag Lck Scn/Fsc 0x01 0x0003.00b.000003f1 0x01000305.00e6.0d ---- 1 fsc 0x0000.00000000 0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000 bdba: 0x01c0015b data_block_dump,data header at 0x9a1c2064 =============== tsiz: 0x1f98 hsiz: 0x14 pbl: 0x9a1c2064 76543210 flag=-------- ntab=1 nrow=1 frre=-1 fsbo=0x14 fseo=0x1f7f avsp=0x1f6b tosp=0x1f6b 0xe:pti[0] nrow=1 offs=0 0x12:pri[0] offs=0x1f7f block_row_dump: tab 0, row 0, @0x1f7f tl: 25 fb: --H-FL-- lb: 0x1 cc: 3 col 0: [ 3] c2 39 4b col 1: [ 9] 7a 68 61 6e 67 63 68 61 6f col 2: [ 7] 78 7c 0b 14 12 30 1e end_of_block_dump Dump of buffer cache for pdb 0 tsn 4 rdba 0x1c0015b at level 2 done. Block dump from disk: buffer tsn: 4 rdba: 0x01c0015b (7/347) scn: 0x0 seq: 0x01 flg: 0x05 tail: 0x00000001 frmt: 0x02 chkval: 0xa79b type: 0x00=unknown Hex dump of block: st=0, typ_found=0 Dump of memory from 0x00007F91FBD83000 to 0x00007F91FBD85000 7F91FBD83000 0000A200 01C0015B 00000000 05010000 [....[...........] 7F91FBD83010 0000A79B 00000000 00000000 00000000 [................] 7F91FBD83020 00000000 00000000 00000000 00000000 [................] Repeat 508 times 7F91FBD84FF0 00000000 00000000 00000000 00000001 [................] Dump of memory from 0x00007F91FBD83014 to 0x00007F91FBD84FFC 7F91FBD83010 00000000 00000000 00000000 [............] 7F91FBD83020 00000000 00000000 00000000 00000000 [................] Repeat 508 times 7F91FBD84FF0 00000000 00000000 00000000 [............] End dump data blocks tsn: 4 file#: 7 minblk 347 maxblk 347 121e5 -->10进制 74213 –分析ump 根据seg/obj: 0x121e5 我们先确认是这个对象 SQL> select object_id from dba_objects where owner='ZC' and object_name='TEST'; OBJECT_ID ---------- 74213 SQL> select to_number('121e5','xxxxxxx') from dual; TO_NUMBER('121E5','XXXXXXX') ---------------------------- 74213 select objd,ts#,status from v$bh where file#=7 and block#=347; OBJD TS# STATUS ---------- ---------- ---------- 74213 4 xcur 根据bdba: 0x01c0015b 也可以确认到那个块 variable dba varchar2(30) exec :dba := dbms_utility.make_data_block_address(7,347); SQL> variable dba varchar2(30) exec :dba := dbms_utility.make_data_block_address(7,347); SQL> PL/SQL procedure successfully completed. SQL> SQL> print dba DBA -------------------------------------------------------------------------------- 29360475 SQL> select to_char(29360475,'xxxxxxxxxxx') from dual; TO_CHAR(2936 ------------ 1c0015b 可以看到正反向验证都没有问题 dump中的数据情况 col 0: [ 3] c2 39 4b col 1: [ 9] 7a 68 61 6e 67 63 68 61 6f col 2: [ 7] 78 7c 0b 14 12 30 1e 第三步:bbed 分析 通过bbed 查看数据情况 BBED> p *kdbr[0] rowdata[0] ---------- ub1 rowdata[0] @8163 0x2c BBED> x /r rowdata[0] @8163 ---------- flag@8163: 0x2c (KDRHFL, KDRHFF, KDRHFH) lock@8164: 0x01 cols@8165: 3 col 0[3] @8166: 0xc2 0x39 0x4b col 1[9] @8170: 0x7a 0x68 0x61 0x6e 0x67 0x63 0x68 0x61 0x6f col 2[7] @8180: 0x78 0x7c 0x0b 0x14 0x12 0x30 0x1e BBED> x /rncd rowdata[0] @8163 ---------- flag@8163: 0x2c (KDRHFL, KDRHFF, KDRHFH) lock@8164: 0x01 cols@8165: 3 col 0[3] @8166: 5674 col 1[9] @8170: zhangchao col 2[7] @8180: 120 124 11 20 18 48 30 BBED> x /rnct rowdata[0] @8163 ---------- flag@8163: 0x2c (KDRHFL, KDRHFF, KDRHFH) lock@8164: 0x01 cols@8165: 3 col 0[3] @8166: 5674 col 1[9] @8170: zhangchao col 2[7] @8180: 20-NOV-24 第四步: 转换数据 SQL> select dbms_stats.CONVERT_RAW_TO_VARCHAR2('7a68616e676368616f') FROM dual; DBMS_STATS.CONVERT_RAW_TO_VARCHAR2('7A68616E676368616F') -------------------------------------------------------------------------------- zhangchao SQL> select dbms_stats.CONVERT_RAW_TO_DATE('787c0b1412301e') from dual ; DBMS_STATS.CONVER ----------------- 20241120 17:47:29 SQL> select dbms_stats.CONVERT_RAW_TO_NUMBER('c2394b') FROM dual; DBMS_STATS.CONVERT_RAW_TO_NUMBER('C2394B') ------------------------------------------ 5674 SQL> select * from test; ID NAME CTIME ---------- -------------------- --------- 5674 zhangchao 20-NOV-24 12c 开始 有了下面的函数 DBMS_STATS.CONVERT_RAW_TO_VARCHAR2 DBMS_STATS.CONVERT_RAW_TO_DATE DBMS_STATS.CONVERT_RAW_TO_NUMBER DBMS_STATS.CONVERT_RAW_TO_BIN_FLOAT DBMS_STATS.CONVERT_RAW_TO_BIN_DOUBLE DBMS_STATS.CONVERT_RAW_TO_NVARCHAR DBMS_STATS.CONVERT_RAW_TO_ROWID 11g 以下版本 create or replace function stats_raw_to_date (p_in raw) return date is v_date date; v_char varchar2(25); begin dbms_stats.CONVERT_RAW_VALUE(p_in, v_date); return v_date; exception when others then return null; end; / create or replace function zero_date return date deterministic is v_date date; begin dbms_stats.CONVERT_RAW_VALUE('64640000010101', v_date); return v_date; end; / CREATE OR REPLACE FUNCTION FUN_DISPLAY_RAW_LHR(P_RAWVAL RAW, P_TYPE VARCHAR2) RETURN VARCHAR2 IS V_NUMBER NUMBER; V_VARCHAR2 VARCHAR2(32); V_DATE DATE; V_NVARCHAR2 NVARCHAR2(32); V_ROWID ROWID; V_CHAR CHAR(32); BEGIN IF (P_TYPE = 'NUMBER' OR P_TYPE = 'FLOAT') THEN DBMS_STATS.CONVERT_RAW_VALUE(P_RAWVAL, V_NUMBER); RETURN TO_CHAR(V_NUMBER); ELSIF (P_TYPE = 'VARCHAR2') THEN DBMS_STATS.CONVERT_RAW_VALUE(P_RAWVAL, V_VARCHAR2); RETURN TO_CHAR(V_VARCHAR2); ELSIF (P_TYPE = 'DATE' OR P_TYPE LIKE 'TIMESTAMP%') THEN DBMS_STATS.CONVERT_RAW_VALUE(P_RAWVAL, V_DATE); RETURN TO_CHAR(V_DATE); ELSIF (P_TYPE = 'NVARCHAR2') THEN DBMS_STATS.CONVERT_RAW_VALUE(P_RAWVAL, V_NVARCHAR2); RETURN TO_CHAR(V_NVARCHAR2); ELSIF (P_TYPE = 'ROWID') THEN DBMS_STATS.CONVERT_RAW_VALUE(P_RAWVAL, V_ROWID); RETURN TO_CHAR(V_ROWID); ELSIF (P_TYPE = 'CHAR') THEN DBMS_STATS.CONVERT_RAW_VALUE(P_RAWVAL, V_CHAR); RETURN TO_CHAR(V_CHAR); ELSIF (P_TYPE = 'RAW') THEN RETURN TO_CHAR(P_RAWVAL); ELSE RETURN 'UNKNOWN DATATYPE!'; END IF; EXCEPTION WHEN OTHERS THEN RETURN 'ERRORS!'; END FUN_DISPLAY_RAW_LHR; / SQL> select FUN_DISPLAY_RAW_LHR('c2394b','NUMBER') LOW_VALUE1 from dual; LOW_VALUE1 -------------------------------------------------------------------------------- 5674
查看block dump对应的实际值
来源:这里教程网
时间:2026-03-03 20:54:57
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- Oralce数据库巡检SQL脚本
Oralce数据库巡检SQL脚本
26-03-03 - 从CAB到PAB Oracle的AI 23.6(之一)
从CAB到PAB Oracle的AI 23.6(之一)
26-03-03 - 数据库管理-第257期 有好故事才能讲好故事(20241101)
数据库管理-第257期 有好故事才能讲好故事(20241101)
26-03-03 - 02 Oracle进程秘籍:深度解析Oracle后台进程体系
02 Oracle进程秘籍:深度解析Oracle后台进程体系
26-03-03 - 一万二千字,浅谈Oracle数据库坏块分类、模拟、解决!
一万二千字,浅谈Oracle数据库坏块分类、模拟、解决!
26-03-03 - 90%的数据库专家齐聚,CAB又在上海召开了!
90%的数据库专家齐聚,CAB又在上海召开了!
26-03-03 - 劳伦斯沙发,客厅里的绅士与奢华完美融合
劳伦斯沙发,客厅里的绅士与奢华完美融合
26-03-03 - Oracle DB replay实践
Oracle DB replay实践
26-03-03 - 04 深入 Oracle 并发世界:MVCC、锁、闩锁、事务隔离与并发性能优化的探索
- 05 SQL炼金术:深入探索与实战优化
05 SQL炼金术:深入探索与实战优化
26-03-03
