Oracle数据块解析

一.  DB(Data block)

  From: http://www.orafaq.com/wiki/Data_block

  

 A data block is the smallest unit of storage in an Oracle database. Every database has a default block size (specified when the database is created), although blocks in different tablespaces may have different block sizes.
An extent consist of one or more contiguous Oracle data blocks. A block determines the finest level of granularity of where data can be stored. One data block corresponds to a specific number of bytes of physical space on disk.
Information about data blocks can be retrieved from the data dictionary views USER_SEGMENTS and USER_EXTENTS. These views show how many blocks are allocated for database object and how many blocks are available(free) in a segment/extent.

 

  数据块是oracle中的最小存储单位,每个数据库创建的时候都有一个默认的block  size,同时不同的表空间可以有不同的数据块大小。

      一个extent是由多个连续的block组成,一个oracle的数据块由操作系统中磁盘中的块来组成。

  关于data blocks的信息,可以从user_segments和user_extents视图来取得,这些视图可以显示数据库对象分配了多少数据库,并且在segment和extents中有多少是空闲的。

1.1 Dumping data blocks(导出数据块)

SQL> SELECT
  2    dbms_rowid.rowid_relative_fno(rowid) REL_FNO,
  3    dbms_rowid.rowid_block_number(rowid) BLOCKNO,
  4    dbms_rowid.rowid_row_number(rowid) ROWNO,
  5    empno, ename
  6   FROM scott.emp WHERE empno = 7369;

   REL_FNO    BLOCKNO      ROWNO      EMPNO ENAME
---------- ---------- ---------- ---------- ----------
         4         32          0       7369 SMITH

如果想导出多个块,可用

ALTER SYSTEM dump datafile <file_id> block min <block_id> block max <block_id+blocks-1>;

分析导出数据:

SQL> show user
USER is "SYS"
SQL> 
SQL> oradebug setmypid
Statement processed.
SQL> alter system dump datafile 4 block 32;

System altered.

SQL> oradebug tracefile_name
/u01/admin/kxone/udump/kxone_ora_2425.trc

查看文件:/u01/admin/kxone/udump/kxone_ora_2425.trc

   114  tab 0, row 0, @0x1f72
   115  tl: 38 fb: --H-FL-- lb: 0x1  cc: 8
   116  col  0: [ 3]  c2 4a 46
   117  col  1: [ 5]  53 4d 49 54 48
   118  col  2: [ 5]  43 4c 45 52 4b
   119  col  3: [ 3]  c2 50 03
   120  col  4: [ 7]  77 b4 0c 11 01 01 01
   121  col  5: [ 2]  c2 09
   122  col  6: *NULL*
   123  col  7: [ 2]  c1 15

转化成表中数据:

SQL> SELECT utl_raw.cast_to_number(replace('c2 4a 46',' ')) value FROM dual;

     VALUE
----------
      7369

SQL> SELECT utl_raw.cast_to_varchar2(replace('53 4d 49 54 48',' ')) value FROM dual;

VALUE
--------------------------------------------------------------------------------
SMITH

二.  DBA(Data Block Address)数据块地址

       From:http://www.orafaq.com/wiki/Data_block_address

 

       A Data Block Address (DBA) is the address of an Oracle data block for access purposes.

       DBA一般指绝对数据块地址. rowid用来表示一行的物理地址,一行唯一确定一个rowid,并且在使用中一般不会改变,除非rowid之后在行的物理位置发生改变的情况下才会发生变化。在rowid 中,就有一段是来表示DBA的。有关rowid的内容,参考我的Blog:

       Oracle Rowid 介绍

       http://blog.csdn.net/tianlesoftware/archive/2009/12/16/5020718.aspx

2.1 Find the DBA for a given row,用给定的行取得dba

SQL> SELECT
  2       dbms_rowid.rowid_relative_fno(rowid) REL_FNO,
  3       dbms_rowid.rowid_block_number(rowid) BLOCKNO,
  4       empno, ename
  5      FROM scott.emp WHERE empno = 7521;

   REL_FNO    BLOCKNO      EMPNO ENAME
---------- ---------- ---------- ----------
         4         32       7521 WARD

SQL> variable dba varchar2(30)
SQL> exec :dba := dbms_utility.make_data_block_address(4, 32);

PL/SQL procedure successfully completed.

SQL> 
SQL> print dba

DBA
--------------------------------------------------------------------------------
16777248

2.2  将dba地址转换成数据文件和行号

SQL> SELECT dbms_utility.data_block_address_block(16777248) "BLOCK",
  2         dbms_utility.data_block_address_file(16777248) "FILE"
  3       FROM dual;

     BLOCK       FILE
---------- ----------
        32          4

三.  RDBA(Tablespace relative database block address)

 

       在讲RDBA 之前,要先了解下rowid的组成。 关于rowid的内容,参考我的blog:

       Oracle Rowid 介绍

       http://blog.csdn.net/tianlesoftware/archive/2009/12/16/5020718.aspx

 

       RDBA是相对数据块地址,是数据字典(表空间及一些对象定义)所在块的地址。

       oracle 8以后,rowid的存储空间扩大到了10个字节(32bit object#+10bit rfile#+22bit block#+16bit row#)。rdba就是rowid中的rfile#+block#

SQL> SELECT
  2  rowid,
  3  dbms_rowid.rowid_relative_fno(rowid) REL_FNO,
  4  dbms_rowid.rowid_block_number(rowid) BLOCKNO,
  5  dbms_rowid.rowid_row_number(rowid) ROWNO,
  6  empno, ename
  7  FROM scott.emp WHERE empno = 7521;

ROWID                 REL_FNO    BLOCKNO      ROWNO      EMPNO ENAME
------------------ ---------- ---------- ---------- ---------- ----------
AAAMl3AAEAAAAAgAAC          4         32          2       7521 WARD

把这个block dump到trace:

SYS@anqing1(rac1)> alter system dump datafile 4 block 32;

System altered.

 

查看当前的trace 文件位置:

SQL>  oradebug setmypid;

Statement processed.

SQL>  oradebug tracefile_name

/u01/admin/kxone/udump/kxone_ora_2425.trc

[oracle@oraclenode01 udump]$ nl /u01/admin/kxone/udump/kxone_ora_2425.trc

14  *** 2013-04-23 15:00:17.485
    15  *** ACTION NAME:() 2013-04-23 15:00:17.485
    16  *** MODULE NAME:(sqlplus@oraclenode01 (TNS V1-V3)) 2013-04-23 15:00:17.485
    17  *** SERVICE NAME:(SYS$USERS) 2013-04-23 15:00:17.485
    18  *** SESSION ID:(235.8187) 2013-04-23 15:00:17.485
    19  Start dump data blocks tsn: 4 file#: 4 minblk 32 maxblk 32
    20  buffer tsn: 4 rdba: 0x01000020 (4/32)   -- rdba 的值
    21  scn: 0x0000.0005deed seq: 0x01 flg: 0x06 tail: 0xdeed0601
    22  frmt: 0x02 chkval: 0x7cd7 type: 0x06=trans data
    23  Hex dump of block: st=0, typ_found=1
    24  Dump of memory from 0x000000001EC92800 to 0x000000001EC94800

   244  tab 0, row 13, @0x1d61
   245  tl: 39 fb: --H-FL-- lb: 0x1  cc: 8
   246  col  0: [ 3]  c2 50 23
   247  col  1: [ 6]  4d 49 4c 4c 45 52
   248  col  2: [ 5]  43 4c 45 52 4b
   249  col  3: [ 3]  c2 4e 53
   250  col  4: [ 7]  77 b6 01 17 01 01 01
   251  col  5: [ 2]  c2 0e
   252  col  6: *NULL*
   253  col  7: [ 2]  c1 0b
   254  end_of_block_dump
   255  End dump data blocks tsn: 4 file#: 4 minblk 32 maxblk 32

其中:
rdba: 0x01000020 (4/32)
 
 
SQL> /* Formatted on 2011/6/7 11:27:10 (QP5 v5.163.1008.3004) */
SQL> SELECT DBMS_UTILITY.data_block_address_file (
  2            TO_NUMBER (LTRIM ('0x01000020', '0x'), 'xxxxxxxx'))
  3            AS file_no,
  4         DBMS_UTILITY.data_block_address_block (
  5            TO_NUMBER (LTRIM ('0x01000020', '0x'), 'xxxxxxxx'))
  6            AS block_no
  7    FROM DUAL;

   FILE_NO   BLOCK_NO
---------- ----------
         4         32

刚才说了,在32这个块里保存了14条row记录,我们继续查询一下我们where=7521 那条:

SQL> select DBMS_UTILITY.data_block_address_block (TO_NUMBER (LTRIM ('0x1d61', '0x'),'xxxxxxxx')) as block_no from dual;

  BLOCK_NO
----------
      7521

SQL> 

最后这个语句想证明什么? 7521是记录中empno字段的值,这个值怎么凑巧和block_no一样了
dump结果中“tab 0, row 13, @0x1d61” 的@0x1d61表示什么?

现在暂时还没有弄清楚。

转载于:https://www.cnblogs.com/taowang2016/archive/2013/04/23/3037866.html

Oracle数据块原理分析 立即下载

相关推荐

Oracle数据块实现原理深入解读

Oracle对数据库数据文件(datafile)中的存储空间进行管理的单位是数据块(data block),本文将详细介绍

详解Oracle数据库中的块头

Oracle数据库中的块头(Block Header)是每个数据块的首要部分,它包含了关于该数据块的至关重要的元数据和控制信息。块头的存在帮助Oracle数据库管理系统跟踪和管理数据块的状态,确保数据的一致性和完整性,同时也是并发控制和故障恢复机制的重要组成部分。:包含数据块最后修改的时间戳以及对应的SCN,这是Oracle数据库多版本并发控制(MVCC)和一致性读(Consistent Read)的基础,用于确保事务在读取数据时能看到一致的视图。:用于检测数据块的完整性,防止数据损坏。

专注于数据库技术分享,包含但不限于Oracle,MySQL,PostgreSQL,ElasticSearch及国产数据库等 480

PowerBuilder 9 遗留系统逆向实战:3款反编译工具对比与关键DLL破解

本文深入探讨了PowerBuilder 9遗留系统的逆向工程实战,对比分析了PBKiller、PB DeCompiler和Shudepb三款反编译工具的核心功能与适用场景,并详细解析了关键DLL破解技术。通过IDA和OllyDbg等工具的应用,提供了从静态解构到动态追踪的完整逆向方法论,帮助开发者有效维护老旧PB系统。

cucanqi9387的博客 735

Oracle--存储结构

是数据库的最大逻辑划分区域,一个表空间由一个或多个数据文件组成,一个数据文件只属于一个表空间,表空间的大小是它所对应的数据文件大小的总和。它包括:系统表空间、辅助表空间、撤销表空间、用户表空间。是Oracle逻辑存储结构中的最小的逻辑单位,一个数据库块对应一个或者多个物理块,大小由参数DB_BLOCK_SIZE决定,数据块的结构包括块头和存储区两个部分。是由连续的数据块结合而成的,是Oracle存储分配的最小单位。是数据库中最小的文件,也是最重要的文件。存储表排序操作期间建立的临时表的数据。

数据库学习ing 950

oracle数据块包含,oracle数据块概述

Data BlocksOracle数据库以数据块(也称为Oracle块或页)为单位,来管理数据库数据文件中的逻辑存储空间。数据块是数据库I/O的最小单位。Data Blocks and Operating System Blocks在物理级别,存储在磁盘文件中的数据库数据由操作系统块组成。操作系统块是操作系统可以读取或写入的最小数据单位。相比之下,Oracle块是一个逻辑存储结构,其大小和结构对操...

weixin_36473057的博客 819

逆向工程Python爬虫——国税局发票查验平台

前言 这是一篇含金量很高的干货文章,笔者将手把手带领各位一步一步地实现爬取国家税务总局全国增值税发票查验平台(以下简称“查验平台”)。这个想法诞生在19年初,当时在做一款通过扫描二维码就可以查验发票的小程序。 当时由于笔者学艺尚浅,没办法模拟请求爬取查验平台,所以最终采用的技术方案是通过web自动化测试工具selenium控制浏览器去模拟查验步骤,即使这样,开发过程也是困难重重,不过最后笔者和伙伴们成功实现了整套流程,最后开发出的产品口袋发票夺得了包括2019微信小程序开发大赛赛区三等奖在内的多个奖项。 但

weixin_43102379的博客 1万+

Oracle数据库的体系结构(上)——存储结构

Oracle数据库系统由Oracle数据库和Oracle实例组成,分别对应着数据库的存储结构和软件结构。

weixin_62616638的博客 1606

Win10自动更新怎么永久关闭?有效的Win10强制更新关闭方法

之前小编为大家分享过一些Win10彻底关闭Windows Update自动更新的方法,主要是通过一些如设置流量计费或借助一些专门的小工具来实现,但往往会发现,Win10自动更新就像打不死的小强,不管怎么关闭,之后还是会自动更新,让不少小伙伴颇为不爽。今天小编带来了这篇改进型教程,通过全方位设置,彻底关闭Win10自动更新,感兴趣的小伙伴不妨试试吧。 ...

jianai0602的博客 108万+

【internal】oracle数据块解析

首先区分两组函数 dump('字符',1016) utl_raw.cast_to_raw('字符') utl_raw.cast_to_varchar2('十六进制编码') dump字符后为格式,分为8,10,16,分别表示其进制,如果加上1000,如1010,1016,1008则要显示字符集信息。 这组函数翻译raw类型和字符类型数据,默认是读取定长分割的十六进制数据。 对于GBK编码

践行见远 971

oracle BBED数据块解析,5.Oracle BBED解析数据块——BBED基本使用三

5.Oracle BBED解析数据块——BBED基本使用三Dump命令将块的内存DUMP到屏幕上。可以配合/v参数来产生更多的输出。Dump的DBA,FILENAME,FILE,BLOCK,OFFSET可以再命令中设置。如果没有指定,当前文件,块和OFFSET会被DUMP。 DUMP的大小收到set count的限制。例如DUMP 文件13,块号12,偏移0 ,如下:BBED> dump /...

weixin_42157567的博客 334

Java电商秒杀系统性能优化(一)——电商秒杀系统框架回顾

电商秒杀系统框架回顾项目简介外部依赖框架回顾项目要点项目中存在的问题小结 课程是免费的,课程地址如下:SpringBoot搭建电商秒杀项目,课程真的很棒,作者的思路很清晰,建议各位读者可以跟着视频练习一下这个项目; 项目简介 通过SpringBoot快速搭建的前后端分离的电商基础秒杀项目。项目通过应用领域驱动型的分层模型设计方式去完成:用户otp注册、登陆、查看、商品列表、进入商品详情以及倒计时秒...

ghw15221836342的博客 2945

oracle 数据块解析,Oracle 数据块(data block)的构造和解析

Oracle 数据块(data block)的结构和解析First of all let’s create a new tablespace and a table:SQL> create tablespace my_tbs datafile '/u01/oradata/chenlin/my_tbs.dbf' size 200m ;Tablespace created.then:SQL&gt...

weixin_34137550的博客 765

人工智能入门系列之一: 鸢尾花(Iris)多分类的神经网络详解及代码实现

这是最好的时代,我们一起来打造属于自动驾驶汽车上路、无人机飞天、智能机器人管工厂的AI未来 人工智能领域分化为两个阵营:其一是规则式(rule-based)方法,在人工智能早期占主峰;其二是神经网络(neural network)方法,后起之秀。随着硬件水平的提高,算力的指数式增长;人工智能的重心已经从规则式的专家时代转移到神经网络的数据时代。 “神经网络”不选择把人脑熟稔的逻辑规则传授给计算机...

NLP家的码奴小荷的博客 2万+

解析oracle的dump文件,读懂数据块dump文件信息

尊重作者著作,转自http://blog.csdn.net/guoyjoe/article/details/8567076----------------------------------------------------------------------------------------------------Data Block是数据库中最小的I/O单元,下面我来简单介绍下数据块的基本...

weixin_35831315的博客 3263

2.Oracle BBED解析数据块——准备BBED

2.Oracle BBED解析数据块——准备BBED          欢迎转载,转载请标明出处: BBED工具代码和ORACLE数据库一并安装了。 但是使用到sbbdpt.o和ssbbded.o两个库文件,但是从11g开始,Oracle不再提供这两个库文件。此外还需要一个msb文件。共三个文件,可以从如下链接下载: http://download.csdn.net/detail/notb

badman250的专栏 3万+

全面解析:时延扩展与相干带宽、多普勒扩展与相干时间——无线通信基础

时延扩展与相干带宽 多径时延扩展与多径衰落 接收机所接收到的信号是通过不同的直射、反射、折射等路径到达接收机。由于电波通过各个路径的距离不同, 因而各条路径中发射波的到达时间不同,造成多径时延扩展。距离不同所以到达接收机的相位也不相同,不同相位的多个信号在接收端叠加, 如果同相叠加则会使信号幅度增强, 而反相叠加则会削弱信号幅度。 这样,接收信号的幅度将会发生急剧变化,就会产生多径衰落。 ...

king阿金 4万+

6.Oracle BBED解析数据块——BBED基本使用四

6.Oracle BBED解析数据块——BBED基本使用四 欢迎转载,转载请标明出处:          使用examine命令来块中数据库,可以是裸数据或者格式化的输出。可以在命令中指定 DBA,FILENAME,FILE,BLOCK 和OFFSET。          EXAMINE不像PRINT命令能解释数据结构,但是可以用来显示行信息。          结合行的数据类型,可以用

badman250的专栏 3万+

多台树莓派(主机)通信

在做无人机实验时,有个任务需要 两台无人机 或 无人机与小车 进行通信。 由于我们飞机上用了树莓派,相当于一台电脑,索性选用Socket网络编程。 条件:树莓派、局域网(手机热点或路由器)。需要通信的两台树莓派接入同一个局域网。 如若现场没有网络,可将树莓派配置为无线路由器,发射wifi。网上很多教程,注意一点是树莓派需要先用网线接入路由器再配置。 发送数据: # -*- coding...

LNL_LNL的博客 7131

oracle data trans,深入解析Oracle 数据块(type: 0x06=trans data)结构

一、概念介绍Oracle 数据块(type: 0x06=trans data)实际存储业务数据,数据块的内部结构由Cache layer、Transaction layer及Data layer三层结构组织,本文主要使用dd、Oracle dump、bbed研究数据块的内部结构,最后使用C语言对业务数据进行unload脱机。图1 Data Block Structure二、解析Cache laye...

weixin_39769703的博客 692

oracle BBED数据块解析,8.Oracle BBED解析数据块——BBED基本使用五

8.Oracle BBED解析数据块——BBED基本使用五1.copyCopy命令用于将块从一个地方复制到另一个地方。例如将块从某个文件复制到另一个文件。如下:BBED> copy dba 13,3276 to dba 13,3277File: /oradata/tpcc1.dbf (13)Block: 3277 Offsets: 1864 to 1895...

weixin_34785304的博客 270

Genesis物理引擎实战指南:轻量级确定性刚体仿真核心

刚体物理仿真作为机器人控制、嵌入式运动学验证和确定性游戏开发的基础技术,其核心在于数值稳定性、跨平台可复现性与约束求解精度。本文围绕线性互补问题(LCP)求解、半隐式欧拉积分和零依赖C++实现三大关键技术展开,解析如何在无GUI、低算力环境下构建可单步调试、帧级可控的确定性仿真系统。重点覆盖碰撞检测数学建模、关节局部坐标系绑定、质量-惯性张量一致性校验等工程落地关键点,适用于STM32、树莓派及教育实验场景。内容深度结合Genesis Physics Engine的源码实践,直击‘穿模’‘NaN’‘关节发软

ciya3282的博客 780

深入解析Oracle数据块的内部结构

访问网站,学习Oracle内部数据结构,详细文档说明,下载Oracle的exp/imp,DUL,logminer,ASM工具的源代码,学习高技术含量的内容。在Oracle数据库的存储体系中,数据块是整个体系的最小逻辑单元,也是I/O操作的基本单位。理解数据块的内部结构,不仅能够帮助DBA排查数据损坏、空间分配异常等底层问题,更能让开发者从根本上优化数据库的存储与访问性能。Oracle数据块是分层结构,从上到下依次是块头,事务固定层,事务可变层,数据头层,表目录层,行目录层,空闲空间,行数据层和块尾。

tomcoding的博客 378

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

4.Oracle BBED解析数据块——BBED基本使用二

4.Oracle BBED解析数据块——BBED基本使用二 欢迎转载,转载请标明出处:         Map命令显示当前块的映射。和/v选项使用来产生更多的输出。 Map显示块的偏移,以确定信息。例如块头,数据块头或行目录。          如果命令不是指定当前块,而是检查其他块,那么焦点继续保持在当前块。 如下: BBED> map /v dba 13,1  File: /or

badman250的专栏 3万+

5 Oracle BBED解析数据块——BBED基本使用三

5 Oracle BBED解析数据块——BBED基本使用三

ugghhj的博客 258

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Oracle块中的行偏移量,【internal】oracle数据块解析

首先区分两组函数dump('字符',1016)utl_raw.cast_to_raw('字符')utl_raw.cast_to_varchar2('十六进制编码')dump字符后为格式,分为8,10,16,分别表示其进制,如果加上1000,如1010,1016,1008则要显示字符集信息。这组函数翻译raw类型和字符类型数据,默认是读取定长分割的十六进制数据。对于GBK编码集,每个汉字字符用2字节...

weixin_34621186的博客 739

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

oracle BBED数据块解析,9.Oracle BBED解析数据块——BBED基本案例一改变数据

9.Oracle BBED解析数据块——BBED基本案例一改变数据欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50572039Bbed可以修改打开的数据库的数据文件,不过建议关闭数据库进行修改。避免CHECKPIONT进程覆盖修改。也避免读取修改前的块。提醒:使用BBED修改数据库块的内存是不被ORACLE支持的。只...

weixin_36296325的博客 213
上一篇: Oracle RAC 全局等待事件 gc current block busy 和 gc cr multi block request 说明
下一篇: 如何找出Oracle instance中当前打开游标open cursor的总数?
dd334566788566
博客等级 码龄12年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值