公司用的ERP后台是Progress数据库,Sqlserver无法直接读取该数据库。只能用Access的ODBC把数据从Progress 用计划任务夜间下载下来。然后再把Access数据用foxtable同步到SqlServer中。大概有十几张表,少的数据5-6万行,多的有200万行。
思路是把Access的表import到foxtable中,然后用sqlbulkcopy上传到Sqlserver,上传结束后,删除foxTable中导入的表,循环导入下张表。带度还是蛮快的。但有一个问题无法解决,发现foxTable占用的内存越来越大,多达1G多,删除导入的表后,再用gc.collect也没有用。不知道有没有什么更好的方法。
-- generated on 2017-12-19 00:50:04
2017-12-19 00:50:04 执行导入前SQL语句: EXEC proc_sqlBefore_syncData
-- generated on 2017-12-19 00:50:04
2017-12-19 00:50:04 开始读取数据源中的BOM_usage_tbl_new表
2017-12-19 00:50:15 数据源中的BOM_usage_tbl_new 表读取完成, 共289605条记录, 耗时 10.6362913秒
2017-12-19 00:50:17 完成写入目标数据库中的rbcBom表, 耗时 2.3020035秒
-- generated on 2017-12-19 00:50:18
2017-12-19 00:50:18 开始读取数据源中的ld_det表
2017-12-19 00:50:20 数据源中的ld_det 表读取完成, 共24847条记录, 耗时 2.4214889秒
2017-12-19 00:50:21 完成写入目标数据库中的stkDet表, 耗时 0.4407661秒
-- generated on 2017-12-19 00:50:22
2017-12-19 00:50:22 开始读取数据源中的mrp_det表
2017-12-19 00:50:26 数据源中的mrp_det 表读取完成, 共81506条记录, 耗时 4.4119058秒
2017-12-19 00:50:27 完成写入目标数据库中的moDemand表, 耗时 1.1707972秒
-- generated on 2017-12-19 00:50:28
2017-12-19 00:50:28 开始读取数据源中的openPO表
2017-12-19 00:50:29 数据源中的openPO 表读取完成, 共2828条记录, 耗时 0.6403498秒
2017-12-19 00:50:29 完成写入目标数据库中的qadOpenPO表, 耗时 0.060521秒
-- generated on 2017-12-19 00:50:30
2017-12-19 00:50:30 开始读取数据源中的psmstr1表
2017-12-19 00:50:39 数据源中的psmstr1 表读取完成, 共248986条记录, 耗时 9.4762974秒
2017-12-19 00:50:41 完成写入目标数据库中的psMstr表, 耗时 2.131464秒
-- generated on 2017-12-19 00:50:42
2017-12-19 00:50:42 开始读取数据源中的psmstr2表
2017-12-19 00:50:52 数据源中的psmstr2 表读取完成, 共215596条记录, 耗时 9.3853046秒
2017-12-19 00:50:54 完成写入目标数据库中的psMstr表, 耗时 1.7618462秒
-- generated on 2017-12-19 00:50:55
2017-12-19 00:50:55 开始读取数据源中的psmstr3表
2017-12-19 00:51:05 数据源中的psmstr3 表读取完成, 共231252条记录, 耗时 10.2979805秒
2017-12-19 00:51:07 完成写入目标数据库中的psMstr表, 耗时 2.0610042秒
-- generated on 2017-12-19 00:51:09
2017-12-19 00:51:09 开始读取数据源中的psmstr4表
2017-12-19 00:51:19 数据源中的psmstr4 表读取完成, 共227069条记录, 耗时 10.4679775秒
2017-12-19 00:51:21 完成写入目标数据库中的psMstr表, 耗时 1.9615127秒
-- generated on 2017-12-19 00:51:23
2017-12-19 00:51:23 开始读取数据源中的psmstr5表
2017-12-19 00:51:29 数据源中的psmstr5 表读取完成, 共144076条记录, 耗时 5.7833423秒
2017-12-19 00:51:30 完成写入目标数据库中的psMstr表, 耗时 1.2105572秒
-- generated on 2017-12-19 00:51:31
2017-12-19 00:51:31 开始读取数据源中的pt_mstr表
2017-12-19 00:51:35 数据源中的pt_mstr 表读取完成, 共58737条记录, 耗时 3.8414675秒
2017-12-19 00:51:36 完成写入目标数据库中的ptMstr表, 耗时 0.8402505秒
-- generated on 2017-12-19 00:51:38
2017-12-19 00:51:38 开始读取数据源中的rps_mstr表
2017-12-19 00:51:39 数据源中的rps_mstr 表读取完成, 共3065条记录, 耗时 0.77098秒
2017-12-19 00:51:39 完成写入目标数据库中的moMstr表, 耗时 0.0500079秒
-- generated on 2017-12-19 00:51:41
2017-12-19 00:51:41 开始读取数据源中的rpsHist表
2017-12-19 00:51:41 数据源中的rpsHist 表读取完成, 共3065条记录, 耗时 0.7543039秒
2017-12-19 00:51:42 完成写入目标数据库中的rpsHist表, 耗时 0.1365967秒
-- generated on 2017-12-19 00:51:44
2017-12-19 00:51:44 开始读取数据源中的vdmstr表
2017-12-19 00:51:45 数据源中的vdmstr 表读取完成, 共2336条记录, 耗时 0.660353秒
2017-12-19 00:51:45 写入目标数据库中的vdMstr表发生异常
Cannot insert the value NULL into column 'vdValid', table 'LeanAMD.dbo.vdMstr'; column does not allow nulls. INSERT fails.
The statement has been terminated.
-- generated on 2017-12-19 00:52:01
2017-12-19 00:52:01 执行导入后SQL语句: EXEC proc_sqlAfter_syncData