【问题标题】:Db2 table creation issue due to page size由于页面大小导致的 Db2 表创建问题
【发布时间】:2021-04-23 03:25:01
【问题描述】:

在 DB2 LUW 版本 11.x 中,数据库实例的我的页面大小为 8k。

我正在尝试创建数据类型长度为 varchar(32000) 的表。

它向我抛出错误 DB2 SQL 错误:SQLCODE=-670, SQLSTATE=54010, SQLERRMC=32677;;65813

我是否需要增加页面大小或任何其他数据库配置

【问题讨论】:

    标签: db2


    【解决方案1】:

    您可以使用extended_row_sz 数据库参数来允许在您当前的表空间中创建这样的表。

    SELECT VALUE FROM SYSIBMADM.DBCFG WHERE NAME = 'extended_row_sz';
    
    |VALUE |
    |------|
    |ENABLE|
    
    SELECT PAGESIZE FROM SYSCAT.TABLESPACES WHERE TBSPACE='USERSPACE1';
    
    |PAGESIZE|
    |--------|
    |8192    |
    
    CREATE TABLE TEST_EXTROW (I INT, C VARCHAR(32000)) IN USERSPACE1;
    INSERT INTO TEST_EXTROW (I, C) VALUES (1, 'short'), (2, repeat('long', 7000));
    SELECT LENGTH(C) LEN FROM TEST_EXTROW;
    
    |LEN  |
    |-----|
    |5    |
    |28000|
    

    【讨论】:

    • Mark Ba​​rinstein- DB2 教父
    【解决方案2】:

    没有在实例级别定义页面大小。数据库本身有一个默认页面大小,但页面大小可以在表空间级别设置/覆盖。

    查看CREATE TABLESPACE 并使用相应的PAGESIZE(页面大小32K)并为您的表创建一个新的表空间和缓冲池。

    【讨论】:

    • 没有。这只是意味着您的数据库还没有页面大小为 32KB 的表空间(和匹配的缓冲池)。这很正常。创建这 2 个对象(缓冲池和表空间),然后在新表空间中创建新表。
    • 我可以扩展 EXTENTSIZE 参数吗?目前是 4。它会工作吗?
    • @mao - 在较低的环境中。我的页面大小为 4k,EXTENT SIZE 为 32,但仍在那里创建此表
    • 那么工作环境 either 已经有相关大小的表空间/缓冲池 OR 已经按照 Mark Ba​​rinstein 的回答配置了 extended_row_szextent size 不相关。
    猜你喜欢
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    相关资源
    最近更新 更多