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

    技术2022-07-21  75

    创建表时第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等这样特殊字段。

    Processed: 0.012, SQL: 9