【kingsql分享】邏輯資料庫結構 之 資料塊
資料塊:資料塊是oracle資料庫的儲存基礎,它由磁碟空間上的若干位元組組成。
資料塊是oracle資料庫的最小邏輯部件。例如,可以定義oracle的資料塊為2KB,4KB,8KB,16KB或32KB(甚至更大的塊),通常稱資料塊為oracle塊。駐留oracle塊的儲存磁碟分成若干磁碟快(disk block),一個磁碟塊是一個包含指定位元組數的相鄰的儲存區域——例如,4096位元組或32768位元組(4KB或32KB,1KB=1024B)
初始化引數檔案init.ora中DB_BLOCK_SIZE引數設定oracle塊的大小。
塊尺寸是處理oracle的更新,選擇或插入資料事務的最小單位,當使用者從表中選擇資料時,選擇操作將從資料庫檔案中以oracle塊為單位"讀取"或提取資料。
如果使用64KB的oracle塊尺寸(65536位元組),即一個oracle資料塊是65536位元組,即使只想檢索僅僅4個字元的名字(一個字元一個位元組算),那麼也就是4個位元組的資料,也必須讀取含有這4個位元組的整個資料塊,這個資料塊是65536位元組啊!
如果從SQL SERVER進入oracle,則可以認為oracle塊的大小與SQL SERVER頁的大小相同。
Oracle塊尺寸的確定應該基於資料庫將要做的工作。例如,如果處理的行較小且要進行大量的索引查詢,那麼應選擇較小的塊尺寸;當掃描大表時,應選擇較大的塊尺寸,這適用於報表應用程式。如果不能確定使用多大的塊尺寸,那麼,對於大多數處理大量事務的系統來說,oracle建議選擇塊尺寸為8KB。
多個oracle資料塊尺寸:DB_BLOCK_SIZE初始化引數決定oracle資料庫的標準塊尺寸,其取值範圍可以從2KB-32KB。Oracle總是依據標準塊尺寸建立系統表空間的,並且oracle還可指定最多4個額外的非標準的塊尺寸。例如,在同一個資料庫中,可以定義2KB,4KB,8KB,16KB和32KB的塊尺寸。如果選擇配置多個oracle塊尺寸,還必須配置SGA的緩衝區快取記憶體中相應的子快取記憶體。但並非總是需要有多個資料塊尺寸,大多數情況下只有一個標準的oracle塊尺寸也會做的很好。多個塊尺寸主要用於在具有不同資料庫塊尺寸的資料庫之間傳送表空間(也就是DB1:2KB,DB2: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分享
2014-10-10
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28389881/viewspace-1294631/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫邏輯結構:表空間、段、區、塊的字典資料庫
- 達夢資料庫基礎知識(二)資料庫邏輯結構資料庫
- 資料庫 Mysql 邏輯架構簡介資料庫MySql架構
- Oracle的邏輯結構(表空間、段、區間、塊)——Oracle資料塊(二)Oracle
- 邏輯資料庫的管理資料庫
- 資料結構知識點--儲存結構與邏輯結構資料結構
- 資料庫邏輯遷移方案資料庫
- 資料庫邏輯備份(轉)資料庫
- Vue原始碼探究-資料繫結邏輯架構Vue原始碼架構
- oracle block資料塊結構之itcOracleBloC
- dataguard之邏輯備庫移動資料檔案
- Oracle資料庫塊的物理損壞與邏輯損壞Oracle資料庫
- 資料結構之Stack | 讓我們一塊來學習資料結構資料結構
- 資料結構之Queue | 讓我們一塊來學習資料結構資料結構
- 資料結構之Set | 讓我們一塊來學習資料結構資料結構
- 成為MySQL DBA後,再看ORACLE資料庫(六、邏輯儲存結構)MySqlOracle資料庫
- oracle邏輯備用資料庫(一)Oracle資料庫
- oracle邏輯備份之--資料泵Oracle
- mysql資料庫-資料結構MySql資料庫資料結構
- 資料結構之LinkedList | 讓我們一塊來學習資料結構資料結構
- Oracle資料庫的邏輯備份工具-expdp資料泵Oracle資料庫
- 基礎知識1——資料物理,邏輯儲存結構
- 資料結構小白系列之資料結構概述資料結構
- 資料庫,邏輯刪還是物理刪?資料庫
- ORACLE資料庫的邏輯備份(轉)Oracle資料庫
- PostgreSQL 資料庫學習 - 1.資料庫體系結構之儲存結構SQL資料庫
- MongoDB之資料查詢(邏輯運算)MongoDB
- database資料庫的資料結構Database資料庫資料結構
- 物理Standby資料庫及邏輯Standby資料庫(Physical Standby & Logical Standby)資料庫
- 資料分析 | 資料視覺化圖表,BI工具構建邏輯視覺化
- SQL Server資料庫出現邏輯錯誤的資料恢復SQLServer資料庫資料恢復
- Oracle 資料庫 結構Oracle資料庫
- 資料結構之「樹」資料結構
- 資料結構之「棧」資料結構
- 資料結構之——棧資料結構
- 資料結構之棧資料結構
- 資料結構之圖資料結構
- 資料結構之資料、資料元素、資料項、資料物件之間的關係資料結構物件