2015-06-17 66 views
0

我們有一張關於3M記錄的表格,這些記錄在我們的應用程序中只用於只讀操作。一天一次,我們會收到帶有新版表格的csv文件。大多數記錄沒有更改,但有些記錄是創建,更新或刪除的。總變化量小於整個內容的1%。 用新數據更新表格內容的最佳方式是什麼?表獨家鎖定是不可接受的,該應用程序正在全天候工作。 更新應該在一次提交中完成。對數據庫的訪問是通過JDBC。 謝謝。如何從csv文件/ Oracle的另一個表中更新大表格

回答

1

我會考慮將您的數據加載到全局臨時表中,然後使用MERGE語句在公共和唯一鍵值上的目標表之間進行連接,從而應用更改。

在SO和文檔中有很多MERGE示例。

https://docs.oracle.com/database/121/SQLRF/statements_9016.htm#SQLRF01606

+1

MERGE是否刪除記錄? – spoonboy

+0

它看起來像MERGE不能從目標表中刪除源表中未顯示的記錄。 – spoonboy

+0

我會給出另一個答案,以及... –

0

一種選擇是保持在一對錶,並通過使用同義詞切換它們之間的應用程序。

因此,給定table1和table2,您的同義詞在星期一指向table1。通宵加載table2,然後將同義詞切換爲指向它而不是table1。

這樣做的一個間接好處是它可以保留您以前的數據集,以防需要切換回來。

+0

它是否適用於公開交易?我想不是。 – spoonboy

+0

我已經做了一段時間了,但是我記得同義詞定義沒有鎖定問題,因爲一旦查詢運行,您可以對同義詞進行任何操作,因爲底層關係作爲查詢解析的一部分被解析和轉型。測試會很簡單。 –

相關問題