2016-02-04 24 views
2

每隔几个小时,我需要删除表中的几千条记录,然后立即插入几千条记录来替换已删除的记录。偶尔会有应用程序读取这些数据。我不希望这些应用程序执行表读取操作并获取一些旧记录以及一些新的记录,而且我不希望这些应用程序在所有记录插入之前都读取过。进行大量的表更改,似乎同时发生

我想从我的C#代码中删除和插入。我会将它们合并成一个“Begin”和“End”块,并将它们一次全部发送给Oracle ...除非它的大小可以超过100k。这似乎太大了。所以在下一个循环中运行多个语句似乎是我的最佳选择。但似乎会导致我的表在循环运行时拥有部分旧数据和部分新数据。这是我需要避免的。

我该如何执行删除操作和后续插入操作,以便它们看起来像是在读取表格的应用程序中同时发生的,因此可以避免上述不希望发生的问题?

+1

一笔巨额交易? – jarlh

+0

首先在SP中执行此操作,而不是使用C#代码,并且事务似乎是正确的方法...您可以在删除和插入完成时执行事务 – Viru

+0

您是否计时了100k加上发送时间来查看需要多长时间? – Paddy

回答

3

执行快速切换的一种方法是将数据插入临时表中,启动事务并从该表执行INSERTMERGE到主表。

这样,时间敏感的操作由RDBMS引擎自己完成,并且将数据非时间敏感地插入临时表中不会影响切换时间。

+0

优秀的建议!这似乎比尝试创建一个100k +大小的单个开始/结束块更好。这是我打算使用的解决方案。谢谢! –

相关问题