我需要在 DB2 数据库中的表上加载大量数据。我在使用 SQLSetStmtAttr 函数用 C 编写的表上使用 CLI 加载模式。Select 语句在设置时不起作用(表被锁定)。
当数据加载完成时,我正在关闭加载模式。之后,该表变得可访问,以便我可以从 db2 命令行工具(或控制中心)执行选择。
但问题是我的 C 程序在关闭加载模式之前崩溃或失败。该表始终处于锁定状态。我必须删除表,所有以前的数据都丢失了。
我的问题是是否有办法恢复表?
我需要在 DB2 数据库中的表上加载大量数据。我在使用 SQLSetStmtAttr 函数用 C 编写的表上使用 CLI 加载模式。Select 语句在设置时不起作用(表被锁定)。
当数据加载完成时,我正在关闭加载模式。之后,该表变得可访问,以便我可以从 db2 命令行工具(或控制中心)执行选择。
但问题是我的 C 程序在关闭加载模式之前崩溃或失败。该表始终处于锁定状态。我必须删除表,所有以前的数据都丢失了。
我的问题是是否有办法恢复表?
DBMS 文档是您的朋友。您可以阅读(或任何其他错误!)的描述以SQL0668N
了解原因代码 3 的含义以及如何修复它。
基本上,当 LOAD 操作失败时,您需要对表执行一些清理——要么restart
或terminate
它。这可以使用程序外部的 LOAD 实用程序来完成(例如,LOAD from /dev/null of del TERMINATE into yourtable
不可恢复),但您也可以通过编程方式完成。
通常,您将使用db2Load()
API执行此操作,并使用相同的 RESTART 或 TERMINATE 操作 设置您传递给piLongActionString
的参数的成员。db2LoadStruct
db2Load()
看起来您也可以在使用 CLI 加载时将SQL_ATTR_LOAD_INFO
语句设置为相同db2LoadStruct
,但我不确定这是否真的可以完成加载重新启动/终止。