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