2010-06-17 27 views
2

我们有几个系统,在后端有Oracle(A)和SQL Server(B)数据库。我必须将这些系统中的数据整合到新的SQL Server数据库中。集成传输选择(Oracle + SQL Server)

类似的东西:

(A) =>|---------------| 
     | some software | => SQL Server 
(B) =>|---------------| 

其中一些软件是:

  • 传输(位于网络中的A和B系统)

  • 处理业务逻辑(自定义.NET代码)

由于第一点,我需要一些队列软件或类似的东西(如MSMQ,Service Broker或其他)。另一方面,我可以实现一个Web服务而不是队列。

(A) =>|---------------|-------------| 
     | queue/service | custom code | => SQL Server 
(B) =>|---------------|-------------| 

问题是:我应该在Oracle和SQL Server数据库中使用哪个队列/传输框架?

这将是很好,如果我可以张贴在Oracle和SQL Server存储过程消息MSMQ(可以吗?)

这将是很好,如果我可以调用在Oracle web服务和SQL Server存储过程(可以吗?)

这将是很好,如果我能使用的东西在Oracle和SQL Server存储过程类似(究竟是什么?)

我应该喜欢什么软件我要求?

UPD:一些TECHSPEC

这将是一个常规的同步过程。我想每天一次。

延迟并不重要(> 0.5-1小时可以)。

数据量:每个系统同步1-50 MB。

传输时需要加密。

+0

我们在谈论什么量/吞吐量/延迟? – 2010-06-17 15:45:29

+0

这是一次性任务还是需要持续实时发生的事情? – 2010-06-17 16:25:14

+0

Remus Rusanu,David Lively - techspec部分添加 – 2010-06-17 16:26:53

回答

1

我会建议创建一个SSIS包,在调用时将新数据从服务器A,B传输到新服务器。您可以按照每30分钟从新服务器上安排的时间表启动SSIS包。

如果A和B都是SQL Server,那么Service Broker会有意义,以便提供非常低的延迟。但是其中一人是甲骨文,并没有实时要求,因此失去了吸引力。作为一个附注,你可以在这里看到使用Service Broker的例子High volume real time contiguous ETL

以SSIS包的方式进行传输可以方便维护(您可以相对容易地修改包),它不需要对现有系统进行侵入式更改,性能相当高,并且有大量的SSIS知道 - 如何在网上提供。

我会建议不要使用MSMQ有以下几个原因:

  • 时,需要交易的可靠性,你必须所有MSMQ相关的操作涉及到分布式事务MSSMQ出队和SQL服务器插件之间(DTC /在新的服务器上更新),这将减缓处理吞吐量显着
  • 你需要拿出相当几行代码进行编组/解组,并将δgram消息切碎到目标系统中(我知道codding是有趣,但是SSIS在这类工作上更好,并且更容易维护)
  • 每个队列2GB的
  • MSMQ的限制是相当小的现实世界(填满很快,如果你的流量的增加,你有一个停机维护时间)

真正的问题,我会担心的是如何在发现变化A和B:当SSIS工作每30分钟一次时,它如何知道哪些数据是新的?特别是,它如何检测删除...