操作系统中数据文件与ORACLE数据库中查询的bytes大小不同的解析

来源:互联网 发布:核盾网络验证破解 编辑:程序博客网 时间:2024/06/17 16:04

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)