簡體   English   中英

SQL 2014-SSIS或存儲過程可將數據從SQL Server復制到具有相同表結構的SQL Server

[英]SQL 2014 - SSIS or Stored procedures to copy data from SQL Server to SQL Server with same table structure

我們有一個SSIS項目,用於將數據從CSV加載到SQL Server的登台區域(DB_Stage)。

暫存的主要目的是准備准備移至生產數據庫(DB_Prod)的數據,並在過程中標記數據或文件中的任何錯誤。

通過從DB_Prod獲取創建表腳本來創建DB_Stage,因此兩個數據庫中的表結構是相同的。 一旦成功加載到DB_Stage,則需要將數據移至DB_Prod。

我正在考慮為DB_Stage中的每個表創建一個存儲過程,以將數據推送到DB_Prod,因為不需要進行轉換,並且還認為從SQL到SQL的速度更快。 但是,我讀了一些文章,說SSIS具有並行處理的能力,並且加載速度會快得多。 但是我不完全理解。

我可以創建另一組SSIS包,以立即使用Biml將數據從舞台轉移到產品。 但是我需要一些建議,哪種才是最好的方法。 在我的方案中存儲過程或SSIS包。

如果我使用SSIS包,則一個優點是可以配置目標數據庫,因此可以將Stage數據加載到任何服務器/數據庫中(這是我們的要求)。

如果使用存儲過程,則找不到找到目標數據庫參數的方法。 看來我必須這樣硬編碼...

插入Prod_DB.dbo.Table1(列列表),從DB_Stage.dbo.table1中選擇(列列表)。

任何幫助將不勝感激。

如前所述,在開發環境和生產環境之間沒有任何轉換可使用。 我建議您使用SSIS而不是存儲過程。 SSIS會將其視為同步任務,並將盡快開始傳輸記錄。 SSIS可以利用緩沖管線來控制和實現並行性。

在這種情況下,我建議在使用SSIS時要進行的設置很少:

  • 避免在目標上鎖定表
  • 調整最大 行數和最大 行提交大小
  • 如果您打算一次傳輸多個表的數據,請設置最大值。 線程和相應的緩沖區。

我很確定您將在這里使用SSIS而不是TSQL看到性能提高。

如前所述,有兩種方法可以將數據從一台服務器復制到另一台服務器。 讓我們一一介紹。

存儲過程:您必須首先使用sp_addlinkedserver在Prod服務器和登台服務器之間創建鏈接服務器連接。 這將允許您使用4部分命名來引用登台服務器中的表,例如[ProdServer]。[ProdDB]。[dbo]。[Table1]。在這里,您可以利用所謂的“ 動態查詢 ”。 在這種特殊的查詢中,我們可以將SQL查詢的某些值指定為varchar變量,然后執行查詢。
您將要編寫的基本上是一個查詢,如下所示:

'INSERT INTO [' + @ProdServer + '].[' + @ProdDB +'].[dbo].[Table1] (col list)
SELECT (col list) FROM [DB_Stage].[dbo].[table1]'

在這里,對於nvarchar字符串,條件為4,000個字符,對於varchar字符串,條件為8,000個字符。

SSIS:
如前所述,SSIS允許您並行化從登台服務器到Prod Server的數據流。 該方法是相當簡單的解釋在這里 但是,如果表太大,建議您使用Balanced Data Distributor ,這是對並行數據流的優化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM