[20230223]8k資料塊建立最大檔案是多少(ORA-03206).txt

lfree發表於2023-02-24

[20230223]8k資料塊建立最大檔案是多少(ORA-03206).txt

--//被別人問及這個問題,實際上對於8k資料塊大小能建立的資料檔案大小等於 32G-8*2K .

--//oracle普通資料檔案(不包括big datafile),資料塊地址佔32位(對於small datafile),前10位表示檔案號,後22位表示塊號,不包括全
--//部為0,全部為1的資料塊.這樣塊號應該是2^22-2 = 4194302
--//這樣如果8K資料塊,最大建立的資料檔案大小4194302*8 = 33554416.

--//為什麼要減2呢?實際上資料檔案第0塊是資料檔案的OS頭,最後1塊,我不知道為什麼?
--//真正的資料塊從1開始(資料檔案頭).這樣資料塊佔用的數量是2^22-2=4194302.
--//測試如下:

1.環境:
SCOTT@book> @ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

2.測試1:
SYS@book> create tablespace testxy  datafile '/u01/testxy01.dbf' size 16m autoextend on next 16m maxsize 32G;
create tablespace testxy  datafile '/u01/testxy01.dbf' size 16m autoextend on next 16m maxsize 32G
*
ERROR at line 1:
ORA-03206: maximum file size of (4194304) blocks in AUTOEXTEND clause is out of range

SYS@book> create tablespace testxy  datafile '/u01/testxy01.dbf' size 16m autoextend on next 16m maxsize 33554424k;
create tablespace testxy  datafile '/u01/testxy01.dbf' size 16m autoextend on next 16m maxsize 33554424k
*
ERROR at line 1:
ORA-03206: maximum file size of (4194303) blocks in AUTOEXTEND clause is out of range

$ oerr ora 03206
03206, 00000, "maximum file size of (%s) blocks in AUTOEXTEND clause is out of range"
// *Cause: The maximum file size for an autoextendable file has
//         exceeded the maximum number of blocks allowed.
// *Action: Reduce the size and retry.

SYS@book> create tablespace testxy  datafile '/u01/testxy01.dbf' size 16m autoextend on next 16m maxsize 33554416k;
Tablespace created.

$ ll /u01/testxy01.dbf
-rw-r----- 1 oracle oinstall 16785408 2023-02-24 09:11:17 /u01/testxy01.dbf
--//如果你檢視資料檔案可以發現實際上建立的大小是 16M+8k, 16*1024*1024+8192 = 16785408.

3.測試2:
--//對於big datafile檔案呢?這樣1個表空間僅僅有1個資料檔案.資料塊地址佔32位,32位全部用來表示塊號.
--//2^32-2 = 4294967294
--//4294967294*8 = 34359738352
--//34359738352/1024/1024 = 32767.9999847412109375= 32767.99999237060546875, 相當接近於32768G. 也就是32T.
--//先刪除testxy表空間,繼續測試:

SYS@book> CREATE BIGFILE TABLESPACE testxy DATAFILE  '/u01/testxy01.dbf' SIZE 16M AUTOEXTEND ON NEXT 16M MAXSIZE 34359738352K;
CREATE BIGFILE TABLESPACE testxy DATAFILE  '/u01/testxy01.dbf' SIZE 16M AUTOEXTEND ON NEXT 16M MAXSIZE 34359738352K
*
ERROR at line 1:
ORA-03206: maximum file size of (4294967294) blocks in AUTOEXTEND clause is out of range
--//很明顯對於BIGFILE不是這樣的情況.

SYS@book> CREATE BIGFILE TABLESPACE testxy DATAFILE  '/u01/testxy01.dbf' SIZE 16M AUTOEXTEND ON NEXT 16M MAXSIZE 34359738344K;
Tablespace created.

--//2^32-3 = 4294967293
--//4294967293*8 = 34359738344
--//為什麼不是-2我不清楚為什麼.那位知道.

4.最小資料檔案呢?
--//以前測試過,不再貼出.
--//連結:[20171206]最小資料檔案.txt=>http://blog.itpub.net/267265/viewspace-2148337/

--//如果建立的資料檔案如果SEGMENT SPACE MANAGEMENT AUTO (8K資料塊),最小檔案是88k.實際佔用大小96K.
--//第0塊OS塊,第1塊檔案頭,第2塊是點陣圖頭,第3塊是點陣圖區.一個extent=64K佔8*8K.
--// 3+8 = 11 , 11*8=88k.

--//如果使用SEGMENT SPACE MANAGEMENT MANUAL(8K資料塊),最小檔案是40k.實際佔用大小48K.
--//因為EXTENT MANAGEMENT LOCAL UNIFORM SIZE最小佔2個資料塊,對於8k資料塊=16K.

--//第0塊OS塊,第1塊檔案頭,第2塊是點陣圖頭,第3塊是點陣圖區.一個extent=16佔2*8K.
--// 3+2 = 5 , 5*8=40.

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

相關文章