&引用;找不到页面大小至少为“的表空间”;4096“;该授权ID“;DB2INST1“;被授权使用。”;DB2中的错误

&引用;找不到页面大小至少为“的表空间”;4096“;该授权ID“;DB2INST1“;被授权使用。”;DB2中的错误,db2,Db2,在Ubuntu 16.04上尝试在DB2(11.1)中创建临时表时,我收到以下错误消息: SQL错误[42727]:找不到授权ID“DB2INST1”有权使用的页大小至少为“4096”的表空间。。SQLCODE=-286,SQLSTATE=42727,DRIVER=4.24.92 这是我试图运行的查询(演示行为的最小示例): 我尝试过创建一个8KB的表空间,其中包含一个8KB的缓冲池,并向db2inst1用户授予访问权限,如本问题所述:,但这似乎没有帮助 如果有人能告诉我为什么会发生这种情况以及

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

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

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

我尝试过创建一个8KB的表空间,其中包含一个8KB的缓冲池,并向db2inst1用户授予访问权限,如本问题所述:,但这似乎没有帮助

如果有人能告诉我为什么会发生这种情况以及如何解决,我将不胜感激

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

只能在与常规表空间不同的特定类型的表空间中创建CGTT(全局临时表)

以db2inst1用户身份运行时使用
创建用户临时表空间…
,并确保在重试CGTT之前成功完成

如果db2inst1是您建议的实例所有者,那么它将有权这样做。但是,如果与db2inst1不同的帐户想要运行
create global temporary table
,则可能需要授予该帐户对用户临时表空间的使用权限

如果计划使用DGTT和CGTT对象,则明智的做法是确保在每个数据库构建时,在确保每个页面大小已经存在缓冲池后,为每个页面大小4K、8K、16K和32K pagesize创建相关的用户临时表空间,然后确保相关帐户和角色具有use访问权限,并考虑取消对他们的公共访问。< /P> 例如,这将在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”;但它抛出了一个错误,即“由系统管理”在其使用的上下文中不受支持。。当我指定自动存储时,我不确定为什么它试图使用managed by system。感谢再次更新,该示例在ubuntu 16.04上的DB2V11.1上正常工作
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;