gpt4 book ai didi

c# - 将数据从 Oracle Server 复制到 SQL Server

转载 作者:行者123 更新时间:2023-11-30 23:11:38 24 4
gpt4 key购买 nike

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

来自 Oracle 数据库表(我们称之为 Oracle_Source)的数据将用于追加到历史表(称之为 SQL_History),也用于追加新建/更新匹配/删除事件表中缺失的行(调用此 SQL_Live)。两种类型的数据库位于不同的服务器上,但两个 SQL 表位于同一个 DB 上。

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

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

  2. 使用上述方法中更有效的方法,同时处理两个 SQL 表或将数据复制到 SQL_History 表中然后使用它来 APPEND 会更快吗/UPDATE/DELETE 来自 SQL_Live 表?

  3. 我是不是完全错了?

我们也非常感谢任何其他可用的建议。

最佳答案

正确的问题是“复制表格的快速方法是什么?”在您的特定情况下,有 2 个不同的服务器和一个“大”表要复制,您可能会受到网络 IO 的限制。

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

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

根据我的经验,批量复制比高效的 INSERT、UPDATE 和 DELETE 更快,因为数据库不计算键也不检查重复行。

更好的解释:

  1. 您截断了所有数据
  2. 禁用键
  3. 所有行的大量 INSERT 和
  4. 重新启用键。

这是复制表格的更快方法,但如果您的通信来自网络速度较低的不同服务器,则这不是最佳选择。显然,最佳选择取决于您的基础架构和表维度

例如:

  • 如果你有一台服务器在你的局域网上,第二台服务器在云端,瓶颈就在互联网连接的速度上,你必须更加注意高效的通信(更少的字节)。
  • 如果两台服务器都在您的 LAN 上并具有两个千兆位连接,则整个网络通信可能约为 100mb,您可以使用简单的移动所有表格行而不会头疼。

关于c# - 将数据从 Oracle Server 复制到 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44584565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com