【问题标题】:Error while updating DB2 Database table on AS/400 using Business Objects Data Integrator 11.7使用 Business Objects Data Integrator 11.7 在 AS/400 上更新 DB2 数据库表时出错
【发布时间】:2012-11-16 05:06:22
【问题描述】:

我们需要使用 Business Objects Data Integrator 11.7 更新 AS/400 上的 DB2 数据库表中的记录。数据集成器设计器版本为 11.7.3 安装的驱动有iSeries ACCESS ODBC Driver 11.0.2,CLIENT ACCESS ODBC DRIVER 11.0.2

我们能够更新单个记录,但是在进行批量更新时,我们收到以下错误消息,谁能帮忙解决这个问题。

DBS-070401: ODBC DATA SOURCE <xxxx> Error Message for Operation
<SQLExecute>: <[IBM][iSeries Access ODBC Driver]Driver not capable.>
RUN-051005:
Execution of <Regular Load Operations> for target <XXX_XXXX> failed. Possible causes: (1) Error in the SQL syntax; (2) Database
connection is broken; (3) Database related errors such as transaction log is full, etc.; (4) The user defined in the datastore
has insufficient privileges to execute the SQL. If the error is for preload or postload operation, or if it is for regular load
operation and load triggers are defined, please check the SQL. Otherwise, for (3) and (4), please contact your local DBA.

如果 DI 作业的 select Query 仅过滤一条记录,则生成以下更新语句并通过 Data Integrator 执行。在这种情况下,不会显示驱动程序错误。

UPDATE TIBCO_STG.PUB_AREA SET ADB_L_DELIVERY = 'C'   WHERE ADB_SEQUENCE = 22849415 

如果选择查询没有过滤,DI作业会生成以下四个更新SQL,在这个Bulk Records更新上会显示Driver error。

UPDATE TIBCO_STG.PUB_AREA SET ADB_L_DELIVERY = 'C'   WHERE ADB_SEQUENCE = 22849415 
UPDATE TIBCO_STG.PUB_AREA SET ADB_L_DELIVERY = 'C'   WHERE ADB_SEQUENCE = 22849416 
UPDATE TIBCO_STG.PUB_AREA SET ADB_L_DELIVERY = 'C'   WHERE ADB_SEQUENCE = 22849417 
UPDATE TIBCO_STG.PUB_AREA SET ADB_L_DELIVERY = 'C'   WHERE ADB_SEQUENCE = 22849418

【问题讨论】:

  • 你能举一个你试图运行的语句的例子吗?
  • 您检查过 iSeries 上的作业日志以了解 SQL 作业吗?
  • @Jane 谢谢我们已在 Data Integrator 管理控制台中检查了“作业错误日志”。你能告诉我如何检查 iSeries 上的工作日志吗?
  • 您的批量更新似乎包含大量 SQL 语句。没有分号,您是否尝试过重新格式化以将所有序列放在 in 子句中?
  • 您能告诉我们更多有关您的应用程序逻辑流程的信息吗?可能有更好的方法来实现您想要完成的目标。

标签: db2 odbc driver ibm-midrange business-objects


【解决方案1】:

我在您的 UPDATE 语句之间看不到任何分号。

您可能还想考虑其他方法。例如:

UPDATE TIBCO_STG.PUB_AREA 
  SET ADB_L_DELIVERY = 'C' 
  WHERE ADB_SEQUENCE in (22849415, 22849416, 22849417, 22849418)

UPDATE TIBCO_STG.PUB_AREA 
  SET ADB_L_DELIVERY = 'C' 
  WHERE ADB_SEQUENCE in (select seq from someFullSelectOrWorkFile)

如果有某种方法可以将 WHERE 条件编码为 fullSelect,您将能够在单个 SQL 语句中完成此操作。一次设置的处理比一次一行的处理效率高得多。

【讨论】:

  • @Warren..谢谢是的。您是对的,更新语句中没有分号。这些 sql 写在运行作业时由 DI JOB 设置的文件(溢出)上。这些sql默认没有分号,我们使用这个overflow file选项来检查DI作业生成的sql是否正确。当我们收到驱动程序错误时,DI 版本(Business Objects Data Integrator 11.7)使用的 ODBC 驱动程序(iSeries ACCESS ODBC 驱动程序 11.0.2,CLIENT ACCESS ODBC 驱动程序 11.0.2)是否不兼容。数据集成器设计器版本是11.7.3)
  • @JaneT。谢谢 Jane,Records 将从源顺序读取,并将目标更新为多个 sql 请求。
【解决方案2】:

您的驱动程序将成为 IBM i Access for Windows 的一部分。为确保您拥有最新版本,请打开 System i Navigator,然后查看帮助/关于。那里显示的版本应该至少与服务器上的 IBM i OS 版本一样高或更高。更高版本的 IBM i Access 驱动程序应支持至少 2 个先前版本的服务器操作系统。如果您需要更多详细信息,请参阅此compatibility page

目前,IBM i 和 IBM Access for Windows 的最新版本是 7.1。

接下来,请始终确保您已安装 latest service pack

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-11
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多