Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSIS—使用ForEachLoop中的SQL Server数据迭代到Oracle后端的数据流,并将结果插入SQL Server_Oracle_Ssis - Fatal编程技术网

SSIS—使用ForEachLoop中的SQL Server数据迭代到Oracle后端的数据流,并将结果插入SQL Server

SSIS—使用ForEachLoop中的SQL Server数据迭代到Oracle后端的数据流,并将结果插入SQL Server,oracle,ssis,Oracle,Ssis,嘿,有经验的SSIS开发人员,我需要你的帮助 高层次要求 在与我的SSIS服务器不同的服务器上查询SQL Server表,结果集约为200-300k条记录。 每行使用三个输出列来查找Oracle数据库中的日期。 使用结果插入或更新SQL Server表。 使用SSI。 SQL Server 2008 听起来很简单,对吧 以下是我所做的: 在从SQL Server获取记录集的控制流执行SQL任务上创建。非常快速、简单的查询,如从条件>0的表中选择字段1、字段2、字段3。就这样。不到一秒钟 创建了一

嘿,有经验的SSIS开发人员,我需要你的帮助

高层次要求

在与我的SSIS服务器不同的服务器上查询SQL Server表,结果集约为200-300k条记录。 每行使用三个输出列来查找Oracle数据库中的日期。 使用结果插入或更新SQL Server表。 使用SSI。 SQL Server 2008 听起来很简单,对吧

以下是我所做的:

在从SQL Server获取记录集的控制流执行SQL任务上创建。非常快速、简单的查询,如从条件>0的表中选择字段1、字段2、字段3。就这样。不到一秒钟

创建了一个变量,该变量作为Oracle查询的表达式计算,该查询使用WHERE子句中上述结果集

创建了一个ForEachLoop容器,该容器为记录集中的每一行获取上面1中的结果,并通过数据流运行它,该数据流使用上面2中的Oracle查询,数据访问模式为:SQL命令from variable针对Oracle数据源。快速、简单的查询,只返回大约6列

数据转换-显而易见的原因-将3列从Oracle数据类型更改为SQL Server数据类型

要使用快速加载到临时表插入到SQL Server的OLE DB目标

它工作得很好!好极了坏消息-它非常非常慢。当我说慢,我的意思是它每小时处理3000条记录。天哪,莫利,太慢了

问:我是否错过了一个加速的方法?似乎ForEachLoop容器是瓶颈。咆哮

要点: -我在Oracle环境中没有写访问权限,所以不要建议需要它的潜在解决方案。不可能。一点也不

Oracle源不允许直接定义参数。因此,没有从表WHERE?中选择字段?。别提了,这不管用。 想法 -我是否应该找到一种方法来分解executesql任务的结果,并通过几个ForEachLoop容器将其发送,以加快处理速度

还有其他更合适的设计吗

有没有一个脚本我可以用得更快

在内存中创建一个临时表并填充它,然后使用结果大容量插入SQL Server会更快吗?这在使用Oracle数据源时是否有效

还有其他想法吗


恐怕我不太懂1、2和3。查询针对SQL Server表运行,并基于该表的结果生成Oracle源的唯一查询。此外,在包中花费的时间在哪里?启用日志记录,使用SQL Server OLE DB连接并记录OnPreExecute和OnPostExecute事件。这样你就可以知道时间花在哪里了。有一个更好的提问方式。如果您有我的需求,您将如何解决SSIS中的问题?使用SQL Server数据库表中的数据与Oracle数据库中的大型数据源碰撞,并记录/记录匹配/结果?这段时间花在了遍历Oracle数据和插入临时表上。我不理解您的要求,所以我不能说最好的方法是什么。我相信你心里清楚你的需求是什么,但不熟悉你的环境和最终目标,很难提供意见。使用查找组件,而不是为每个组件使用查找组件。2.本地复制Oracle表并执行更新如果您有存储表的空间,这可能是最快的。尝试这些方法并发回任何问题。这将使我们更清楚地了解您的要求。