作業系統中資料檔案與ORACLE資料庫中查詢的bytes大小不同的解析

還不算暈發表於2013-11-28

1.作業系統中資料檔案與ORACLE資料庫中查詢的大小不同的疑惑:

以SYSTEM為例:作業系統中資料檔案比ORACLE資料庫中查詢的多 8192byte  --其它資料檔案同樣情況
[oracle@bys3 ~]$ which dbfsize
/u01/app/oracle/product/11.2.0/dbhome_1/bin/dbfsize
[oracle@bys3 ~]$ dbfsize /u01/oradata/bys3/system01.dbf    
Database file: /u01/oradata/bys3/system01.dbf
Database file type: file system
Database file size: 64000 8192 byte blocks 64000個BLOCK,每塊8192 byte。64000*8192/1024/1024=500M
[oracle@bys3 bys3]$ ll system01.dbf
-rw-r----- 1 oracle oinstall 524296192 Nov 28 10:22 system01.dbf
BYS@ bys3>select bytes,name from v$datafile;
     BYTES NAME
---------- ------------------------------
 524288000 /u01/oradata/bys3/system01.dbf
對比:
524288000  資料庫中
524296192  作業系統中,比資料庫中多出8192位元組
這裡,多出的是資料檔案的0號塊,是由作業系統來管理的。
而資料檔案中的1號塊,叫做檔案頭。

2.使用BBED: dump FILE 1 BLOCK 0 檢視資料檔案中塊情況並與作業系統中查詢的對比:

首先從作業系統中使用命令檢視資料檔案中塊的情況:
[oracle@mydb ocm]$ dbfsize system01.dbf
Database file: system01.dbf
Database file type: file system
Database file size: 64000 8192 byte blocks
即資料檔案有64000個塊,每個塊8192 byte
在BBED中,首先設定BLOCK為0,然後DUMP,資料檔案塊大小及塊個數對應的欄位見下圖-   --BBED的DUMP見:http://blog.csdn.net/q947817003/article/details/16996475 開頭


關於大小位元組序簡單概述:
ORACLE資料庫中後設資料(資料字典裡的):
字元不用顛倒 char varchar
數字需要顛倒  number
表裡面資料是NUMBER型別的不需要顛倒==ORACLE來處理
如圖中:
00200000  是塊大小,是數字,需要顛倒-每2位表示1bytes,要以兩位(即為1bytes)單位顛倒:顛倒後是:00002000
BYS@ bys3>select to_number('00002000','xxxxxxxxxxxxx') from dual;
TO_NUMBER('00002000','XXXXXXXXXXXXX')
-------------------------------------
                                 8192
00fa0000  是BLOKC的個數:數字型別,需要顛倒,顛倒後是:===>0000fa00
BYS@ bys3>select to_number('0000fa00','xxxxxxxxxxxxx') from dual;
TO_NUMBER('0000FA00','XXXXXXXXXXXXX')
-------------------------------------
                                64000
 BBED> map
 File: /u01/oradata/bys3/system01.dbf (1)
 Block: 0                                     Dba:0x00400000
------------------------------------------------------------
BBED-00400: invalid blocktype (00)

相關文章