运行 批处理时未加载 DB2 表
DB2 Tables Not Loading when run in Batch
我已经在 DB2 中使用报告数据库工作了一个月左右,并且我已将其设置到我想要的相当不错的程度。然而,我注意到我无法解决的小矛盾。
不太重要,但仍然很烦人:
1) 用户声称需要两次登录尝试才能连接,第一次总是失败,第二次总是成功。 (是否有针对此检查内容的建议?)
更重要的是:
2) 每当我想刷新数据(每晚)时,我都有一个脚本可以删除然后重新创建所有 table。共有 66 个 table,每个记录的范围从 10 条记录到不到 100,000 条记录。数据量不大,运行 全部 66 table 大约需要 2 分钟。
问题是,一旦它说完成,通常至少有 3-4 tables 没有加载任何数据。所以 table 被删除然后创建,但是是空的。日志显示该命令已成功完成,如果我 运行 它们独立地填充它们就好了。
如果有帮助,95% 的命令只是 CAST
函数。
虽然我确定我没有按照推荐的方式进行操作,但我的一些 table 没有填充是有原因的吗?命令是否执行得太快?我应该在 DROP
之后滞后 Create
吗?
(This is DB2 Express-C 11.1 on Windows 2012 R2, The source DB is remote)
我的例子SQL:
DROP TABLE TEST.TIMESHEET;
CREATE TABLE TEST.TIMESHEET AS (
SELECT NAME00, CAST(TIMESHEET_ID AS INTEGER(34))TIMESHEET_ID ....
..(再增加 5-50 列)
FROM REMOTE_DB.TIMESHEET
)WITH DATA;
可以将 DB2 配置为容忍嵌套 table 表达式中的某些 SQL 错误。
https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.5.0/com.ibm.data.fluidquery.doc/topics/iiyfqetnint.html
When the federated server encounters an allowable error, the server allows the error and continues processing the remainder of the query rather than returning an error for the entire query. The result set that the federated server returns can be a partial or an empty result.
但是,我假设您的 REMOTE_DB.TIMESHEET
只是一个昵称,而不是具有嵌套 table 表达式的视图,因此从源中提取数据时出现的任何错误都应该由 DB2 发现。查看 db2diag.log 可能是正确的方法 - 您甚至可能遇到 Db2 问题。
将您的脚本更改为 TRUNCATE
和 INSERT
到您的本地 table 中可能会有用,看看是否有助于避免该问题。
正如您所说,您可能没有以最有效的方式做事。您可以考虑使用缓存 tables 来定期复制您的远程数据 https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.5.0/com.ibm.data.fluidquery.doc/topics/iiyvfed_tuning_cachetbls.html
我已经在 DB2 中使用报告数据库工作了一个月左右,并且我已将其设置到我想要的相当不错的程度。然而,我注意到我无法解决的小矛盾。
不太重要,但仍然很烦人: 1) 用户声称需要两次登录尝试才能连接,第一次总是失败,第二次总是成功。 (是否有针对此检查内容的建议?)
更重要的是: 2) 每当我想刷新数据(每晚)时,我都有一个脚本可以删除然后重新创建所有 table。共有 66 个 table,每个记录的范围从 10 条记录到不到 100,000 条记录。数据量不大,运行 全部 66 table 大约需要 2 分钟。
问题是,一旦它说完成,通常至少有 3-4 tables 没有加载任何数据。所以 table 被删除然后创建,但是是空的。日志显示该命令已成功完成,如果我 运行 它们独立地填充它们就好了。
如果有帮助,95% 的命令只是 CAST
函数。
虽然我确定我没有按照推荐的方式进行操作,但我的一些 table 没有填充是有原因的吗?命令是否执行得太快?我应该在 DROP
之后滞后 Create
吗?
(This is DB2 Express-C 11.1 on Windows 2012 R2, The source DB is remote)
我的例子SQL:
DROP TABLE TEST.TIMESHEET;
CREATE TABLE TEST.TIMESHEET AS (
SELECT NAME00, CAST(TIMESHEET_ID AS INTEGER(34))TIMESHEET_ID ....
..(再增加 5-50 列)
FROM REMOTE_DB.TIMESHEET
)WITH DATA;
可以将 DB2 配置为容忍嵌套 table 表达式中的某些 SQL 错误。 https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.5.0/com.ibm.data.fluidquery.doc/topics/iiyfqetnint.html
When the federated server encounters an allowable error, the server allows the error and continues processing the remainder of the query rather than returning an error for the entire query. The result set that the federated server returns can be a partial or an empty result.
但是,我假设您的 REMOTE_DB.TIMESHEET
只是一个昵称,而不是具有嵌套 table 表达式的视图,因此从源中提取数据时出现的任何错误都应该由 DB2 发现。查看 db2diag.log 可能是正确的方法 - 您甚至可能遇到 Db2 问题。
将您的脚本更改为 TRUNCATE
和 INSERT
到您的本地 table 中可能会有用,看看是否有助于避免该问题。
正如您所说,您可能没有以最有效的方式做事。您可以考虑使用缓存 tables 来定期复制您的远程数据 https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.5.0/com.ibm.data.fluidquery.doc/topics/iiyvfed_tuning_cachetbls.html