首页 > 解决方案 > “找不到页面大小至少为“4096”的表空间,授权标识“DB2INST1”被授权使用。” DB2 中的错误

问题描述

尝试在 Ubuntu 16.04 上的 DB2 (11.1) 中创建临时表时收到以下错误消息:

SQL 错误 [42727]:找不到页面大小至少为“4096”且授权 ID“DB2INST1”被授权使用的表空间。SQLCODE=-286,SQLSTATE=42727,DRIVER=4.24.92

这是我要运行的查询(演示行为的最小示例):

CREATE GLOBAL TEMPORARY TABLE testTbl (col1 int NOT null)

我已尝试使用 8KB 缓冲池创建一个 8KB 表空间并授予 db2inst1 用户对其的访问权限,如以下问题所述:DB2-Getting A default table space could not be found with a page size of at least "8192" that authorization ID "***" 被授权使用,但这似乎没有帮助。

如果有人能给我任何关于为什么会发生这种情况以及如何解决它的见解,我将不胜感激。

这可能是基于权限的问题吗?db2inst1 是安装时创建的默认用户,因此我假设它对数据库具有管理员权限。

标签: db2

解决方案


CGTT(全局临时表)只能在不同于常规表空间的某种类型的表空间中创建。

在以 db2inst1 用户身份运行时使用该语法 create user temporary tablespace ...,并确保在重试 CGTT 之前成功完成。

如果 db2inst1 是您建议的实例所有者,那么它将有权执行此操作。但是,如果要运行 db2inst1 以外的其他帐户,create global temporary table则可能需要授予该帐户对用户临时表空间的 USE 访问权限。

如果您计划使用 DGTT 和 CGTT 对象,那么明智的做法是确保在构建每个数据库时为每个页面大小 4K、8K、16K 和 32K 页面大小创建相关的用户临时表空间,然后确保每个页面大小已经存在缓冲池,然后确保相关帐户和角色具有 USE 访问权限,并考虑撤销对它们的公共访问权限。

例如,这将在 Db2-LUW V11.1 数据库中创建一个 4K 用户临时表空间,并将重新使用默认的 4K 缓冲池,其中许多选项可以省略,但这显示了 db2look 将生成什么,并让您查看可以生成什么被改变:

CREATE USER TEMPORARY TABLESPACE "UTMP4K" 
         PAGESIZE 4096 MANAGED BY AUTOMATIC STORAGE
         USING STOGROUP "IBMSTOGROUP"
         EXTENTSIZE 4
         PREFETCHSIZE AUTOMATIC
         BUFFERPOOL "IBMDEFAULTBP"
         OVERHEAD INHERIT
         TRANSFERRATE INHERIT
         FILE SYSTEM CACHING
         DROPPED TABLE RECOVERY OFF;

推荐阅读