我已经阅读了一些/很多东西,但它们似乎没什么帮助。
我有一个应用程序(它被称为“TieUp”,但这是无关紧要的)我每天手动运行它来整理来自多个位置的数据。
它用作来源:
A)来自远程SOAP源的数据,并通过XMLtransform设置加载到内存中的TClientDataset中。
B)每天下载CSV文件并加载到内存中的TClientDataset
C)与程序在同一台计算机上的Mysql数据库(它是实时源的恢复备份)
D)远程MS-SQL(SQLServer 2008)数据库
E)远程服务器上的Mysql数据库
仅从源A,B,C和D读取数据 数据源E使用合并数据进行更新。
每天有800到2000个记录,因此虽然目标(E)已经增长到150,000左右并且每天都在增加,但数据集并不大。
我通常可以愉快地运行这一切,并且一切都按预期工作,如果因为对MS-SQL系统的所有单独远程查找而稍微缓慢一些,但是有些日子它真的搞砸了,错误总是“灾难性的失败!”
在我能看到的任何特定阶段或操作期间都不会发生故障。步骤是:
1)首先获取SOAP(A)数据。
2)使用CSV / In Memory数据(B)。
3)查找引用源C和D的数据以进行整理
4)将合并数据写入源E
在将数据读入内存数据集之后,每件事都是在TClientDatasets中通过链接到TSQLQueries的数据集提供者进行访问(它们目前都在相同的服务器上,但我这样做是为了保持一定的灵活性,以便它可能会成为现实三层)。所有查询都包含在SQLQuery组件中,因为它们实际上非常简单 - 这只是将事物捆绑在一起的问题。
我使用的是Delphi 2009 Enterprise中完全标准的组件。已应用所有更新和数据库更新包。每个数据源都有自己的DataModule,它们是在启动时自动创建的
显然有很多数据访问在这里,但是当它崩溃时(灾难性的失败)它会卡住,完全卡住。 Windows无法从正常的“TieUp已停止工作”结束任务我必须进入该过程并将其杀死。
有很多事情发生,因为这只发生一周一次左右我真的不知道从哪里开始寻找。
提出这个问题的原因有两个:1)是我试图消除任何手动的东西并完全自动化,但如果每周都有炸弹,我就不能依赖它。 2)如果它发生在E的更新阶段 - 我必须手动删除当天的新记录并重新开始,因为我没有(或者还没有写)从随机点重新启动的机制我会仍然必须手动查询数据库以确定该点。
我的下一步是在另一台计算机上安装Delphi并始终在调试器下运行它,直到我能够捕获它,如果它没有先冻结。但这引入了另一种不同的网络连接(而不是本地主机连接)。
所以:“有明确的答案吗?”或者什么是最可能的违规组件/连接?在哪里开始寻找受欢迎的地方?
提前致谢...