DB2单表排序查询报错分析及解决办法

本文介绍了在DB2环境中遇到单表排序查询报错SQL1585N的问题,详细分析了报错原因,涉及数据库参数EXTENDED_ROW_SZ,并通过模拟操作展示了如何复现该问题。解决办法是创建一个系统临时表空间,其pagesize大于行数据定义长度,以支持extend_row_sz特性。
摘要由CSDN通过智能技术生成

墨墨导读:客户DB2环境对单表的排序查询报错SQL1585N,本文模拟此报错并进行说明。

1. 报错如下

SQL1585N  A temporary table could not be created because there is no available 
system temporary table space that has a compatible page size.  SQLSTATE=54048

2. 报错可能原因

*  The row length of the system temporary table being generated is
   larger than can be accommodated by the system temporary table space
   with the largest page size that is currently in "normal" state.


*  The number of columns required in a system temporary table exceeded
   the limit that can be accommodated in the largest system temporary
   table space in the database.


*  A tablespace might be offline.


翻译:
* 正在生成的系统临时表的行长度大于具有最大页面大小且当前处于"正常"状态的系统临时表空间能够容纳的长度。
* 系统临时表中所需的列数超过了数据库中最大系统临时表空间中可接受的限制。
* 表空间可能已脱机。

3. 报错原因分析

-查看表空间没有脱机,不是此原因
-查看查询的表字段151个字段,少于500个字段(4k的页最多允许500字段),不是此原因
-需要使用的系统临时表空间的pagesize超出了系统临时表的pagesize值,应该是此原因导致;推测和EXTENDED_ROW_SZ参数有关系;EXTENDED_ROW_SZ参数可以允许行长度超过一个pagesize,但是在进行排序时如果超过系统默认表空间的pagesize,可能导致系统临时表空间报错

4. 数据库参数EXTENDED_ROW_SZ说明

数据库参数EXTENDED_ROW_SZ在设置为ENABLE时可以允许创建表时定义的行长度超过一个pagesize;超出部分的数据子集存储为LOB数据;此参数在10.5开始出现,默认是ENABLE;如果从低版本升级过来默认是DISABLE.


5. 模拟报错

5.1 查看表空间

所有表空间的pagesize都是4k

$ db2pd -d enmo -table


Database Member 0 -- Database ENMO -- Active -- Up 0 days 02:05:40 -- Date 2021-02-02-21.30.05.612619


Tablespace Configuration:
Address            Id    Type Content PageSz ExtentSz Auto Prefetch BufID BufIDDisk FSC NumCntrs MaxStripe  LastConsecPg RSE  Name
0x00007FFF82BD5CA0 0     DMS  Regular 4096   4        Yes  4        1     1         Def 1        0          3            Yes  SYSCATSPACE
0x00007FFF82BE2E40 1     SMS  SysTmp  4096   32       Yes  32       1     1         On  1        0          4294967295   No   TEMPSPACE1
0x00007FFF82BEFFE0 2     DMS  Large   4096   32       Yes  32       1     1      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值