dump表的資料塊
dump表的資料塊
dump一個表的資料塊要知道這個塊所在的位置(資料檔案的編號和資料塊的編號)
例如我要dump表aes1的資料塊
SQL> select a.file_id,a.block_id,a.bytes,a.blocks from dba_extents a
2 where a.owner='INSUR_CHANGDE' and a.segment_name='AES1';
FILE_ID BLOCK_ID BYTES BLOCKS
---------- ---------- ---------- ----------
5 57 65536 8
在這裡,可以找到表aes1所在的檔案編號是5,資料塊是從64開始的。
例如我要dump表aes1中的特定資料塊
SQL> select rowid,a.* from aes1 a where a.aae002 between '201201' and '201212';
ROWID AAE002
------------------ ------
AAAM7rAAFAAAABAAEI 201201
AAAM7rAAFAAAABAAEJ 201202
AAAM7rAAFAAAABAAEK 201203
AAAM7rAAFAAAABAAEL 201204
AAAM7rAAFAAAABAAEM 201205
AAAM7rAAFAAAABAAEN 201206
AAAM7rAAFAAAABAAEO 201207
AAAM7rAAFAAAABAAEP 201208
AAAM7rAAFAAAABAAEQ 201209
AAAM7rAAFAAAABAAER 201210
AAAM7rAAFAAAABAAES 201211
AAAM7rAAFAAAABAAET 201212
dump表aes1中aae002=201210這一條記錄所在的資料塊
SQL> SELECT dbms_rowid.rowid_object('AAAM7rAAFAAAABAAER') data_object_id#,
2 dbms_rowid.rowid_relative_fno('AAAM7rAAFAAAABAAER') rfile#,
3 dbms_rowid.rowid_block_number('AAAM7rAAFAAAABAAER') block#,
4 dbms_rowid.rowid_row_number('AAAM7rAAFAAAABAAER') row#
5 FROM dual;
DATA_OBJECT_ID# RFILE# BLOCK# ROW#
--------------- ---------- ---------- ----------
52971 5 64 273
執行dump命令
sql>alter system dump datafile 5 block min 57 block max 64;
開啟所對應的trace檔案看dump出來的內容
Start dump data blocks tsn: 6 file#: 5 minblk 57 maxblk 64
buffer tsn: 6 rdba: 0x01400039 (5/57)
scn: 0x0000.00b8ba77 seq: 0x05 flg: 0x04 tail: 0xba772005
frmt: 0x02 chkval: 0x0c48 type: 0x20=FIRST LEVEL BITMAP BLOCK
Hex dump of block: st=0, typ_found=1
file#: 5 minblk 57 maxblk 64
可以看到我們dump的是檔案編號是5,開始的block號為57(minblk),結束的block號為64(maxblk)。
可以從這裡看出來
rdba: 0x01400039 (5/57)
rdba: relative database address of the block相對資料塊地址0x01400039
可以看到(5/57),其實意思就是file# 5, block# 57。
scn: 0x0000.00b8ba77 seq: 0x05 flg: 0x04 tail: 0xba772005
SCN是最後變化的scn,在上面的例子中SCN是0x0000.00b8ba77。
tail是由SCN的後4位(ba77)、type(20)以及sequence(05)組成,即ba772005。
如果Tail與SCN的後4位(ba77)、type(20)以及sequence(05)這三個值不一致,
那麼這個塊就存在問題,需要恢復或者回滾。
frmt: 0x02 chkval: 0x0c48 type: 0x20=FIRST LEVEL BITMAP BLOCK
type具體意思可以看以下列表:
Type Meaning
0x02 undo block
0x06 table or index data block
0x0e undo segment header
0x10 data segment header block
0x17 bitmapped data segment header
Block header dump: 0x0140003c
Object id on Block? Y
seg/obj: 0xceeb csc: 0x00.b8ba76 itc: 2 flg: E typ: 1 - DATA
brn: 0 bdba: 0x1400039 ver: 0x01 opc: 0
inc: 0 exflg: 0
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0008.02c.000010ee 0x00800c28.0310.0a --U- 127 fsc 0x0000.00b8ba78
0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000
“Object id on Block?”告知我們物件是否存在於SYS.OBJ$。從oracle 6開始,這裡一般都是"Y"。
seg/obj的值是16進位制的segment的物件編號。上面的數值是0xceeb,16進位制是ceeb。
使用oracle轉化為10進位制數:
SQL> select to_number('ceeb','xxxx') from dual;
TO_NUMBER('CEEB','XXXX')
------------------------
52971
SQL> select owner,object_name from dba_objects where object_id=52971;
OWNER OBJECT_NAME
------------------------------ ------------------------------------------
INSUR_CHANGDE AES1
正如我們所想那樣的資訊。
csc值(Cleanout System Change number)與SCN值相同時該塊會被清除。
itc值(Interested Transaction List Count)表示ITL的數量,在上面的例子中
itc的值為2表示有這個資料塊上有兩個相關的事務.這些事務id(Xid)顯示有兩
個事務.這些事務的id值與回滾段相關聯被用來處理我們的事務
flag(flg)中"-"或者"O"表示是否在自由列表中,"0"則在,"-"則不在。估計E也是不在的意思。
如果在自由列表的話會出現:
fsl(ITL freelist slot)表示ITL自由列表的開始位置。
fnx(Next freelist block)表示segment自由列表中下一個block的RDBA地址。
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0008.02c.000010ee 0x00800c28.0310.0a --U- 127 fsc 0x0000.00b8ba78
0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000
Xid:事務id,在回滾段事務表中有一條記錄和這個事務對應。
Xid組成:Undo Segment Number +Transaction Table Slot Number+ Wrap。
Uba:回滾段地址,該事務對應的回滾段地址。
Uba組成:回滾塊地址(undo檔案號和資料塊號)+回滾序列號+回滾記錄號。
Flag:這裡可以看下面列表:
Value Meaning
---- transaction is active, or committed pending cleanout
C--- transaction has been committed and locks cleaned out
B--- this undo record contains the undo for this ITL entry
U--- transaction committed (maybe long ago); SCN is an upper bound
T--- transaction was still active at block cleanout SCN
data_block_dump,data header at 0x8628464
===============
tsiz: 0x1f98
hsiz: 0x110
pbl: 0x08628464
bdba: 0x0140003c
76543210
flag=--------
ntab=1
nrow=127
frre=-1
fsbo=0x110
fseo=0x1aa2
avsp=0x1992
tosp=0x1992
0xe:pti[0] nrow=127 offs=0
0x12:pri[0] offs=0x1aa2
0x14:pri[1] offs=0x1aac
0x16:pri[2] offs=0x1ab6
0x18:pri[3] offs=0x1ac0
0x1a:pri[4] offs=0x1aca
0x1c:pri[5] offs=0x1ad4
.......
上面的tsiz值顯示了在資料塊中還可以使用的空間大小,將1f98
轉換成十進位制為8088位元組
ntab的值告訴我們在這個資料塊中儲存有多少個表,除非這個資料塊
屬於一個集簇,否則這個值將會是1.
nrow的值告訴我有多少行資料儲存在資料塊中.上面顯示這個資料塊
有127行資料
從地址0xe開始,我們得到每一行的一個目錄.我們可以看到第一行是從
資料塊的偏移地址為'0x1aa2'.用這種方式可以快速找到資料行.
rowid是唯一指示每一行資料的它的格式是(物件編號+相關檔案號+塊號+行號)
block_row_dump:
tab 0, row 0, @0x1aa2
tl: 10 fb: --H-FL-- lb: 0x1 cc: 1
col 0: [ 6] 32 30 34 30 30 36
tab 0, row 1, @0x1aac
tl: 10 fb: --H-FL-- lb: 0x1 cc: 1
col 0: [ 6] 32 30 34 30 30 37
tab 0, row 2, @0x1ab6
tl: 10 fb: --H-FL-- lb: 0x1 cc: 1
col 0: [ 6] 32 30 34 30 30 38
tab 0, row 3, @0x1ac0
tl: 10 fb: --H-FL-- lb: 0x1 cc: 1
col 0: [ 6] 32 30 34 30 30 39
tab 0, row 4, @0x1aca
tl: 10 fb: --H-FL-- lb: 0x1 cc: 1
真實的行資料是從"block_row_dump"開始的.
然後給出一個行資料。只在這裡顯示的一行資料,其餘的是類似的。
我們可以看到,這行屬於表' 0 '(標籤)我們的集簇。由於沒有集簇在我們的例子中,
我們不會有一個以上的表,這個值將是零。我們還可以看到,這是行' 0 '和那一行的地址
這個地址必須與我們上面提到第一行資料是從資料塊的偏移地址為'0x1aa2'
而在上面顯示的row 0, @0x1aa2中的0x1aa2是相匹配的
t1說明這一行資料的總的位元組數包含任何開銷.我們可以看到這一行是有10位元組
cc說明這一行有多少列,上面顯示的是1列.
fb顯示了行的標記.H是行頭,F是行的第一個片段,L是行的最後一個片段.
如果顯示為這一行的第一個和最後一個行片段說明行沒有發生連結.因此
行頭和行不會遷移
tab 0, row 0, @0x1aa2
tl: 10 fb: --H-FL-- lb: 0x1 cc: 1
col 0: [ 6] 32 30 34 30 30 36
第一行第一列顯示為 32 30 34 30 30 36是字元型
那進行轉換
SQL> select to_number('3230','xxxx')from dual;
TO_NUMBER('3230','XXXX')
------------------------
12848
SQL> select to_number('3430','xxxx')from dual;
TO_NUMBER('3430','XXXX')
------------------------
13360
SQL> select to_number('3036','xxxx')from dual;
TO_NUMBER('3036','XXXX')
------------------------
12342
SQL>
SQL> select chr(12848)from dual;
CHR(12848)
----------
20
SQL> select chr(13360)from dual;
CHR(13360)
----------
40
SQL> select chr(12342)from dual;
CHR(12342)
----------
06
將CHR(12848)+CHR(13360)+CHR(12342=204006
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-747852/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20210423]dump sga映像的對應塊.txt
- goutil/dump - 列印漂亮易讀的go資料Go
- 使用mysqldump以SQL格式來dump資料MySql
- oracle 普通表空間資料檔案壞塊Oracle
- 使用mysqldump以文字分隔格式來dump資料MySql
- pg_dump 備份,恢復資料庫資料庫
- [20180606]如何dump資料庫裡面的漢字.txt資料庫
- PG-pg_dump備份/恢復資料庫資料庫
- mysql dump 拉取遠端資料同步到本地庫的shell 指令碼MySql指令碼
- oracle資料庫瘋狂生成dump把目錄撐滿Oracle資料庫
- Oracle資料塊格式Oracle
- ABAP資料庫表的後設資料資料庫
- MOGDB/openGauss資料庫gs_dump備份指令碼及清理資料庫指令碼
- 區塊鏈雲盤的資料安全區塊鏈
- config表與其他資料表的關聯
- 2.6.5 指定資料塊大小
- [20210128]拼接資料塊.txt
- MySQL資料表的基本操作MySql
- SAP ABAP資料表的操作
- mysql 快清表中的資料MySql
- 7.81 DUMP
- 達夢資料庫如何將Excel表的資料複製到表中資料庫Excel
- Firedac 在資料表中插入BLOB資料的方法
- netty讀取大塊的有分界資料Netty
- 區塊鏈和大資料的關係區塊鏈大資料
- 高通進dump和抓取解析dump log
- 【資料庫資料恢復】如何恢復Oracle資料庫truncate表的資料資料庫資料恢復Oracle
- ORACLE 資料塊格式深入解析Oracle
- 區塊鏈資料總結區塊鏈
- 區塊鏈學習資料區塊鏈
- 區塊鏈和資料庫區塊鏈資料庫
- Hadoop系列之HDFS 資料塊Hadoop
- mysql 資料表的複製案例MySql
- 報表資料的可控快取快取
- SAP中的資料庫表索引資料庫索引
- 關於InnoDB表資料和索引資料的儲存索引
- sql統計各種奇葩的資料庫表資料SQL資料庫
- laravel chunk 分塊後 第二塊資料是物件Laravel物件
- 2019年–2022年全球區塊鏈和加密貨幣投資總額(附原資料表) 區塊鏈加密