我已经在DB2中研究报表数据库了一个月左右,并且已经将其设置为我想要的程度。但是,我注意到我无法解决一些小的矛盾之处。
不太重要,但仍然很烦人: 1)用户声称需要两次登录尝试才能连接,第一次始终失败,第二次成功。 (是否有建议对此进行检查?)
更重要的是: 2)每当我想刷新数据(每夜)时,都会有一个脚本,该脚本会删除然后重新创建所有表。有66个表,每个表的记录范围从10到不到100,000条记录。数据不是很大,要运行全部66个表大约需要2分钟。
问题在于,一旦完成说明,通常至少有3-4个表没有在其中装载任何数据。因此,该表被删除然后创建,但是为空。日志显示该命令已成功完成,如果我独立运行它们,它们会很好地填充。
如果有帮助,则95%的命令只是CAST
函数。
虽然我确定我没有按照推荐的方式进行操作,但是为什么我的许多表格没有填充?命令执行太快了吗?我应该在Create
之后落后于DROP
吗?
(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;
答案 0 :(得分:0)
可以配置DB2来容忍嵌套表表达式中的某些SQL错误。 https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.5.0/com.ibm.data.fluidquery.doc/topics/iiyfqetnint.html
当联合服务器遇到允许的错误时,服务器将允许该错误并继续处理查询的其余部分,而不是为整个查询返回错误。联合服务器返回的结果集可以是部分结果或空结果。
但是,我假设您的REMOTE_DB.TIMESHEET
只是一个昵称,而不是带有嵌套表表达式的视图,因此从源中提取数据时的任何错误都应由DB2来解决。看看db2diag.log可能是解决之道-您甚至可能遇到Db2问题。
将您的脚本分别更改为TRUNCATE
和INSERT
到本地表中,看看是否有帮助避免该问题。
正如您所说,您可能没有以最有效的方式做事。您可以考虑使用缓存表定期复制远程数据https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.5.0/com.ibm.data.fluidquery.doc/topics/iiyvfed_tuning_cachetbls.html