2012-11-20 69 views
0

這個問題將成爲關於SSIS項目中型進口項目最佳實踐的純粹組織問題。組織200多張桌子導入項目的最佳做法

因此,我有源數據庫,不斷充實新數據。然後我有一個臨時數據庫,我有時會從源數據庫加載數據,以便我可以處理源數據庫的副本並遷移當前系統。我實際上使用一個SSIS Visual Studio項目來導入這些數據。

我的問題是,我意識到我的項目的實際設計並非真正最佳,現在我想將此項目移動到SQL Server,以便我可以安排導入而不是手動運行Visual Studio項目。這意味着實際的項目需要進行清理和優化。

所以基本上,對於每個表,過程很簡單:截斷表,從源中提取並加載到目標中。我有大約200張桌子。由於源數據庫一次僅接受一個連接,所以無法並行提取。那麼你將如何設計這樣一個項目?

我從微軟的文檔中看到,他們推薦每個軟件包使用一個數據流,但管理200個不同的軟件包似乎是不可能的,尤其是我將不得不鏈接進行調度。在另一方面一個封裝與200的數據流似乎unamangeable太...


編輯21/11:

第一apporach我想,當啓動該項目是自動提取我的表來使用通過在表名列表上迭代。如果我的源表和目標表具有所有相同的模式對象名稱,但來自不同供應商(BTrieve和Oracle)的源數據庫和目標數據庫也具有不同的命名限制,那麼結果可能會很好。例如,BTrieve不保留名稱並允許超過30個字符名稱,而Oracle不包含這些名稱。所以這就是我如何用半自動列映射手動創建200個數據流(大部分是自動的)。

當爲目標數據庫生成CREATE TABLE查詢時,我創建了一個可重用的C#庫,其中包含用於生成新模式對象名稱的方法,以防萬一該方法可能自動化。如果有任何自定義工具來生成可以使用外部.NET庫的軟件包,那麼這可能會有所斬獲。

回答

0

基本上可以創建10個子包每一個都具有20個數據流的任務,並創建一個主包裹其觸發這些子pkgs.Using parent to child configuration創建.DEFINE優先約束單個XML file配置文件在主以串行方式執行包PKG。通過這種方式,與具有200個數據流任務的200個包或單個包相比,可維護性會更好。

0

以下鏈接可能對您有用。

Single SSIS Package for Staging Process

希望這有助於!

+0

這實際上是我開發這個項目時想要使用的第一種方法,所以一切都會自動進行。但問題是我的源代碼(BTrive)和登臺(Oracle)具有非常不同的模式對象命名約定,因此無法自動映射列名稱(例如,源數據庫中的「時間」在我的目標中變爲「TIME_」 DB,因爲「TIME」是Oracle中的保留字)。因此,所有這些數據流都必須手動配置。 – Ucodia

2

你看過BIDS Helper的BIML(商業智能標記語言)作爲一個包生成工具嗎?我用它來創建多個包,它們都遵循相同的基本截斷 - 提取加載模式。如果您需要比BIML內置的智能略高一些,那麼可以使用BimlScript,它可以將C#代碼嵌入到處理中。

從您的問題描述中,我相信您可以編寫一個BIML文件並生成兩百個單獨的包。你可以用它來生成一個包含兩百個數據流任務的包,但我從來沒有嘗試過推動SSIS。

+0

謝謝你,我會仔細看看。我更新了我的原始問題,以便與您描述的場景相匹配。 – Ucodia

相關問題