ITPub博客

首页 > 数据库 > Oracle > 【kingsql分享】逻辑数据库结构 之 数据块

【kingsql分享】逻辑数据库结构 之 数据块

Oracle 作者:rh_linux 时间:2014-10-14 22:52:35 0 删除 编辑

    数据块:数据块是oracle数据库的存储基础,它由磁盘空间上的若干字节组成。

    数据块是oracle数据库的最小逻辑部件。例如,可以定义oracle的数据块为2KB,4KB,8KB,16KB32KB(甚至更大的块),通常称数据块为oracle块。驻留oracle块的存储磁盘分成若干磁盘快(disk block),一个磁盘块是一个包含指定字节数的相邻的存储区域——例如,4096字节或32768字节(4KB32KB1KB=1024B

    初始化参数文件init.oraDB_BLOCK_SIZE参数设置oracle块的大小。

    块尺寸是处理oracle的更新,选择或插入数据事务的最小单位,当用户从表中选择数据时,选择操作将从数据库文件中以oracle块为单位"读取"或提取数据。

    如果使用64KBoracle块尺寸(65536字节),即一个oracle数据块是65536字节,即使只想检索仅仅4个字符的名字(一个字符一个字节算),那么也就是4个字节的数据,也必须读取含有这4个字节的整个数据块,这个数据块是65536字节啊!

如果从SQL SERVER进入oracle,则可以认为oracle块的大小与SQL SERVER页的大小相同。

Oracle块尺寸的确定应该基于数据库将要做的工作。例如,如果处理的行较小且要进行大量的索引查找,那么应选择较小的块尺寸;当扫描大表时,应选择较大的块尺寸,这适用于报表应用程序。如果不能确定使用多大的块尺寸,那么,对于大多数处理大量事务的系统来说,oracle建议选择块尺寸为8KB

多个oracle数据块尺寸:DB_BLOCK_SIZE初始化参数决定oracle数据库的标准块尺寸,其取值范围可以从2KB-32KBOracle总是依据标准块尺寸创建系统表空间的,并且oracle还可指定最多4个额外的非标准的块尺寸。例如,在同一个数据库中,可以定义2KB,4KB,8KB,16KB32KB的块尺寸。如果选择配置多个oracle块尺寸,还必须配置SGA的缓冲区高速缓存中相应的子高速缓存。但并非总是需要有多个数据块尺寸,大多数情况下只有一个标准的oracle块尺寸也会做的很好。多个块尺寸主要用于在具有不同数据库块尺寸的数据库之间传送表空间(也就是DB1:2KBDB2:4KB,DB3:8KB,那么DB4要传送表空间在这三个数据库,DB4本身16KB,它就需要配置多个oracle块尺寸,2KB,4KB,8KB,以便能够把表空间传送到前三个数据库中)。

数据块的内部结构:所有数据块都可以分为两个主要部分:行数据部分和可用空间部分(还有其他一些小的区域,如维护数据块所使用的系统开销和首部空间)。数据块的行数据部分包括存储在表或索引中的数据。可用空间(free space)部分是oracle块留下的空间,为的是给将要插入的新数据或是扩充已有的行留出空间。

有时,正确地找出某个块中有哪些数据,或者查找哪个oracle块包含了某些数据,是很有用的。通过"转储"块的内容可以实际"看到"数据块中有什么东西。Oracle块可以在操作系统级转储(二进制转储),也可以执行oracle格式的块转储。

执行块转储的最常见原因是调查块讹误(block corruption),这些错误可能由操作系统或oracle软件错误,硬件问题,内存或I/O高速缓存问题所引起。Recovery Manager(RMAN)可以从讹误数据块恢复数据,也可以用Data Recovery Advisor利用其他策略从讹误数据块恢复数据。

我们来看一下oracle数据块中究竟有什么。首先,在转储数据前,需要查找想要转储哪个数据文件和数据块。

用于确定文件和块的ID的查询:

SYS@hzh >select segment_name,file_id,block_id

  2  from dba_extents where segment_name='DEPT';

SEGMENT_NAME            FILE_ID   BLOCK_ID

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

DEPT                          4          9

也可以使用以下查询得到同样的信息:

SYS@hzh >select header_file,header_block from dba_segments

  2  where segment_name='DEPT';

HEADER_FILE HEADER_BLOCK

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

          4           11

接着,可以使用相应的文件和块号发布以下命令得到所需的转储块

SYS@hzh >alter system dump datafile 4 block 9;

System altered.

以上命令将在oracle数据库的默认跟踪目录(UDUMP)中产生一个块转储

以下是此命令的输出

/u01/app/oracle/admin/hzh/udump/hzh_ora_7385.trc

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

ORACLE_HOME = /u01/app/oracle/product/10.2.0.1/db_1

System name:    Linux

Node name:      hong

Release:        2.6.18-164.el5

Version:        #1 SMP Tue Aug 18 15:51:54 EDT 2009

Machine:        i686

Instance name: hzh

Redo thread mounted by this instance: 1

Oracle process number: 15

Unix process pid: 7385, image: oracle@hong (TNS V1-V3)

*** 2012-08-29 11:39:27.117

*** SERVICE NAME:(SYS$USERS) 2012-08-29 11:39:27.116

*** SESSION ID:(159.33) 2012-08-29 11:39:27.116

Start dump data blocks tsn: 6 file#: 5 minblk 347 maxblk 347

buffer tsn: 6 rdba: 0x0140015b (5/347)

scn: 0x0000.0006dac9 seq: 0x02 flg: 0x04 tail: 0xdac92302

frmt: 0x02 chkval: 0x63e8 type: 0x23=PAGETABLE SEGMENT HEADER

Hex dump of block: st=0, typ_found=1

Dump of memory from 0x0D130400 to 0x0D132400

D130400 0000A223 0140015B 0006DAC9 04020000  [#...[.@.........]

D130410 000063E8 00000000 00000000 00000000  [.c..............]

D130420 00000000 00000001 00000008 00000A9C  [................]

D130430 00000000 00000008 00000008 01400161  [............a.@.]

D130440 00000000 00000000 00000000 00000005  [................]

D130450 00000000 00000000 00000000 00000000  [................]

D130460 00000008 00000008 01400161 00000000  [........a.@.....]

D130470 00000000 00000000 00000005 01400159  [............Y.@.]

D130480 01400159 00000000 00000000 00000000  [Y.@.............]

D130490 00000000 00000000 00000000 00000000  [................]

        Repeat 3 times

D1304D0 00000001 00002000 00000000 00001434  [..... ......4...]

D1304E0 00000000 0140015A 00000001 01400159  [....Z.@.....Y.@.]

D1304F0 0140015A 00000000 00000000 00000000  [Z.@.............]

D130500 00000000 00000000 00000001 00000000  [................]

D130510 0000C861 10000000 01400159 00000008  [a.......Y.@.....]

D130520 00000000 00000000 00000000 00000000  [................]

        Repeat 152 times

D130EB0 01400159 0140015C 00000000 00000000  [Y.@.\.@.........]

D130EC0 00000000 00000000 00000000 00000000  [................]

        Repeat 151 times

D131840 00000000 00000000 0140015A 00000000  [........Z.@.....]

D131850 00000000 00000000 00000000 00000000  [................]

        Repeat 185 times

D1323F0 00000000 00000000 00000000 DAC92302  [.............#..]

  Extent Control Header

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

  Extent Header:: spare1: 0      spare2: 0      #extents: 1      #blocks: 8     

                  last map  0x00000000  #maps: 0      offset: 2716  

      Highwater::  0x01400161  ext#: 0      blk#: 8      ext size: 8     

  #blocks in seg. hdr's freelists: 0     

  #blocks below: 5     

  mapblk  0x00000000  offset: 0     

                   Unlocked

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

  Low HighWater Mark : 

      Highwater::  0x01400161  ext#: 0      blk#: 8      ext size: 8     

  #blocks in seg. hdr's freelists: 0     

  #blocks below: 5     

  mapblk  0x00000000  offset: 0     

  Level 1 BMB for High HWM block: 0x01400159

  Level 1 BMB for Low HWM block: 0x01400159

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

  Segment Type: 1 nl2: 1      blksz: 8192   fbsz: 0      

  L2 Array start offset:  0x00001434

  First Level 3 BMB:  0x00000000

  L2 Hint for inserts:  0x0140015a

  Last Level 1 BMB:  0x01400159

  Last Level II BMB:  0x0140015a

  Last Level III BMB:  0x00000000

     Map Header:: next  0x00000000  #extents: 1    obj#: 51297  flag: 0x10000000

  Inc # 0 

  Extent Map

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

   0x01400159  length: 8     

  

  Auxillary Map

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

   Extent 0     :  L1 dba:  0x01400159 Data dba:  0x0140015c

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

  

   Second Level Bitmap block DBAs 

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

   DBA 1:   0x0140015a

  

End dump data blocks tsn: 6 file#: 5 minblk 347 maxblk 347

*** 2012-08-29 11:51:38.670

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

buffer tsn: 4 rdba: 0x01000009 (4/9)

scn: 0x0000.0006bfdb seq: 0x02 flg: 0x04 tail: 0xbfdb2002

frmt: 0x02 chkval: 0x01b6 type: 0x20=FIRST LEVEL BITMAP BLOCK

Hex dump of block: st=0, typ_found=1

Dump of memory from 0x0D130400 to 0x0D132400

D130400 0000A220 01000009 0006BFDB 04020000  [ ...............]

D130410 000001B6 00000000 00000000 00000000  [................]

D130420 00000000 00000000 00000000 00000000  [................]

        Repeat 1 times

D130440 00000000 00000000 00000000 00000004  [................]

D130450 FFFFFFFF 00000000 00000003 00000008  [................]

D130460 00010001 00000000 00000000 00000000  [................]

D130470 00000005 00000003 42C4AEDD 42C4AEDD  [...........B...B]

D130480 00000000 00000000 00000000 00000000  [................]

D130490 0100000A 00000000 00000000 00000008  [................]

D1304A0 00000008 01000011 00000000 00000000  [................]

D1304B0 00000000 00000005 00000000 00000001  [................]

D1304C0 0000C7CA 00000000 00000000 01000009  [................]

D1304D0 00000008 00000000 00000000 00000000  [................]

D1304E0 00000000 00000000 00000000 00000000  [................]

        Repeat 9 times

D130580 00000000 00000000 00000000 55551511  [..............UU]

D130590 00000000 00000000 00000000 00000000  [................]

        Repeat 485 times

D1323F0 00000000 00000000 00000000 BFDB2002  [............. ..]

Dump of First Level Bitmap Block

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

   nbits : 4 nranges: 1         parent dba:  0x0100000a   poffset: 0     

   unformatted: 0       total: 8         first useful block: 3      

   owning instance : 1

   instance ownership changed at 07/01/2005 10:47:57

   Last successful Search 07/01/2005 10:47:57

   Freeness Status:  nf1 0      nf2 0      nf3 0      nf4 5      

 

   Extent Map Block Offset: 4294967295 

   First free datablock : 3      

   Bitmap block lock opcode 0

   Locker xid:     :  0x0000.000.00000000

   Inc #: 0 Objd: 51146 

  HWM Flag: HWM Set

      Highwater::  0x01000011  ext#: 0      blk#: 8      ext size: 8     

  #blocks in seg. hdr's freelists: 0     

  #blocks below: 5     

  mapblk  0x00000000  offset: 0     

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

  DBA Ranges :

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

   0x01000009  Length: 8      Offset: 0      

  

   0:Metadata   1:Metadata   2:Metadata   3:75-100% free

   4:75-100% free   5:75-100% free   6:75-100% free   7:75-100% free

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

End dump data blocks tsn: 4 file#: 4 minblk 9 maxblk 9

可以解释和读取转储数据,以便查找表或索引中相关信息的详细内容。

下面考虑一个简单的例子,说明如何从上述块转储信息中得到表的名称。取出倒数第2行的obj#,并执行以下查询:

 

SYS@hzh >alter system dump datafile 4 block 11;

/u01/app/oracle/admin/hzh/udump/hzh_ora_7749.trc

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

ORACLE_HOME = /u01/app/oracle/product/10.2.0.1/db_1

System name:    Linux

Node name:      hong

Release:        2.6.18-164.el5

Version:        #1 SMP Tue Aug 18 15:51:54 EDT 2009

Machine:        i686

Instance name: hzh

Redo thread mounted by this instance: 1

Oracle process number: 15

Unix process pid: 7749, image: oracle@hong (TNS V1-V3)

*** 2012-08-29 11:59:15.839

*** SERVICE NAME:(SYS$USERS) 2012-08-29 11:59:15.838

*** SESSION ID:(159.42) 2012-08-29 11:59:15.838

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

buffer tsn: 4 rdba: 0x0100000b (4/11)

scn: 0x0000.0006bfdb seq: 0x02 flg: 0x04 tail: 0xbfdb2302

frmt: 0x02 chkval: 0x6c43 type: 0x23=PAGETABLE SEGMENT HEADER

Hex dump of block: st=0, typ_found=1

Dump of memory from 0x0DD22400 to 0x0DD24400

DD22400 0000A223 0100000B 0006BFDB 04020000  [#...............]

DD22410 00006C43 00000000 00000000 00000000  [Cl..............]

DD22420 00000000 00000001 00000008 00000A9C  [................]

DD22430 00000000 00000008 00000008 01000011  [................]

DD22440 00000000 00000000 00000000 00000005  [................]

DD22450 00000000 00000000 00000000 00000000  [................]

DD22460 00000008 00000008 01000011 00000000  [................]

DD22470 00000000 00000000 00000005 01000009  [................]

DD22480 01000009 00000000 00000000 00000000  [................]

DD22490 00000000 00000000 00000000 00000000  [................]

        Repeat 3 times

DD224D0 00000001 00002000 00000000 00001434  [..... ......4...]

DD224E0 00000000 0100000A 00000001 01000009  [................]

DD224F0 0100000A 00000000 00000000 00000000  [................]

DD22500 00000000 00000000 00000001 00000000  [................]

DD22510 0000C7CA 10000000 01000009 00000008  [................]

DD22520 00000000 00000000 00000000 00000000  [................]

        Repeat 152 times

DD22EB0 01000009 0100000C 00000000 00000000  [................]

DD22EC0 00000000 00000000 00000000 00000000  [................]

        Repeat 151 times

DD23840 00000000 00000000 0100000A 00000000  [................]

DD23850 00000000 00000000 00000000 00000000  [................]

        Repeat 185 times

DD243F0 00000000 00000000 00000000 BFDB2302  [.............#..]

  Extent Control Header

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

  Extent Header:: spare1: 0      spare2: 0      #extents: 1      #blocks: 8     

                  last map  0x00000000  #maps: 0      offset: 2716  

      Highwater::  0x01000011  ext#: 0      blk#: 8      ext size: 8     

  #blocks in seg. hdr's freelists: 0     

  #blocks below: 5     

  mapblk  0x00000000  offset: 0     

                   Unlocked

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

  Low HighWater Mark : 

      Highwater::  0x01000011  ext#: 0      blk#: 8      ext size: 8     

  #blocks in seg. hdr's freelists: 0     

  #blocks below: 5     

  mapblk  0x00000000  offset: 0     

  Level 1 BMB for High HWM block: 0x01000009

  Level 1 BMB for Low HWM block: 0x01000009

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

  Segment Type: 1 nl2: 1      blksz: 8192   fbsz: 0      

  L2 Array start offset:  0x00001434

  First Level 3 BMB:  0x00000000

  L2 Hint for inserts:  0x0100000a

  Last Level 1 BMB:  0x01000009

  Last Level II BMB:  0x0100000a

  Last Level III BMB:  0x00000000

     Map Header:: next  0x00000000  #extents: 1    obj#: 51146  flag: 0x10000000

  Inc # 0 

  Extent Map

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

   0x01000009  length: 8     

  

  Auxillary Map

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

   Extent 0     :  L1 dba:  0x01000009 Data dba:  0x0100000c

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

  

   Second Level Bitmap block DBAs 

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

   DBA 1:   0x0100000a

  

End dump data blocks tsn: 4 file#: 4 minblk 11 maxblk 11

SYS@hzh >select name from obj$

  2  where obj#='51146';

NAME

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

DEPT

 

上面的例子说明了如何直接从数据库块转储中得到信息。当然,如果需要从转储中得到更重要的数据,必须使用更高级的技术。


kingsql分享
hongzhuohui@kingsql.com
2014-10-10

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/1696240/viewspace-1298982/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-05-18

  • 博文量
    43
  • 访问量
    163200