我对编码很陌生,我希望每天复制47列,包括c300,000行数据,从Oracle到SQL数据库。代码将存储为Windows服务,每天在同一时间运行(或更有可能在晚上运行)。
来自Oracle DB表的数据(让我们将其称为Oracle_Source
)将用于附加到历史表(称为SQL_History
)并附加新/更新匹配/删除实时表中缺少的行(调用此SQL_Live
)。这两种类型的数据库位于不同的服务器上,但这两个SQL表位于同一个数据库中。
关于解决此问题的最佳方法,我有几个问题。
使用VB / C#,循环遍历Oracle_Source
的行(1对1或批量为100/1000 /等)并插入/更新SQL_History
/ { {1}}或者一次性复制SQL_Live
的整个表并插入到SQL表中?以前我使用循环将数据下载到Oracle_Source
。
使用上述方法中更有效的方法,同时处理两个SQL表会更快或将数据复制到.csv
表中,然后将其用于SQL_History
/ {来自APPEND
表格的{1}} / UPDATE
我接近这个完全错了吗?
我们非常感谢任何其他建议。
答案 0 :(得分:2)
正确的问题是“复制桌子的快捷方式是什么?” 在您的特定情况下,使用2个不同的服务器和要复制的“大”表,您可能受到网络IO的限制。
因此,第一点是仅更新必须更新的行(更新/插入/删除),因此移动的字节更少。
要回答您的第一点,您必须在写入阶段使用事务来提高sql server的速度。事务的维度取决于差异因素(db,machine,...),但我通常使用500/1000简单命令进行事务处理。根据我的个人经验,如果您使用INSERT包含更多行,则可以为INSERT发送500行而不会出现性能问题。
根据我的经验,批量复制比有效的INSERT,UPDATE和DELETE更快,因为db不计算密钥而不检查重复的行。
更好的解释:
这是复制表格的更快捷方式,但如果您的通信来自网络速度较慢的其他服务器,则这不是最佳选择。 显然,最佳选择取决于您的基础架构和表维度
例如: