将数据从Oracle Server复制到SQL Server

时间:2017-06-16 08:35:09

标签: c# sql sql-server vb.net oracle

我对编码很陌生,我希望每天复制47列,包括c300,000行数据,从Oracle到SQL数据库。代码将存储为Windows服务,每天在同一时间运行(或更有可能在晚上运行)。

来自Oracle DB表的数据(让我们将其称为Oracle_Source)将用于附加到历史表(称为SQL_History)并附加新/更新匹配/删除实时表中缺少的行(调用此SQL_Live)。这两种类型的数据库位于不同的服务器上,但这两个SQL表位于同一个数据库中。

关于解决此问题的最佳方法,我有几个问题。

  1. 使用VB / C#,循环遍历Oracle_Source的行(1对1或批量为100/1000 /等)并插入/更新SQL_History / { {1}}或者一次性复制SQL_Live的整个表并插入到SQL表中?以前我使用循环将数据下载到Oracle_Source

  2. 使用上述方法中更有效的方法,同时处理两个SQL表会更快或将数据复制到.csv表中,然后将其用于SQL_History / {来自APPEND表格的{1}} / UPDATE

  3. 我接近这个完全错了吗?

  4. 我们非常感谢任何其他建议。

1 个答案:

答案 0 :(得分:2)

正确的问题是“复制桌子的快捷方式是什么?” 在您的特定情况下,使用2个不同的服务器和要复制的“大”表,您可能受到网络IO的限制。

因此,第一点是仅更新必须更新的行(更新/插入/删除),因此移动的字节更少。

要回答您的第一点,您必须在写入阶段使用事务来提高sql server的速度。事务的维度取决于差异因素(db,machine,...),但我通常使用500/1000简单命令进行事务处理。根据我的个人经验,如果您使用INSERT包含更多行,则可以为INSERT发送500行而不会出现性能问题。

根据我的经验,批量复制比有效的INSERT,UPDATE和DELETE更快,因为db不计算密钥而不检查重复的行。

更好的解释:

  1. 您截止所有数据
  2. 禁用密钥
  3. 所有行的大量INSERT和
  4. 重新启用密钥。
  5. 这是复制表格的更快捷方式,但如果您的通信来自网络速度较慢的其他服务器,则这不是最佳选择。 显然,最佳选择取决于您的基础架构和表维度

    例如:

    • 如果您的局域网有一台服务器,云端有第二台服务器,那么瓶颈就是互联网连接的速度,您必须更加注意有效沟通(减少字节)。
    • 如果两个服务器都在你的局域网上,并且有两个千兆位连接,那么整个网络通信可能大约为100mb,你可以轻松地移动所有表行而不会头痛。