我需要在DB2数据库的一个表上加载大量数据。我使用SQLSetStmtAttr函数在一个用C编写的表上使用CLI load模式。Select语句在设置时不起作用(表被锁定)。
当数据加载完成后,我将关闭加载模式。之后,表变得可访问,这样我就可以从db2命令行工具(或控制中心)中执行select。
但问题是,当我的C程序在关闭加载模式之前崩溃或失败。该表始终处于锁定状态。我必须删除该表,所有以前的数据都会丢失。
我的问题是,是否有方法恢复表?
发布于 2013-10-03 01:48:08
DBMS文档是您的朋友。您可以read the description of SQL0668N (或任何其他错误!)找出原因代码3的含义,以及如何修复它。
基本上,当加载操作失败时,您需要对表- either restart或terminate执行一些清理。这可以从您的程序外部使用LOAD实用程序来完成(例如,LOAD from /dev/null of del TERMINATE into yourtable不可恢复),但您也可以通过编程来完成此操作。
通常,您可以使用db2Load() API来完成此操作,并通过相同的重新启动或终止操作来设置传递给db2Load()的db2LoadStruct参数的piLongActionString成员。
看起来您也可以在使用CLI Load时将SQL_ATTR_LOAD_INFO语句设置为相同的db2LoadStruct,但我不确定这是否真的能完成加载重新启动/终止。
https://stackoverflow.com/questions/18929690
复制相似问题