ORACLE的逻辑结构。

上一篇 / 下一篇  2012-01-12 10:11:43

ORACLE的逻辑结构的实体,从小到大依次为:

    数据块(data block):数据块是ORACLE的存储基础,它由磁盘空间上的若干字节组成。
    区(extent):一个区是两个或多个相邻的ORACLE数据块,它是空间分配单元。
    段(segment):一个段是分配给一个逻辑结构(表,索引等对象)的一组区。
    表空间(tablespace):表空间是一组数据文件,通常由相关的段组成。数据文件包含表空间中的所有逻辑结构的数据,如表和索引的数据。

    下面我们来依次细聊各个逻辑机构。

    1.数据块
    上面介绍了,数据块是由操作系统的存储系统中磁盘空间的一定数目的字节组成。ORACLE数据块是ORACLE的最小存储逻辑部件,驻留ORACLE块的存储磁盘分为若干个磁盘块(disk block),一个磁盘块是一个包含指定字节数的相邻的存储区域---例如,4 096字节或32 768字节。那摸,ORACLE的数据块到底应该多大才合适呢?首先介绍一个初始化参数DB_BLOCK_SIZE,修改这个参数就能指定ORACLE数据块的大小。块尺寸是处理ORACLE的更新、选择或插入数据事务的最小单位,举个例子:如果使用64KB的ORACLE块尺寸,即使只想检索仅4个字符的名字,也必须读取含有这4个字符的整个64KB块。对于大多数系统来说,oracle建议使用8KB。
    ORACLE块尺寸的确定应该基于数据库将要做的工作。如果行比较小且访问很随机,则选择较小的块尺寸,如果行比较小且访问主要是连续的(或是随机且连续的),或者如果有较大行,则选择较大的块尺寸。但是请务必将ORACLE数据块尺寸设定为磁盘块尺寸的倍数,这样能够提高大多数操作系统的性能。
    可以使用ORACLE的转储功能将数据块转储出来细看里面的内容,下面我们就来做这个工作。

首相查出某表对象的块ID:
SQL> select segment_name,file_id,block_id from dba_extents where wner='XXXX' and segment_name like 'HANDLE_%';

SEGMENT_NAME                                                 FILE_ID   BLOCK_ID
----------------------------------------------------------- ---------- ----------
HANDLE_LOG                                                   10      79488
HANDLE_LOG                                                   12      53248
HANDLE_LOG                                                   13     147584
HANDLE_LOG                                                   14    1071360
HANDLE_LOG                                                   15     512512

同样可以使用下面的手段来查询:
SQL> select header_file,header_block from dba_segments where segment_name='HANDLE_LOG';

HEADER_FILE HEADER_BLOCK
----------- ------------
          6        52257
         13        56865
         15        82961
         10        79505
         12       119953
         12       233233
然后将10这个file转储出来:
SQL> alter system dump datafile 10 block 79505;

System altered.
去到udump目录,找到转储出来的文件,查看udump的路径使用下面的方法:
SQL> show parameter user_dump_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
user_dump_dest                       string      /xx/xxx/xxxxx/xxxx/xxxx/xxxx                                                  /xxxx/trace
SQL>


转储文件内容如下:


Trace file /xx/xxx/xxxxxx/xxxx/xxxxx/xxxxx/xxxxx/xxxxx/xxxxx_ora_24510612.trc
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the OLAP option
ORACLE_HOME = /xx/xxx/xxxxxx/xxxxxxx/11.2.0/db_1
System name:    AIX
Node name:    xxxxx
Release:    1
Version:    6
Machine:    XXXXX
Instance name: xxxxx
Redo thread mounted by this instance: 1
Oracle process number: 27
Unix process pid: 24510612, image: oracle@xxxxxx (TNS V1-V3)


....................
 
Start dump data blocks tsn: 6 file#:10 minblk 79505 maxblk 79505
Block dump from cache:
Dump of buffer cache at level 4 for tsn=6, rdba=42022545
BH (0x700000071fb6888) file#: 10 rdba: 0x02813691 (10/79505) class: 4 ba: 0x70000007187c000
  set: 17 pool 3 bsz: 8192 bsi: 0 sflg: 1 pwc: 0,25
  dbwrid: 0 obj: 311139 objn: 311139 tsn: 6 afn: 10 hint: f
  hash: [0x7000000c999fe30,0x7000000c999fe30] lru: [0x70000005ff97ca0,0x700000069fdd1c0]
  lru-flags: hot_buffer
  ckptq: [NULL] fileq: [NULL] objq: [0x70000008b82a310,0x70000008b82a310]
  st: XCURRENT md: NULL tch: 2
  flags: block_written_once redo_since_read
  LRBA: [0x0.0.0] LSCN: [0x0.0] HSCN: [0xffff.ffffffff] HSUB: [3]
  cr pin refcnt: 0 sh pin refcnt: 0
Block dump from disk:
buffer tsn: 6 rdba: 0x02813691 (10/79505)
scn: 0x0000.0729bae3 seq: 0x01 flg: 0x04 tail: 0xbae32301
frmt: 0x02 chkval: 0x790e type: 0x23=PAGETABLE SEGMENT HEADER
Hex dump of block: st=0, typ_found=1
Dump of memory from 0x0000000110B5FE00 to 0x0000000110B61E00
110B5FE00 23A20000 02813691 0729BAE3 00000104  [#.....6..)......]
110B5FE10 790E0000 00000000 00000000 00000000  [y...............]
110B5FE20 00000000 00000005 00001400 0A9C0000  [................]
110B5FE30 00000004 00000354 00000400 03C7D554  [.......T.......T]
110B5FE40 00000000 00000004 00000000 00001354  [...............T]
110B5FE50 00000000 00000000 00000000 00000004  [................]
110B5FE60 00000354 00000400 03C7D554 00000000  [...T.......T....]
110B5FE70 00000004 00000000 00001354 03C7D20D  [...........T....]
110B5FE80 03C7D20D 00000000 00000000 00000000  [................]
110B5FE90 00000000 00000000 00000000 00000000  [................]
        Repeat 3 times
110B5FED0 00010000 00002000 00000000 00001434  [...... ........4]
110B5FEE0 00000000 02813690 00000001 03C7D20F  [......6.........]
110B5FEF0 02813690 00000000 00000000 00000000  [..6.............]
110B5FF00 00000000 00000000 00000005 00000000  [................]
110B5FF10 0004BF63 10000000 02813680 00000400  [...c......6.....]
110B5FF20 0300D000 00000400 03424080 00000400  [.........B@.....]
110B5FF30 03905900 00000400 03C7D200 00000400  [..Y.............]
110B5FF40 00000000 00000000 00000000 00000000  [................]
        Repeat 150 times
110B608B0 02813680 02813692 0300D000 0300D010  [..6...6.........]
110B608C0 03424080 03424090 03905900 03905910  [.B@..B@...Y...Y.]
110B608D0 03C7D200 03C7D210 00000000 00000000  [................]
110B608E0 00000000 00000000 00000000 00000000  [................]
        Repeat 149 times
110B61240 00000000 00000000 02813690 00000000  [..........6.....]
110B61250 00000000 00000000 00000000 00000000  [................]
        Repeat 185 times
110B61DF0 00000000 00000000 00000000 BAE32301  [..............#.]
  Extent Control Header
  -----------------------------------------------------------------
  Extent Header:: spare1: 0      spare2: 0      #extents: 5      #blocks: 5120 
                  last map  0x00000000  #maps: 0      offset: 2716 
      Highwater::  0x03c7d554  ext#: 4      blk#: 852    ext size: 1024 
  #blocks in seg. hdr's freelists: 0    
  #blocks below: 4948 
  mapblk  0x00000000  offset: 4    
                   Unlocked
  --------------------------------------------------------
  Low HighWater Mark :
      Highwater::  0x03c7d554  ext#: 4      blk#: 852    ext size: 1024 
  #blocks in seg. hdr's freelists: 0    
  #blocks below: 4948 
  mapblk  0x00000000  offset: 4    
  Level 1 BMB for High HWM block: 0x03c7d20d
  Level 1 BMB for Low HWM block: 0x03c7d20d
  --------------------------------------------------------
  Segment Type: 1 nl2: 1      blksz: 8192   fbsz: 0     
  L2 Array start offset:  0x00001434
  First Level 3 BMB:  0x00000000
  L2 Hint for inserts:  0x02813690
  Last Level 1 BMB:  0x03c7d20f
  Last Level II BMB:  0x02813690
  Last Level III BMB:  0x00000000
     Map Header:: next  0x00000000  #extents: 5    obj#: 311139 flag: 0x10000000
  Inc # 0
  Extent Map
  -----------------------------------------------------------------
   0x02813680  length: 1024 
   0x0300d000  length: 1024 
   0x03424080  length: 1024 
   0x03905900  length: 1024 
   0x03c7d200  length: 1024 
 
  Auxillary Map
  --------------------------------------------------------
   Extent 0     :  L1 dba 0x02813680 Data dba:  0x02813692
   Extent 1     :  L1 dba:  0x0300d000 Data dba:  0x0300d010
   Extent 2     :  L1 dba:  0x03424080 Data dba:  0x03424090
   Extent 3     :  L1 dba:  0x03905900 Data dba:  0x03905910
   Extent 4     :  L1 dba:  0x03c7d200 Data dba:  0x03c7d210
  --------------------------------------------------------
 
   Second Level Bitmap block DBAs
   --------------------------------------------------------
   DBA 1:   0x02813690
 
End dump data blocks tsn: 6 file#: 10 minblk 79505 maxblk 79505

这些信息能够帮助我们查找表或索引中相关内容。比如obj#: 311139,就能够查到handle_log对象:
SQL> select name from obj$ where obj#=311139;    

NAME
------------------------------
HANDLE_LOG

SQL>

    2.区
    当创建诸如表或索引这样的数据库对象时,要分配给它一个初始的空间量,称为初始区(initial extent),还要为对象指定下一个区的空间量。区分配了表或索引后,在从数据库中删除此对象之前,区都会一直保护它们。一旦对象从数据库中是删除,区空间也就回到数据库可分配的可用空间池中。

    3.段
    ORACLE分配给任一数据库对象的所有空间为一个段。比如,handle_log表,分配给它的空间就叫handle_log段。数据段和索引段都是最常见的ORACLE段,还有临时段(如数据库用于涉及分类事务的段)和撤销段(数据库用来存储撤销信息)。

    4.表空间
    ORACLE在逻辑上划分为一个或多个表空间。ORACLE表空间是包含物理数据文件的逻辑实体。表空间存储数据库所有可用的数据,并且表空间中的数据都物理的存放在一个或多个数据文件里。数据文件是ORACLE格式的操作系统文件。因为表空间还担当了逻辑段的逻辑容器角色,所以一般情况下应该将相关的表都放在同一个表空间下。
    但并不是所有数据库都采用表空间。ORACLE的表空间有如下优点:
·表空间更容易将空间限额分配给不同用户。
·可以把表空间作为单元执行部分备份和部分恢复
·由于像数据仓库分区表这样的大对象可以分布在几个表空间上,因此可以使表空间横跨几个磁盘和控制器,以便提高性能。
·可以使一个表空间脱机而不必停止整个数据库。
·表空间是分配数据库空间的一种便利方法。
·使用表空间级导入导出实用程序可以导入导出指定的应用数据。

TAG:

引用 删除 Guest   /   2012-01-13 15:08:54
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2012-05-25  
  12345
6789101112
13141516171819
20212223242526
2728293031  

数据统计

  • 访问量: 3386
  • 日志数: 17
  • 建立时间: 2012-01-12
  • 更新时间: 2012-05-22

RSS订阅

Open Toolbar