[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博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2936973/ ,如需转载,请注明出处,否则将追究法律责任。