【案例分析】创建表报错误261: Cannot create file for table table-name.
程序员文章站
2022-07-01 08:19:05
...
创建表时第265行报261错误及102ISAM错误,该错误的原因是不能为表创建文件。创建的表的语句如下:
create table tab1 (
col1 varchar(40),
col2 varchar(40),
...中间省略一些行...
col263 date
);
从表结构上看,该表拥有大量的varchar/lvarchar类型的字段(大约240个),在当前的datadbs01(页大小为2KB)下创建失败,报上述错误。
在16KB页大小的其它dbspace上创建该表能成功,通过oncheck -pt 打印该表的信息,显示如下:
[[email protected] ~]$ oncheck -pt myttdb:tab1
TBLspace Report for myttdb:gbasedbt.tab1
Physical Address 7:2256
Creation date 07/02/2020 16:49:05
TBLspace Flags 902 Row Locking
TBLspace contains VARCHARS
TBLspace use 4 bit bit-maps
Maximum row size 17550
Number of special columns 244
特别注意到: Number of special columns 244 (特殊字段有244个)
继续通过oncheck -pP 打印该表的partition page页信息,显示如下:
[[email protected] ~]$ oncheck -pP 7 2256
addr stamp chksum nslots flag type frptr frcnt next prev
7:2256 287175 6914 5 802 PARTN 2162 14198 0 0
slot ptr len flg
1 24 136 0
2 160 40 0
3 200 1952 0
4 2152 0 0
5 2152 10 0
特别注意到:frptr显示已经使用2162字节的空间。
这时问题可以明确了:在2KB页的空间里创建该表,partition page至少需要2162字节的空间,但2KB的大小只有2048,故无法创建该表。
至于为什么会需要这么多空间?
partition page的slot 3中需要8个字节来描述varchar/lvarchar/nvarchar等这样特殊字段。
下一篇: 维度与指标