2016-02-04 83 views
2

每隔幾個小時,我需要刪除表中的幾千條記錄,然後立即插入幾千條記錄來替換已刪除的記錄。偶爾會有應用程序讀取這些數據。我不希望這些應用程序執行表讀取操作並獲取一些舊記錄以及一些新的記錄,而且我不希望這些應用程序在所有記錄插入之前都讀取過。進行大量的表更改,似乎同時發生

我想從我的C#代碼中刪除和插入。我會將它們合併成一個「Begin」和「End」塊,並將它們一次全部發送給Oracle ...除非它的大小可以超過100k。這似乎太大了。所以在下一個循環中運行多個語句似乎是我的最佳選擇。但似乎會導致我的表在循環運行時擁有部分舊數據和部分新數據。這是我需要避免的。

我該如何執行刪除操作和後續插入操作,以便它們看起來像是在讀取表格的應用程序中同時發生的,因此可以避免上述不希望發生的問題?

+1

一筆鉅額交易? – jarlh

+0

首先在SP中執行此操作,而不是使用C#代碼,並且事務似乎是正確的方法...您可以在刪除和插入完成時執行事務 – Viru

+0

您是否計時了100k加上發送時間來查看需要多長時間? – Paddy

回答

3

執行快速切換的一種方法是將數據插入臨時表中,啓動事務並從該表執行INSERTMERGE到主表。

這樣,時間敏感的操作由RDBMS引擎自己完成,並且將數據非時間敏感地插入臨時表中不會影響切換時間。

+0

優秀的建議!這似乎比嘗試創建一個100k +大小的單個開始/結束塊更好。這是我打算使用的解決方案。謝謝! –

相關問題