Sql-Server

備份單個表

  • July 16, 2019

我需要截斷 Sql server 中包含大約 250GB 數據的表,但在截斷之前我需要對此進行備份,它可能是 csv 文件或其他模式。最好的方法是什麼。

我建議使用BCP 實用程序。從該文件中:

將表行複製到數據文件中(使用受信任的連接)

基本的

此範例創建一個名為 StockItemTransactions_character.bcp 的數據文件,並使用字元格式將表數據複製到其中。

在命令提示符處,輸入以下命令:

bcp WideWorldImporters.Warehouse.StockItemTransactions out D:\BCP\StockItemTransactions_character.bcp -c -T

只是為了提供通過 BCP 或 SSIS 導出到文件的替代方法,您可以將此數據導出到新數據庫(如Denis Rubashkin在評論中所建議的那樣),然後創建該數據庫的備份。

與將表導出到 .csv 或其他一些外部平面文件相比,將數據導出到輔助數據庫的好處如下:

  1. 更容易保護
  • 您可以通過您在目前系統中使用的相同機制(例如相同的 AD 組、使用者等)限制使用者對這些數據的訪問。
  • 您可以通過TDE和/或列壓縮加密此數據
  1. 更小的數據足跡
  • 您可以通過壓縮頁面/聚集 列儲存索引(等待正確的 SQL Server 版本和版本¹)壓縮此數據(事後)
  1. 可能更快
  • 在我看來,BCP 存在一個主要問題,那就是它是串列執行的。我不知道通過 BCP 甚至 SSIS 將數據並行導出到平面文件的方法。SELECT INTO在 SQL Server 2014 及更高版本中執行語句,或INSERT INTO tbl WITH (TABLOCK) SELECT在 SQL Server 2016 或更高版本中執行語句將並行將此數據載入到備份數據庫中。250GB 是相當大的數據量,根據您的系統,並行操作可以顯著減少完成操作所需的時間。

¹ - 列儲存索引是 SQL 2014 - SQL 2016 CU9(13.0.2216.0 或13.0.2218.0)企業版獨有的,並且在 SQL Server 2016 SP1 及之後的標準版本中可用。

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