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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值