【案例分析】创建表报错误261: Cannot create file for table table-name.

创建表时第265行报261错误及102ISAM错误,该错误的原因是不能为表创建文件。创建的表的语句如下:

create table tab1 (
  col1 varchar(40),
  col2 varchar(40),
  ...中间省略一些行...
  col263 date
);

从表结构上看,该表拥有大量的varchar/lvarchar类型的字段(大约240个),在当前的datadbs01(页大小为2KB)下创建失败,报上述错误。
在16KB页大小的其它dbspace上创建该表能成功,通过oncheck -pt 打印该表的信息,显示如下:

[gbasedbt@instance-ihbhwu9m ~]$ 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页信息,显示如下:

[gbasedbt@instance-ihbhwu9m ~]$ 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等这样特殊字段。

猜你喜欢

转载自blog.csdn.net/liaosnet/article/details/107088377