首页 > 解决方案 > 如何重命名数据库中具有引用完整性维护的表?

问题描述

给出以下命令后

set integrity for table_name off

我收到以下错误

DB2 SQL 错误:SQLCODE: -290, SQLSTATE: 55039, SQLERRMC: null 消息:表空间访问

这可能是什么原因?

我想要实现的是:我想暂时禁用约束,以便我可以重命名实际表并使用实际表名创建一个新表。然后我将启用约束。在这方面的指针的任何帮助将不胜感激。

标签: db2db2-luw

解决方案


set integrity不会“禁用约束”。

根据SET INTEGRITY 语句手册页,set integrity off

指定将表置于设置完整性暂挂状态。在设置完整性暂挂状态的表上只允许非常有限的活动。

当你尝试用约束重命名一个表时,你会得到 SQL0750N,它说:

如果错误与 RENAME 语句有关,请在发出 RENAME 语句之前删除依赖于表的视图、具体化查询表、触发器、SQL 函数、SQL 方法、检查约束、引用约束、基于表达式的索引或 XSR 对象。可以通过查询目录来确定依赖于表的对象。

即你必须删除约束,重命名表,然后重新添加约束。这就是它的工作方式。类似的东西ADMIN_MOVE_TABLE会删除和重新创建所需的约束,但是直到实际物理移动表数据,所以如果你只是想重命名可能不是一个好主意。许多 GUI 收费(例如 IBM Data Studio)将为您生成所需的 DROP、RENAME、CREATE 语句。

您当前遇到的错误SQL0290N Table space access is not allowed是一个不同的问题,并且是由于其他原因造成的。


推荐阅读