2011-08-23 29 views
0

我需要整合來自30個數據庫和20個表的數據。我的第一個嘗試是爲每個表創建一個數據流。每個數據流將有30個數據源,它們從每個數據庫的1個表中獲取數據,然後插入到1個目標中。這不起作用,因爲沒有足夠的內存。我試圖過濾數據來忽略那些不會被使用的數據 - 它沒有幫助。這些任務應該每天執行。整個合併數據庫被刪除,然後插入新數據,這意味着每天都會插入大量數據。任何人都有如何處理內存問題的建議?SSIS整合海量數據 - 建議

現在我看到的唯一解決方案是創建20個包。每個軟件包將有30個數據流。每個數據流將只從一個數據庫獲取數據。但是再一次,我不知道執行的順序是什麼?一個包的數據流會同時開始執行還是逐個執行?

編輯:

這是我做到了......這裏是控制流的截圖: enter image description here

數據截圖的流程: http://img833.imageshack.us/img833/355/45908206.png

我創建了一個包,一個從表所有數據庫。在這種情況下,每個數據流都會從一個表中獲取4年前的數據並導入到源數據庫。問題是我在一個數據庫中有一個表,它有太多的數據,它返回錯誤:

The buffer manager failed a memory allocation call for 10484608 bytes, but was unable to swap out any buffers to relieve memory pressure. 20 buffers were considered and 20 were locked. Either not enough memory is available to the pipeline because not enough are installed, other processes were using it, or too many buffers are locked.

有什麼建議嗎?

+0

結構完全相同,每天執行一次。 –

回答

2

這是我建議,如果你打算在SSIS中這樣做。

  1. 讓我們假設你有表一個ç ... [R,在數據庫中小號牛逼DB1DB2 .. 。DB30。還有你的合併數據庫MainDB

  2. 創建SSIS包將包含1級或多個數據流的任務將數據從表中數據庫DB1 數據庫MainDB轉移到的表。爲此,您可以使用OLEDB源從DB1檢索數據。如果你必須應用一些轉換,你可以用適當的轉換任務來完成。要將數據插入到目標表中,可以使用OLE DB目標。

  3. 保存在程序包配置文件(dtsConfig)連接字符串

  4. 創建30個不同的配置文件每個包含你有30級的數據庫連接字符串。

  5. 您可以在SQL Server代理下創建30個SQL作業來安排日常運行。

  6. 每個SQL作業都將運行相同的SSIS包,但會利用相應的配置文件指向正確的數據庫。

Other options are

  1. 使用SQL Server Replication。你需要兩個步驟。使用SQL作業截斷MainDB中的數據,然後在數據庫之間同步數據。

  2. 使用商業產品一樣RedgateIdera

希望給你的想法。

+0

「創建一個將同步數據庫DB1和MainDB之間的20個表的SSIS包。」 - 你的意思是什麼「同步」?我不明白這一步。感謝你的回答! –

+0

我編輯了我的問題......問題出在內存中,顯然這種方法試圖處理太多的數據。謝謝你的幫助! –

+0

在這個答案中有幾個細節缺失,使初學者可以理解......這是我最後得出的結論:1)這是我在數據流任務中用來插入/更新/刪除記錄:http://stackoverflow.com/questions/7254079/ssis-delete-rows 2)使用FOREACH循環:http://stackoverflow.com/questions/7347284/ssis-using-foreach-to-read -from-multipe-dbs 3)如果遇到內存問題,這可能是解決方案:http://stackoverflow.com/questions/7393027/ssis-out-of-memory-error-again –