Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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
C# 使用C从Oracle提取到SQL Server的转换负载#_C#_Oracle_Sql Server 2005_Parallel Processing_Etl - Fatal编程技术网

C# 使用C从Oracle提取到SQL Server的转换负载#

C# 使用C从Oracle提取到SQL Server的转换负载#,c#,oracle,sql-server-2005,parallel-processing,etl,C#,Oracle,Sql Server 2005,Parallel Processing,Etl,我在附近闲逛了几天,发现社区很棒!我相信有人会对我的问题发表意见: 我们在Oracle服务器中有原始数据,我们的查询获取大约312MB的数据(只是我们需要跨多个表连接的列)。这是通过使用大约3.9 MB的Oracle.DataAccess.Client实现的。我目前正在使用OracleDataReader,并在他的while()循环中进行处理 然后使用准备好的参数化IF EXISTS()UPDATE ELSE INSERT写入处理结果。从这个数据库中,我们可以在加入维度表后直接在Excel中返回

我在附近闲逛了几天,发现社区很棒!我相信有人会对我的问题发表意见:

我们在Oracle服务器中有原始数据,我们的查询获取大约312MB的数据(只是我们需要跨多个表连接的列)。这是通过使用大约3.9 MB的
Oracle.DataAccess.Client
实现的。我目前正在使用
OracleDataReader
,并在他的
while()
循环中进行处理

然后使用准备好的参数化
IF EXISTS()UPDATE ELSE INSERT
写入处理结果。从这个数据库中,我们可以在加入维度表后直接在Excel中返回所需的数据

我正在寻找提高性能的方法。是否可以多线程
批量插入
s和
更新
s,也可以多线程处理行(比如启动4个线程并在它们之间平均划分输入行),SQL Server 2005中是否存在类似
批量更新
的功能

我不是在寻找复制粘贴代码,我更感兴趣的是已有的最佳实践或模式


非常感谢,

我不确定在线程之间划分传入行会得到什么好处,因为它们都必须插入到同一个目标表中。在数据库中插入很可能是瓶颈,客户端上的多个线程可能最终会互相等待

我通常的方法是使用SqlBulkCopy从OracleDataReader读取行,并将它们插入到目标数据库中的空暂存表中


然后分批处理暂存表,并向上插入到目标表中。每个批处理都将是一个事务。

我假设
OracleDataReader
实现了
IDataReader
,但这是否意味着我必须在SQL中进行所有数据转换?或者我可以通过某种方式重载OracleDataReader,使其返回已计算的列吗+感谢您告诉我有关
SqlBulkCopy
MERGE
的信息!是的,这意味着您需要在SQL中进行转换,例如在Oracle查询中。如果您不能做到这一点,另一种方法可能是围绕OracleDataReader编写您自己的包装器类,该类实现IDataReader并执行您想要的转换。谢谢你的建议,我接受答案!