欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【案例分析】创建表报错误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等这样特殊字段。