2012-09-12 71 views
0

我的任務是編寫一個Java過程,將遺留的as400系統中的某些信息移動到新的SQL Server 2008安裝。因爲這些信息是在as400系統上管理的,所以這需要一個「按需」解決方案(IE有人每天將它踢一兩次,並且它應該用最新版本的數據填充SQL Server)。這是一個相當常用的數據集,所以我認爲使用事務來清除表並重建它是個不錯的主意。交易應該防止任何人通過我的流程中途請求數據而意外地提取不完整的清單。這是管理這種情況的正確方法嗎?基於事務的表編輯

如果需要進一步的解釋:

我對球隊的新的開發者之一,並試圖堅持我們執行「內存更換」過程的更高級開發人員之一。他希望更新兩個表中存在的每條記錄,插入不存在的新記錄,然後刪除不存在的舊記錄。我不相信這是一個好主意,特別是因爲在這個過程的中間任何請求都會返回一個混雜的數據。我只想知道我應該從技術角度推回多強。

+0

*通過該過程中途的任何請求將返回一個數據雜湊*。如果您在交易 –

+0

中加載加載過程,您可以解釋一下嗎? – thedan

+0

我對Java沒有太多瞭解,但是任何數據訪問庫都將允許您在單個事務中發出多個DML語句。在事務處理期間,通常不允許其他請求查看未提交的更改。有關JDBC示例,請參閱[使用事務](http://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html)。 –

回答

1

根據填充需要多長時間,如果表被鎖定並且無法訪問,您可能無法從用戶角度獲得可接受的性能。

考慮試試這個(假設你沒有子表)。創建兩個具有相同結構的表。 創建視圖,以隔離table1中的所有列。讓你的過程填充table2。完成後,將視圖更改爲引用表2(應該花費幾秒或幾毫秒)。讓所有的應用程序代碼引用視圖而不是基表。當你這樣做的時候,你可以建立一個大表,重建索引,用戶永遠不會知道它,因爲從他們的角度來看,唯一的延遲就是重新創建視圖所需的時間。當重新創建表格需要幾分鐘甚至幾小時時,我們已經完成了幾次。當然,下一次您將其反轉並填充表格1,然後將視圖更改回來。

+0

這實際上不是一個壞主意。我將不得不看看這會有多少工作。我不確定我們是否有足夠的數據來證明它的正確性。 (<最大行數<2k) – thedan

+0

正在改變視圖的定義,類似於動態創建視圖嗎? [這是警告](http://stackoverflow.com/a/1044210/119477)反對。說真的,你有什麼想法,如果一個交易正在飛行並且視圖改變會發生什麼? –

+0

這是針對在您更改視圖時沒有針對它們的事務的表,因爲它們僅通過您控制的導入進行填充。其他用戶不應該改變數據inteh表。 – HLGEM