从 Data Studio 访问 RESTORE 数据库

Accesing a RESTORED db from Data Studio

我已经将数据库从 db2 express-c 11.1 版本恢复到 db2 开发人员版本。我可以从 db2 cmd 访问表和数据,但是当我在 IBM DATA Studio 中尝试访问 tables/view/... 时收到以下错误消息。

com.ibm.db2.jcc.am.SqlException: DB2 SQL Error: SQLCODE=-20249, SQLSTATE=     , SQLERRMC=NULLID.SYSSH200, DRIVER=3.69.56
at com.ibm.db2.jcc.am.gd.a(Unknown Source)
at com.ibm.db2.jcc.am.gd.a(Unknown Source)
at com.ibm.db2.jcc.am.gd.a(Unknown Source)
at com.ibm.db2.jcc.am.yo.c(Unknown Source)
at com.ibm.db2.jcc.t4.bb.p(Unknown Source)
at com.ibm.db2.jcc.t4.bb.h(Unknown Source)
at com.ibm.db2.jcc.t4.bb.b(Unknown Source)
at com.ibm.db2.jcc.t4.p.a(Unknown Source)
at com.ibm.db2.jcc.t4.vb.i(Unknown Source)
at com.ibm.db2.jcc.am.yo.ib(Unknown Source)
at com.ibm.db2.jcc.am.yo.a(Unknown Source)
at com.ibm.db2.jcc.am.yo.a(Unknown Source)
at com.ibm.db2.jcc.am.yo.executeQuery(Unknown Source)
at org.eclipse.datatools.connectivity.sqm.internal.core.connection.StatementAdapter.executeQuery(Unknown Source)
at com.ibm.datatools.internal.core.prs.PRSDatabaseLoader.processQuery(Unknown Source)
at com.ibm.datatools.internal.core.prs.PRSDatabaseLoader.initiateQuery(Unknown Source)
at com.ibm.datatools.internal.core.prs.PRSQueryInfo.getSlice(Unknown Source)
at com.ibm.datatools.internal.core.util.PersistentQueryCache.getSlice(Unknown Source)
at com.ibm.datatools.internal.core.util.PersistentResultSet.createSlice(Unknown Source)
at com.ibm.datatools.internal.core.util.PersistentResultSet.isClosed(Unknown Source)
at com.ibm.datatools.internal.core.util.PersistentResultSet.checkNotClosed(Unknown Source)
at com.ibm.datatools.internal.core.util.PersistentResultSet.absolute(Unknown Source)
at com.ibm.datatools.internal.core.util.PersistentResultSet.relative(Unknown Source)
at com.ibm.datatools.internal.core.util.PersistentResultSetAdapter.next(Unknown Source)
at com.ibm.datatools.core.db2.luw.load.catalog.LUWCatalogDatabase.loadSchemas(Unknown Source)
at com.ibm.datatools.core.db2.luw.load.catalog.LUWCatalogDatabase.getSchemas(Unknown Source)
at com.ibm.datatools.uom.internal.content.loadmgr.LoadUtility.basicLoad(Unknown Source)
at com.ibm.datatools.uom.internal.content.loadmgr.ChildrenLoader.load(Unknown Source)
at com.ibm.datatools.uom.internal.content.loadmgr.LoadManager$LevelLoader.load(Unknown Source)
at com.ibm.datatools.uom.internal.content.loadmgr.LoadManager$LevelLoader.doWork(Unknown Source)
at com.ibm.datatools.uom.internal.content.loadmgr.LoadManager$LevelLoader.access[=10=](Unknown Source)
at com.ibm.datatools.uom.internal.content.loadmgr.LoadManager$LevelLoader.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

将 Db2-LUW 数据库成功恢复到新的 Db2 实例后,确保将 IBM 提供的所有绑定文件重新绑定到数据库是明智的。

CLI 绑定文件是 Db2 客户端的一部分,确保您的 Db2 客户端 version/fixpack 与 Db2 服务器匹配是明智的。

如果 restore-database 的 Db2 版本或 Db2 修复包与原始数据库不同,则重新绑定 CLI 实用程序是必不可少的。

要重新绑定 CLI 实用程序,请按照 IBM 的重新绑定 CLI 包的说明进行操作 here

另一个有用的 activity 是在 Db2 版本或修复包发生变化时重新验证数据库对象。有一个存储过程,请参阅详细信息 here

注意:如果您的数据库包含 SQL PL 存储过程或 static-SQL 包,那么您可能还需要重新绑定这些包以利用任何Db2 版本差异。有不同的方法可以做到这一点,但一种方法是使用 db2rbind ,这应该只在可以验证结果的 development/testing 环境中完成。

我按照 mao 在这里写的答案,但没有帮助。 有用的是重新绑定所有包,然后重新验证它们。

可以使用以下命令重新绑定所有包:

db2 connect to SAMPLE

db2 -x "select 'REBIND PACKAGE ' || rtrim(pkgschema) || '.' || rtrim(pkgname) || ';' as command from syscat.packages" > rebind.sql

db2 -tvf rebind.sql

Post 重新绑定,使用以下系统存储过程重新验证所有对象:

CALL SYSPROC.ADMIN_REVALIDATE_DB_OBJECTS()