Sql-Server

如何將多個表的全部內容傳輸到另一個數據庫,而不是在同一個網路中?

  • February 24, 2022

我有一組 12 個表,總共大約 400 萬行,我每年需要移動四次。他們來自的數據庫伺服器不能直接與他們移動到的伺服器通信。數據必須通過 SFTP 文件傳輸。

這 12 個表已存在於目標數據庫中,但可以根據需要刪除或截斷。在傳輸過程中,目標數據庫將處於“實時”使用狀態。

在一個理想的世界中,我希望有一些我在源伺服器上執行的腳本,將所有數據扔到一個平面文件中,並在目標伺服器上執行另一個腳本,從平面文件中載入表。

到目前為止我看到的選項:

  • 使用導入/導出數據嚮導導出為 CSV(雖然我不確定源數據中是否有逗號會導致問題)。我不喜歡隨著時間的推移發生錯誤是多麼容易,例如導入錯誤的表。
  • 編寫 powershell 來導出數據(再次是 CSV 文件,我喜歡二進製文件,我不必擔心解析問題)。
  • 將數據庫備份並還原到伺服器上,然後複製所需的表。這將需要複製約 100gb 的備份。這會很慢,但會起作用。

必須有一些工具來完成這種工作!

@JD -*為什麼是 SFTP?*將數據帶入此網路的唯一獲准方法是 SFTP。關鍵的公共安全系統,因此它們相當挑剔。 *還有其他表嗎?*是的,這只是眾多表中的 12 個,整個數據庫大約為 100GB。

有一個與 SQL Server 一起打包的命令行實用程序,稱為BCP。它會做你需要的。

它支持多種文件格式。你想要的是“原生”。這是一種專有的二進制格式。它將避免逗號、換行等問題。

在目的地使用 BCP 導入臨時表,每個源表一個。這些具有與源/目標表相同的架構。然後使用分區開關刪除所有現有數據並用新傳輸的數據替換它。

所有這些都可以包含在一些簡短的 PowerShell 腳本中,進行參數化,然後放入原始碼控制中。

引用自:https://dba.stackexchange.com/questions/307895