尝试在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表空间,并按照以下问题DB2- Getting A default table space could not be found with a page size of at least "8192" that authorization ID "***" is authorized to use的描述向db2inst1用户授予访问权限,但这似乎无济于事。
如果有人能给我任何关于为什么发生这种情况以及如何解决它的见解,将不胜感激。
这是否可能是基于权限的问题? db2inst1是安装时创建的默认用户,因此我认为它具有数据库管理权限。
答案 0 :(得分:0)
只能在与常规表空间不同的某种类型的表空间中创建CGTT(全局临时表)。
以db2inst1用户身份运行时使用syntax 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;