关于SQL2000到oracle链接数据库执行失败的原因

在公司有一个项目,使用SQL2000作为中转站,从源数据库服务器(SQL2000) 更新数据到 目标数据库服务器(oracle 10g),使用链接数据库,通过存储过程实现。使用作业定时执行存储过程,在运行了N久之后,突然发现一个作业无法正常执行,另一个则正常运行。很莫名。。。。

错误现象:执行时有时好,有时出错,一般运行数次后就会出错

错误提示多为:

执行用户: sa。OLE DB 提供程序 'SQLOLEDB' 报错。提供程序已用尽内存。 [SQLSTATE 42000](错误 7399)  OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' IRowset::GetNextRows returned 0x8007000e:  提供程序已用尽内存。]。 [SQLSTATE 01000](错误 7300).  步骤失败。

执行用户: sa。OLE DB 提供程序 'MSDAORA' 报错。 [SQLSTATE 42000](错误 7399)   [SQLSTATE 01000](错误 7312)  OLE DB 错误跟踪[OLE/DB Provider 'MSDAORA' IDBInitialize::Initialize returned 0x80004005:   ]。 [SQLSTATE 01000](错误 7300).  步骤失败。

在网上查询了N久,只见问问题的,也偶尔见答问题的,但也许使用该方法的实属少数,没有一个立竿见影的解决方案。

因为找不到相关文档,在尝试了N久,N种方法来测试之后,都一一失败

其中包括,修改注册表使用不同的dll,修改查询语句优化数据查询,建VIEW,增加表主键等偏门的方法,均无效。

最后,在观察存储过程运行过程,及比较两个作业实现上的区别,

其中正常运行的作业因为需要插入数据时做比较更新,使用临时表,结合触发器实现。

而另一个作业由于比较简单,使用直接表数据插入。

然而,正是由于它的简单,导致了莫名错误的出现。

目标表数据量巨大是罪魁祸首,使用批量查询语句是否为帮凶,没有经过测试,但即使插入空数据,使用批量插入语句也会使SQL加载海量数据,不知道原因。

解决方案:在oracle中使用临时表,通过触发器转存数据,而后清空临时表,没有出现SQL服务器加载海量数据,大量消耗内存的情况。

 

你可能感兴趣的:(sql2000)