[20121114]Oracle資料檔案大小限制.txt

lfree發表於2012-11-14
[20121114]Oracle資料檔案大小限制.txt

SQL> show parameter db_block_size

NAME           TYPE        VALUE
-------------- ----------- ------
db_block_size  integer     8192


SQL> SELECT file_name, file_id, tablespace_name, BYTES, blocks, status, relative_fno, maxbytes, maxblocks, online_status FROM dba_data_files;

FILE_NAME                                         FILE_ID TABLESPACE_NAME           BYTES     BLOCKS STATUS    RELATIVE_FNO               MAXBYTES  MAXBLOCKS ONLINE_
---------------------------------------------- ---------- -------------------- ---------- ---------- --------- ------------ ---------------------- ---------- -------
/u01/app/oracle11g/oradata/test/system01.dbf            1 SYSTEM                807403520      98560 AVAILABLE            1            34359721984    4194302 SYSTEM
/u01/app/oracle11g/oradata/test/sysaux01.dbf            2 SYSAUX                880803840     107520 AVAILABLE            2            34359721984    4194302 ONLINE
/u01/app/oracle11g/oradata/test/undotbs01.dbf           3 UNDOTBS1             1073741824     131072 AVAILABLE            3            34359721984    4194302 ONLINE
/u01/app/oracle11g/oradata/test/users01.dbf             4 USERS                 687865856      83968 AVAILABLE            4            34359721984    4194302 ONLINE
/u01/app/oracle11g/oradata/test/example01.dbf           5 EXAMPLE               104857600      12800 AVAILABLE            5            34359721984    4194302 ONLINE
/u01/app/oracle11g/oradata/test/rman01.dbf              6 RMAN                   67108864       8192 AVAILABLE            6            34359721984    4194302 ONLINE
/u01/app/oracle11g/oradata/test/tools01.dbf             7 TOOLS                  67108864       8192 AVAILABLE            7            34359721984    4194302 ONLINE
/u01/app/oracle11g/oradata/test/test01.dbf              8 TEST                   67108864       8192 AVAILABLE            8            34359721984    4194302 ONLINE

8 rows selected.

--我使用的資料檔案都是smallfile,可以發現最大檔案大小MAXBYTES=34359721984,最大允許的塊MAXBLOCKS=4194302。
--4194302 *8192 正好等於 34359721984。

SQL> select 34359721984/1024/1024/1024 from dual ;

34359721984/1024/1024/1024
--------------------------
                31.9999847

並沒有達到32G。為什麼呢?

主要是由於在Oracle的Rowid中使用22位來代表Block號,這22位最多隻能代表2^22-1(4194303)個資料塊.
[補充一點,每個資料檔案的第一個塊(block 0 )是OS block header,在資料庫中查詢不到資訊,記錄的是OS資訊,以及檔案大小的等資訊]

$ ls -l /u01/app/oracle11g/oradata/test/test01.dbf
-rw-r-----  1 oracle11g oinstall 67117056 Nov 14 00:06 /u01/app/oracle11g/oradata/test/test01.dbf

--可以發現ls -l看到的與dba_data_files查詢到的存在差異! 67117056 - 67108864 = 8192.正好相差1個塊。
--也就是如果你建立一個64M的資料檔案,實際上的os看檔案的大小是64*1024*1024+8192=67117056.
--從v$datafile檢視也可以發現:
SQL> SELECT block1_offset,name FROM v$datafile;

BLOCK1_OFFSET NAME
------------- --------------------------------------------------
         8192 /u01/app/oracle11g/oradata/test/system01.dbf
         8192 /u01/app/oracle11g/oradata/test/sysaux01.dbf
         8192 /u01/app/oracle11g/oradata/test/undotbs01.dbf
         8192 /u01/app/oracle11g/oradata/test/users01.dbf
         8192 /u01/app/oracle11g/oradata/test/example01.dbf
         8192 /u01/app/oracle11g/oradata/test/rman01.dbf
         8192 /u01/app/oracle11g/oradata/test/tools01.dbf
         8192 /u01/app/oracle11g/oradata/test/test01.dbf
8 rows selected.

這樣實際上2^22-2=4194302.也就是最大允許的資料塊是4194302。實際8k資料塊資料檔案最大從OS看就是34359721984+8192=34359730176.


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-749176/,如需轉載,請註明出處,否則將追究法律責任。

相關文章