本帖最后由 zcs0237 于 2013-6-13 16:57 编辑

a.本文搜集大量网友文章编写而成

b.为节省篇幅,部分输出结果做了精简

c.感谢对本帖补充、建议、错误更正

d.推荐网站:

=========本文内容:数据块dump相关知识简化总结===========

实验说明:将dump与select出的以下信息比较、分析

1、表的总行数、总列数

2、所改列为第几行第几列

3、从数据块中找到字段值

4、itl事务号与v$trasaction事务号

5、commit对itl中flag/scn的改变

6、commit仅改变itl 条目的flag,its lck和row-header的lb事务指针不变

************************************************

01.1-相关基础知识

一、data block相关原理1、事务修改数据块的流程

--server进程把block读入data buffer

--延迟block cleanout

--在块上请求ITL slot

--如果其他活跃事务通过ITL锁定了要修改的行,则入等待队列。

--锁定要修改的行:事务修改块中的行时,把行中row header中的lb字段置为该事务在该块中获得的ITL的编号,这就是oracle行锁的实现。

2、事务槽与事务表

事务槽:数据块头中(见下图中的Transaction Header),块头中每个ITL占46B,ITL编号范围为1~255,用一个字节即两个16进制数表示。

事务表:undo段的第一个块,undo段头块存放事务信息

3、dbwr有很多触发条件,经常性的把db buffer中的脏块写入磁盘

二、ITL中Flag所代表的事务状态---- = transaction is active, or committed pending cleanout

C--- = transaction has been committed and locks cleaned out

-B-- = this undo record contains the undo for this ITL entry

--U- = transaction committed (maybe long ago); SCN is an upper bound

---T = transaction was still active at block cleanout SCN

三、块的物理结构

1、The Cache Header-------------------------------------------------------------------------------------------------------------------------

Start dump data blocks tsn: 4 file#: 4 minblk 32 maxblk 32

buffer tsn: 8 rdba: 0x00c0007a (3/122)

scn: 0x0000.0068d716 seq: 0x01 flg: 0x02 tail: 0xd7160601

frmt: 0x02 chkval: 0x0000 type: 0x06=trans data

Hex dump of corrupt header 3 = CHKVAL

Dump of memory from 0x0EB8B400 to 0x0EB8B414

… …

2、The Transaction Header(块中的transaction信息)

①ITL list的头信息-----------------------------------------------------------------------------------------------Object id on Block? Y

seg/obj: 0xc7cc  csc: 0x00.86f4c  itc: 2  flg: E  typ: 1 - DATA

brn: 0  bdba: 0x1000019 ver: 0x01 opc: 0

②Intrest Transaction  List -------------------------------------------------------------------------------Itl           Xid                  Uba         Flag Lck        Scn/Fsc

0x01   0x0004.00b.00000fac 0x00801885.008c.56 --U-    1 fsc 0x0000.0068d716

0x02   0x0000.000.00000000 0x00000000.0000.00 ----    0 fsc 0x0000.00000000

3、data area header

①table dictionary header------------------------------------------------------------------------------------------------------------------------

data_block_dump,data header at 0xeb8b464

===============

tsiz: 0x1f98                         //total data area size

hsiz: 0x2e                           //data header size

pbl: 0x0eb8b464                 //pointer指针to buffer holding the block

bdba: 0x01000020              //block dba / rdba

flag=--------                         //n=pctfree hit(clusters),f=don't put on freelist,k=flushable cluster keys

ntab=1                              //number of tables (>1 so this is a cluster)

nrow=14                           //number of rows

frre=-1                              //First free row index entry. -1=you have to add one.

fsbo=0x2e                         //free space begin offset

fseo=0x1d61                     //free space end offset

avsp=0x1d33                    //available space in the block

tosp=0x1d33                     //total available space when all transactions commit

0xe:pti[0]      nrow=14 offs=0

②row directroy 每增加一条row就多出2bytes用来记载该row--------------------------------------------------------------------------------------------------------------------------

0x12:pri[0]     offs=0x1f72

0x14:pri[1]     offs=0x1f47

……

0x2c:pri[13]    offs=0x1d61

③row header--------------------------------------------------------------------------------------------------------------------------

tab 0表号,       row 0行号,    @0x1f72      //row header

tl: 38行size     fb: --H-FL--   lb: 0x2事务槽号  cc: 8总列数

④row data--------------------------------------------------------------------------------------------------------------------------

col  0: [ 3]  c2 4a 46                       //column length

… …

col  6: *NULL*

col  7: [ 2]  c1 15

************************************************

01.2-select查询得到的信息

一、emp表共14行SQL> select count(*) from scott.emp;

14

二、emp表共8字段,SAL为第6字段SQL> select * from scott.emp where rownum=1;

EMPNO  ENAME     JOB      MGR     HIREDATE    SAL     COMM  DEPTNO

------ -------    ------   ------ ---------    -----  ------ -------

7369   SMITH      CLERK    7902    17-DEC-80    800             20

************************************************

01.3-dump出的信息(commit前)

一、修改第1行的第6个字段改为8000SQL> set heading off

select ename,sal from scott.emp where sal=800;

--SMITH             800薪水为800的只有一条记录

SQL> update scott.emp set sal=8000 where sal=800;

--1 row updated.

二、该条记录在4号文件第32号块上SQL> select 'file# '||dbms_rowid.rowid_relative_fno(rowid),'block# '||dbms_rowid.rowid_block_number(rowid) from scott.emp where sal=8000;

--file# 4  block# 32

三、dump导出4号文件32号块SQL> alter system dump datafile 4 block 32;

--System altered.

四、列出dump文件SQL>   select    '!vi ' || d.VALUE  || '/'

|| LOWER (RTRIM (i.INSTANCE, CHR (0)))

|| '_ora_'       || p.spid   || '.trc' trace_file_name

FROM (select p.spid FROM v$mystat m, v$session s, v$process p

WHERE m.statistic# = 1 AND s.SID = m.SID AND p.addr = s.paddr) p,

(select t.INSTANCE  FROM v$thread t, v$parameter v WHERE v.NAME = 'thread'

AND (v.VALUE = 0 OR t.thread# = TO_NUMBER (v.VALUE))) i,

(select value from v$parameter where name = 'user_dump_dest') d

/

-- !vi /u01/app/oracle/admin/orcl/udump/orcl_ora_3698.trc

五、在vi中输入/Itl搜第一个Itl(I要大写)=块的热点ITL Slot

SQL>  !vi /u01/app/oracle/admin/orcl/udump/orcl_ora_3698.trc

Itl    Xid                 Uba              Flag      Lck     Scn/Fsc

0x01   0x0003.011.000000f2  0x00805794.00c8.49  C---    0     scn 0x0000.0006bfdb

0x02   0x0006.02c.00000108  0x0080073b.00c4.03  ----   1  fsc 0x0000.00000000

1、flag=-----说明事务还在活动

2、0x02事务槽Lck=1——说明此事务锁定1行

3、scn/fsc为空——说明未clean out

补充:由此知道ORACLE中的row lock是记录在block header中的。

六、对比dump、select:事务ID相同1、查看ITL的XID(=usn#.slot#.wrap#)

SQL> select xidusn,xidslot,xidsqn from v$transaction;

--   6   44   264

2、转换dump文件中的itl

SQL> select to_number('6','XX'),to_number('2c','XXX'),to_number('108','XXXX') from dual;

--   6  44 264

七、用grep定位指向第0x2事务的行并分析

$  grep -E '\'  -B1 -A 9 /u01/app/oracle/admin/orcl/udump/orcl_ora_3698.trctab 0, row 0, @0x1f72                    //row0=第1行

tl: 38 fb: --H-FL-- lb: 0x2  cc: 8       //lb:0x2指向第二个Itl条目

col  0: [ 3]  c2 4a 46                   //第1个字段

...     ...

col  5: [ 2]  c2 51                       //第6个字段

col  6: *NULL*

col  7: [ 2]  c1 15

tab 0, row 1, @0x1f47

1、row 0 lb: 0x2————证明我们update的是表的第1行

2、cc: 8和col 0~col 7——证明与select看到的8列一致

3、证明第6列已改为8000

SQL> select UTL_RAW.CAST_TO_NUMBER(replace(' c2 51 ',' '))  from dual;

--8000       //把oracle内部16进制转成表中字段的数据与update新值做比较

************************************************

01.4-dump出的信息(commit后)

一、提交后再dumpSQL>  commit;

alter system dump datafile 4 block 32;

二、列出新的dump文件SQL>  @gettracefile.sql

--!vi /u01/app/oracle/admin/orcl/udump/orcl_ora_3975.trc

三、查看事务槽——有两点变化SQL> !vi /u01/app/oracle/admin/orcl/udump/orcl_ora_3975.trc

Itl           Xid                  Uba         Flag  Lck        Scn/Fsc

0x01   0x0003.011.000000f2  0x00805794.00c8.49  C---    0  scn 0x0000.0006bfdb

0x02   0x0006.02c.00000108  0x0080073b.00c4.03  --U-    1  fsc 0x0000.000874f7

1、flag= U-----证明transaction committed

2、fsc、scn——证明fsc快速提交,且已clean out

3、Lck=1———证明falg=U事务已提交,Itl可重用了不需清除lck

四、查看行头——指向lb:0x2没变,利于commit效率提高

$ grep -E '\'  -B1 -A 9 /u01/app/oracle/admin/orcl/udump/orcl_ora_3975.trctab 0, row 0, @0x1f72

tl: 38 fb: --H-FL-- lb: 0x2  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 51

col  6: *NULL*

col  7: [ 2]  c1 15

tab 0, row 1, @0x1f47

最近itpub发帖:

无GUI智能部署oracle脚本及视频

http://www.itpub.net/thread-1778735-1-1.html

有哪些Oracle进程?消耗了多少存?http://www.itpub.net/thread-1780654-1-1.html

oracle数据块dump信息,从数据块的dump信息能看出什么相关推荐

  1. oracle 数据块 修复,案例:Oracle坏块 使用RMAN工具的命令clear标记数据块为corrupt 修复坏块...

    天萃荷净 运维DBA巡检发现数据文件中存在坏块,使用RMAN工具的命令clear标记数据坏块,使用bbed修复坏块 在rman中有隐藏的命令clear,可以标记数据块为corrupt,从而实现数据库坏 ...

  2. 区块链相关数据报表_重磅|京东云区块链数据服务(BDS)正式开源

    今天,"区块链+京东云 大有可为"战略合作媒体沟通会在北京国家会议中心召开.会上,京东云与京东数科宣布在区块链技术服务领域深度合作,重磅发布了智臻链"云"建设规 ...

  3. 对象存储2:数据存储类型-文件存储、块存储、对象存储详解

    上一篇介绍了传统存储的几个常用类型,本篇主要介绍云平台用到的常用存储类型,分别是文件存储.块存储和对象存储. 这种分类是以数据存储的方式来命名的,体现了不同的数据存储格式.文件存储会以文件和文件夹的层 ...

  4. TIA PORTAL 西门子博途中怎样设置DB块中的变量数据为保持型或不保持?

    TIA PORTAL 西门子博途中怎样设置DB块中的变量数据为保持型或不保持? 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到网站. 自己用软件测试了以下 ...

  5. oracle索引使用例子,Oracle中利用函数索引处理数据倾斜案例

    关于B-Tree.Bitmap.函数索引的相关内容请参考另一篇博文: Oracle中B-Tree.Bitmap和函数索引使用案例总结 通常来说,索引选取的数据列最好为分散度高.选择性好.从索引树结构的 ...

  6. ORACLE 常用的SQL语法和数据对象

    一.数据控制语句 (DML) 部分 1.INSERT  (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, --) VALUES ( 值1, 值2, --); INSE ...

  7. oracle如何根据ID恢复部分数据,三种方法找回Oracle数据库误删除的数据

    三种方法找回Oracle数据库误删除的数据 最新动态来源:点击数:6141更新时间:2018/5/10 有很多朋友都遇到过在操作数据库时误删除某些重要数据的情况,如果数据库没有备份而且数据有十分重要的 ...

  8. oracle数据库恢复aul_[数据库]oracle从dbf文件中恢复数据(通过AUL工具实现)

    [数据库]oracle从dbf文件中恢复数据(通过AUL工具实现) 0 2013-09-27 00:00:18 背景故事:前几天,硬盘故障导致oracle崩溃.重要数据丢失,只剩下孤零零的dbf文件. ...

  9. Oracle 11g_管理表空间和数据文件(7)

    1. 表空间和数据文件的关系 在Oracle数据库中,表空间和数据文件之间的关系非常密切,这二者之间相互依存,也就是说,创建表空间时必须创建数据文件,增加数据文件时也必须指定表空间. Oracle磁盘 ...

最新文章

  1. sega+model+3+android,世嘉MODEL2经典老游戏移植登场 追加联网对战
  2. SpringMVC Controller单例和多例
  3. Linux进程命令PS用法笔记
  4. undefined reference to `__isnanf'
  5. 让Mysql支持Emoji表情,解决[Err] 1366 - Incorrect string value: '\xF0\xA3\x84\x83'
  6. 基于php程序系统设计,PHP程序静态分析系统的设计与实现
  7. Leetcode PHP题解--D7 905. Sort Array By Parity
  8. 解决Vscode提示bodyparser已被弃用的问题
  9. Go语言的goroutine
  10. MonkeyTest脚本
  11. java 微信卡券开发 --创建微信卡券
  12. 惠普(HP) LaserJet Pro M1136 MFP 黑白多功能激光一体机 (打印 复印 扫描)驱动安装记录...
  13. Python实现数据透视表
  14. c#关于GMap离线地图加载的问题
  15. js二级联动,购物车
  16. 浅析搭建高速公路视频监控平台的建设方案及必要性
  17. 如何通过神经网络实现XNOR函数?
  18. Ubuntu16.04笔记本 安装R RStudio
  19. Tita OKR:掌握大局的仪表盘
  20. 微服务系统错误码设计

热门文章

  1. db2 v9.7 tablespace_state -“表空间状态”监视器元素 0x0400
  2. 1小时搞懂设计模式之工厂模式(方法工厂)
  3. 加快android编译速度
  4. vue 代码快捷键_你可能不知道的19种运行JavaScript代码工具
  5. 基于JAVA+Swing+MYSQL的在线考试系统
  6. 最简单的SpringMVC + Maven配置
  7. useradd或adduser命令
  8. springboot注释详解
  9. bootstrap入门
  10. angular drag and drop (ngDraggable) 笔记