将数据加载到远程 DB2 服务器时出错
Posted
技术标签:
【中文标题】将数据加载到远程 DB2 服务器时出错【英文标题】:Error on loading data to remote DB2 server 【发布时间】:2021-05-26 11:51:53 【问题描述】:我是 Db2 的新手。我正在尝试使用基于 Java 的应用程序将数据从远程 Db2 服务器 A 发送到远程 Db2 服务器 B。我能够从服务器 A 获取数据并将其存储在控制/数据文件中;但是当我尝试将数据发送到服务器 B 时,出现以下异常。
com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=EXTERNAL;T_DATA SELECT * FROM;<table_expr>, DRIVER=4.26.14
控制文件有命令:
INSERT INTO <TABLE_NAME> SELECT * FROM EXTERNAL '<PATH_TO_DATAFILE>'
USING (DELIMITER '\t' FORMAT TEXT SOCKETBUFSIZE 100 REMOTESOURCE 'JDBC')
数据文件包含记录,其中每个值由每个记录的制表符分隔。
服务器 A 和 B 都使用 Db2 v9.5
【问题讨论】:
目标 Db2-server 版本是否支持 EXTERNAL 表?编辑您的问题,为目标服务器 B 添加 Db2 平台和 Db2 版本详细信息。 Db2 服务器 B 具有 v9.5。我刚刚读到在 v11.5 中引入了 EXTERNAL。谢谢@mao。知道 v9.5 和/或 v10.5 的 EXTERNAL 的替代方案是什么吗? 【参考方案1】:失败是由于目标服务器 B 是 Db2 (v9.5) 的不支持版本,它没有任何理解外部表的能力。因此,它在它不理解的令牌 EXTERNAL 上(正确地)报告了 sqlcode -104。
因此,对于您站点上可用的 Db2 版本,该设计是不正确的。您只能在最新的 Db2-LUW 版本 (v11.5) 中使用外部表。
根据可用的工具,您可以使用命令(外部工具,而不是 SQL)从源中导出数据,并将其加载到目标中。此外,如果服务器 A 和服务器 B 之间直接存在网络连接,那么管理员可以安排它们之间的联合,从而允许直接插入。
Db2 v9.5 还支持从游标加载和从远程游标加载(虽然存在问题,但在较新版本中早已修复)。
【讨论】:
我是否可以在控制文件中使用任何工具/命令来发送数据文件中的记录。我的 Java 应用程序执行这个控制文件来发送数据。 请提出一个新问题。不要在 cmets 内问后续问题。 我做了一些研究,发现了两种方法——导入和加载。我倾向于 LOAD,因为它对传输批量数据更有用。我正在尝试将 LOAD 命令与 JDBC 一起使用,但不断出现错误。我问了一个单独的问题:***.com/questions/67721450/…以上是关于将数据加载到远程 DB2 服务器时出错的主要内容,如果未能解决你的问题,请参考以下文章
IBM Worklight 6.0.0.1 - 将适配器部署到服务器时出错