今天在创建表空间的时候遇到这个错误ora-1144
查看错误解释
$ oerr ora 1144
01144, 00000, "File size (%s blocks) exceeds maximum of %s blocks"
// *Cause: Specified file size is larger than maximum allowable size value.
// *Action: Specify a smaller size.
Q:smallfile tablespace为什么会有datafile大小的限制?限制是多少呢?
结论:datafile上有最大block的限制,最大block的限制来源于存储block id的字段所用的位数。
以下是思考过程。
ORACLE表空间分为smallfile tablespace(oracle默认创建)和bigfile tablespace。
先从rowid开始。
z@test10g> select rowid from t where rownum<2
2 /
ROWID
------------------
AAAXslAAEAAAAC0AAA
ROWID显示的格式如下,总计18位:
数据对象编号 文件编号 块编号 行编号
AAAXsl AAE AAAAC0 AAA
6 + 3 + 6 + 3 =18
rowid是基于64位编码的18个字符显示(数据对象编号(6) +文件编号(3) +块编号(6)+ 行编号(3)=18位),
其中
A-Z <==> 0 - 25 (26)
a-z <==> 26 - 51 (26)
0-9 <==> 52 - 61 (10)
+/ <==> 62 - 63 (2)
共64(26+26+20+2=64)位
计算10进制的编码值,计算公式如下:
d * (b ^ p)
其中:b就是基数,这里就是64,p就是从右到左,从0开始的位置数
如:上面文件号AAE,具体的10进制的编码值应该是:
4*(64^0)=4;
0*(64^1)=0;
0*(64^2)=0;
文件号就是0+0+4=4
验证一下:
z@test10g> SELECT U.tablespace_name, D.FILE_ID
2 FROM user_tables U, dba_data_files D
3 WHERE table_name = 'T' AND U.tablespace_name = D.tablespace_name
4 /
TABLESPACE_NAME FILE_ID
------------------------------ ----------
USERS 4
刚才提到的是rowid的显示方式:基于64位编码的18个字符显示,
其实rowid的存储方式是:
10 个字节,即80位存储,
其中 数据对象编号需要32 位,相关文件编号需要10 位,块编号需要22,位行编号需要16 位,
由此,我们可以得出:
32bit的object number,每个数据库最多有4G个对象
10bit的file number,每个对象最多有1022个文件(2个文件预留)
22bit的block number,每个文件最多有4M个BLOCK(2^22=4M=4194304)
16bit的row number,每个BLOCK最多有64K个ROWS
查看datafile的MAXBLOCKS
z@test10g> select MAXBLOCKS from dba_data_files where file_id=4;
MAXBLOCKS
----------
4194302
4194304-4194302=2,这里是要预留2个么?(查完后再补充回来)
所以,oracle smallfile tablespace数据文件大小受到BLOCK数量的限制,
数据块大小 数据文件最大总量(约等于) 计算
2KB 8GB 8G=2K*2^22
4KB 16GB 16G=4K*2^22
8KB 32GB 32G=8K*2^22
16KB 64GB 64G=16K*2^22
32KB 128GB 128G=32K*2^22
我这里使用的数据库采用8KB的block_size,则smallfile tablespace单个datafile容量限制约为为32GB。
检查创建tablespace的语句,发现datafile的SIZE 100M误写成SIZE 100G,于是就报了ora-1144 错误。以后操作要仔细!
遗留问题:
1.4194304-4194302=2,这里是要预留2个么?
2.对bigfile tablespace相关内容进行阅读和测试。
rowid部分参考 Oracle rowid urowid[精读] 作者:刘颖博 时间:2004-6-12 mail:liuyingbo@126.com
请指正~~
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23650854/viewspace-682657/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/23650854/viewspace-682657/