返回顶部
首页 > 资讯 > 数据库 >怎么进行oracle数据块格式的分析
  • 857
分享到

怎么进行oracle数据块格式的分析

2024-04-02 19:04:59 857人浏览 八月长安
摘要

本篇文章给大家分享的是有关怎么进行oracle数据块格式的分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 &n

本篇文章给大家分享的是有关怎么进行oracle数据块格式的分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。


  Oracle数据块可分为三层
怎么进行oracle数据块格式的分析 

更细化

怎么进行oracle数据块格式的分析 

Cache layer--20字节,包含DBA、块类型、块格式、SCN;数据块被读取时进行完整性检查,确保没有损坏或fracture,即块更新信息只有部分被写入磁盘;
Transaction layer
固定事务layer--块类型,最后一次块清除时间csc,ITL数量itc;
可变事务layer--包含ITL,每个24字节;
Data layer
Data header(KDBH):14字节,表目录项个数,行目录项个数,指向free space的开始和结束位置的偏移量,当前块剩余空间
表目录--cluster表记录多于1,记录行目录中与此表相关的个数,以及起始位置
行目录--记录每行的起始位置,即指向行头的偏移量,每个2字节;innodb采用的是entry?


以10205为例
create table t(id number(2));
insert into t values(1);
insert into t values(2);
commit;
sql> select FILE_ID,BLOCK_ID,EXTENT_ID,BLOCKS from dba_extents where owner='SYS' and SEGMENT_NAME='T';

   FILE_ID   BLOCK_ID  EXTENT_ID     BLOCKS
---------- ---------- ---------- ----------
        68    2260129          0          8

SQL> select dbms_rowid.rowid_block_number(rowid),id from t;

DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)         ID
------------------------------------ ----------
                             2260132          1
                             2260132          2
                             2260132          1

alter system dump datafile 68 block 2260132;
select spid from v$process where addr=(select paddr from v$session where sid=(select sid from v$mystat where rownum=1));


Dump block的输出格式与实际顺序可能不一致
****************cache layer******************************
buffer tsn: 115 rdba: 0x11227ca4 (68/2260132)
scn: 0x0860.07f11dad seq: 0x01 flg: 0x02 tail: 0x1dad0601
frmt: 0x02 chkval: 0x0000 type: 0x06=trans data


SCN=2字节base + 4字节wrap
Seq:sequence number
Flag:0x01—new block;0x02—delayed logging change advance SCN/seq;0x04—check value saved-block xor’s to zero;0x08—temporary block;
Frmt:数据块格式,从8i到10205一直为0x02
Chkval:可选项,db_block_checksum=true时启用
Tail:存于块尾footer,SCN base低位2字节 + 块类型 + SCN seq = 12ca + 06 + 01


Kcbh数据结构
typedef struct kcbh_ {
ub1 type_kcbh;
ub1 frmt_kcbh;
ub1 spare1_kcbh;
ub1 spare2_kcbh;
krdba rdba_kcbh;
ub4 bas_kcbh;
ub2 wrp_kcbh;
ub1 seq_kcbh;
ub1 flg_kcbh;
ub2 chkval_kcbh;
ub2 spare3_kcbh;
} kcbh;



****************transaction layer************************
--固定部分
Block header dump:  0x11227ca4
 Object id on Block? Y
 seg/obj: 0x5454c  csc: 0x860.7f11dac  itc: 2  flg: E  typ: 1 - DATA
     brn: 0  bdba: 0x11227ca1 ver: 0x01 opc: 0
     inc: 0  exflg: 0

Csc:最后一次块清除SCN
Typ:1=DATA; 2=INDEX


typedef struct ktbbh_ {
ub1 ktbbhtyp;
ub4 ktbbhsid;
kscn ktbbhcsc;
b2 ktbbhict;
ub1 ktbbhflg;
ub1 ktbbhfsl;
krdba ktbbhfnx;
}


--变长部分,每个ITL槽24个字节
Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x000a.01d.00017bc3  0x00800330.7d5f.1e  --U-    3  fsc 0x0000.07f11dad
0x02   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000


Xid:事务ID undoseg + slot + wrap
Uba:undodba + seqno + recordNo
Flags:C=Commited; U=Commited Upper Bound; T=Active at CSC
Lck: 此事务涉及的行数目
Scn:提交TX时的SCN


struct ktbit {
kxid ktbitxid;
kuba ktbituba;
b2 ktbitflg;  
ktbitun_t _ktbitun;
ub4 ktbitbas; 
}



****************data layer******************************
tsiz: 0x1f98
hsiz: 0x18
pbl: 0x0d0e8664
bdba: 0x11227ca4
     76543210
flag=--------
ntab=1
nrow=3
frre=-1
fsbo=0x18  --空闲空间的起始偏移量
fseo=0x1f86 –空闲空间的结束偏移量
avsp=0x1f65 –空闲空间总量
tosp=0x1f65

数据块头结构
struct kdbh {
ub1 kdbhflag; 
ktno kdbhntab;
ub2 kdbhnrow; 
sb2 kdbhfrre; 
sb2 kdbhfsbo; 
sb2 kdbhfseo; 
b2 kdbhavsp;  
b2 kdbhtosp;  
}


0xe:pti[0]      nrow=3  offs=0
表目录:
struct kdbt {
b2 kdbtoffs;
b2 kdbtnrow;
}


0x12:pri[0]     offs=0x1f92
0x14:pri[1]     offs=0x1f8c
0x16:pri[2]     offs=0x1f86
行目录:sb2 kdbr[3]
每行对应一条记录,每个2字节,kdbr为sb2类型数组,指向每一行的头;


block_row_dump:
tab 0, row 0, @0x1f92
tl: 6 fb: --H-FL-- lb: 0x1  cc: 1
col  0: [ 2]  c1 02
tab 0, row 1, @0x1f8c
tl: 6 fb: --H-FL-- lb: 0x1  cc: 1
col  0: [ 2]  c1 03
tab 0, row 2, @0x1f86
tl: 6 fb: --H-FL-- lb: 0x1  cc: 1
col  0: [ 2]  c1 02
行由行头和数据两部分,
行头--行标志 + 标志 + 列数,一般占3字节;T1-行大小; cc-本行的列数; lb-锁标志位,指向ITL; fb-标志位;
数据—列长度 + 列数据


怎么进行oracle数据块格式的分析

1 如何定位每1行?
由行目录kdbr存储每行的偏移量,每项2字节;
BBED> p kdbr
sb2 kdbr[0]                                 @118      8078 
sb2 kdbr[1]                                 @120      8068   
BBED> p *kdbr[0]
 rowdata[10] ----------- ub1 rowdata[10]                            
@8178     0x2c
由于块头包含可变长的ITL和行目录,故空闲空间从块尾开始分配;
 

2 row flag的取值范围
删除数据时仅将行标记为deleted,行头row flag的位掩码如下

怎么进行oracle数据块格式的分析

对于普通行(没有行链接/行迁移/被删除/簇表),其基本标志位为HFL,即32+8+4=44=0x2c;
若行被删除,则row flag=44+16=60=0x3c;
恢复尚未被覆盖的删除行,只需将其row flag从3c改为2c,row flag位于行头首字节;
详细可参照Http://orafaq.com/papers/dissassembling_the_data_block.pdf

3 行锁原理?
Oracle没有为行锁提供数据结构,而是通过 事务表 + ITL + lb(row header)实现;
一个事务分配一个TX lock和若干TM lock,涉及的数据块各需1个ITL,通过其XID关联事务表slot,而数据行则通过lb指向本块的ITL;


4 数据块验证?
数据块读入内存或写入磁盘时,会做一致性检查:
1 块版本,块头的SCNBase/块类型/seq同footer比较;
2 cache层的DBA同block buffer的DBA比较;
3 block-checksum, 如果开启checksum则做验证;


Dbv只检查数据块的header/footer,做逻辑验证;
Db_block_checking:替代10210/10211/10212事件,进行块完整性检查,如free slot list/行位置/锁数量;检查时会复制块,如有错误将块标志为soft corruption;
Db_block_checksum:dbwr和direct loader写数据块时计算checksum并存于cache层chkval,再次读取时重新计算并与已有checksum比较;
Dbms_repair修复cache/transaction层的错误,将块标示为soft corruption;


event
10231全表扫描时跳过坏块
10233跳过索引坏块

以上就是怎么进行oracle数据块格式的分析,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: 怎么进行oracle数据块格式的分析

本文链接: https://lsjlt.com/news/68687.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么进行oracle数据块格式的分析
    本篇文章给大家分享的是有关怎么进行oracle数据块格式的分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 &n...
    99+
    2024-04-02
  • Oracle数据块格式有哪几部分
    本篇内容主要讲解“Oracle数据块格式有哪几部分”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle数据块格式有哪几部分”吧!数据块结构Oracle 数...
    99+
    2024-04-02
  • 如何进行Json格式分析
    今天就跟大家聊聊有关如何进行Json格式分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式....
    99+
    2023-06-25
  • 怎么用Python进行数据分析
    这篇文章主要讲解了“怎么用Python进行数据分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Python进行数据分析”吧!评论情感倾向先调用百度AI来分析微博和b站的评论情感倾向。...
    99+
    2023-06-01
  • 怎么使用Kafka进行数据分析
    使用Kafka进行数据分析可以分为以下几个步骤:1. 安装和配置Kafka:首先需要下载和安装Kafka,并进行相关的配置。配置文件...
    99+
    2023-10-21
    kafka
  • 怎么使用Python进行数据分析
    使用Python进行数据分析可以通过以下几个步骤:1. 安装Python和相关库:首先需要安装Python解释器,推荐使用Anaco...
    99+
    2023-08-23
    Python
  • 怎么利用spark进行数据分析
    要利用Spark进行数据分析,首先需要安装和配置Spark环境,并了解Spark的基本概念和API。然后可以按照以下步骤进行数据分析...
    99+
    2024-04-02
  • 怎样进行mysql数据库的分析
    怎样进行mysql数据库的分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、数据库是什么?数据库是管理数据的一类软件。对数据的管理体现在两个方面,第一是描述数据,即一条...
    99+
    2023-06-22
  • ADO.NET Framework怎样进行数据分析
    ADO.NET Framework怎样进行数据分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。如果你坚持在.NET世界中使用ADO.NET Framework...
    99+
    2023-06-17
  • Python怎么使用Pandas进行数据分析
    首先,确保您已经安装了Pandas库。如果没有,请使用以下命令安装:pip install pandas一. 导入Pandas库import pandas as pd二. 读取数据使用Pandas,可以方便地读取多种数据格式,包括CSV、E...
    99+
    2023-05-16
    Python Pandas
  • 如何进行数据库三大范式的分析
    这篇文章将为大家详细讲解有关如何进行数据库三大范式的分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一: 引言     &n...
    99+
    2024-04-02
  • JSON数据格式的示例分析
    这篇文章将为大家详细讲解有关JSON数据格式的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。基础结构JSON建构于两种结构:1. “名称/值”对的集合(A col...
    99+
    2024-04-02
  • 如何进行MySQL和Oracle的元数据抽取分析
    如何进行MySQL和Oracle的元数据抽取分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。前言最近接到个任务是抽取mysql和Oracle的元数据,大致就是...
    99+
    2023-06-22
  • Oracle数据行拆分多行的示例分析
    小编给大家分享一下Oracle数据行拆分多行的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!单行拆分如果表数据只有一行,...
    99+
    2024-04-02
  • 怎样进行Python数据结构分析
    怎样进行Python数据结构分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Python数据结构数据结构引言:    数据结构是组...
    99+
    2023-06-02
  • 怎么进行Docker数据安全隐患分析
    本篇文章为大家展示了怎么进行Docker数据安全隐患分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Docker容器为应用的编写、分发和部署带来真正翻天覆地的变化。容器的目的是灵活性,让应用可按需...
    99+
    2023-06-17
  • JavaScript解析JSON格式数据的示例分析
    这篇文章主要为大家展示了“JavaScript解析JSON格式数据的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript解析JSON格式数...
    99+
    2024-04-02
  • SpringBoot怎么对LocalDateTime进行格式化并解析
    这篇“SpringBoot怎么对LocalDateTime进行格式化并解析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Sp...
    99+
    2023-07-02
  • 怎么进行分布式事务浅析
    这期内容当中小编将会给大家带来有关怎么进行分布式事务浅析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。什么是分布式系统,这对后端工程师来说是很重要的一门学问,我们会逐步了解常见的分布式技术、以及一些较为常...
    99+
    2023-06-04
  • 运维进行时-数据分析
           一直做的数据分析均是基于数据库数据、日志进行分析,开发业务模型,日志深度监控系统。也一直想抓取到用户的感知,幸好找大数据平台的人要到了我们网站嵌码采集的...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作