试在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-获取找不到页面大小至少为该授权ID的页面大小为“ 8192”的默认表空间已授权使用“ ***”,但这似乎无济于事。

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

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


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;

 

好答案,谢谢。我没有意识到永久和临时表空间之间没有区别。我在创建临时表空间的语法上有些挣扎,请给我一个例子吗?我正在尝试以下“通过自动存储创建用户临时表空间usr_tbsp”;但是在使用上下文时会引发关于“不支持系统管理”的错误。我不确定为什么在指定自动存储时为什么要尝试使用系统管理。