Sql-Server

如何將整個數據庫備份到文本文件

  • May 17, 2018

如果它很愚蠢並且有效,那麼它仍然很愚蠢。

關於 GDPR 的喧囂讓我開始思考——如果你必須進入備份並修改/刪除數據,你會怎麼做?破解打開一個 .bak 文件對我來說聽起來很難。但是打開一個 .txt 文件非常容易。

我可以將我的數據庫備份到一個文本文件,從而更容易從備份中刪除歷史記錄嗎?

雖然這不是實際備份的好選擇,但有一些將表轉儲到文本文件的案例。在這種情況下,xp_cmdshell呼叫BCP.EXE的另一種方法是使用SQL#(我編寫的)中可用的DB_BulkExport SQLCLR 儲存過程。然後,您可以使用File_GZip壓縮文件。

以下是使用DB_BulkExport與 BCP.EXE 相比的優缺點

優點:

  1. 無需啟用xp_cmdshell
  2. 添加列標題
  3. 文本限定沒有欄位、所有欄位或僅需要它的欄位(即非數字/非二進製欄位)。文本限定字元串欄位意味著您可以使用標準欄位分隔符(例如逗號或製表符)和標準行分隔符(例如 CRLF 或 LF / NL),而不是您希望不使用的字元或字元序列存在於任何字元串欄位中。文本限定符是使用者定義的(通常是雙引號),嵌入文本限定符的轉義序列可以是您喜歡的任何內容(通常也是雙引號,但也可以是反斜杠)。
  4. 控製BIT表示:1 / 0、T / F 或 True / False。
  5. (很快)控制SMALLDATETIME, DATETIME, DATE, TIME, DATETIME2, 和DATETIMEOFFSET格式。

缺點:

  1. 不是免費的(DB_BulkExportFile_GZip僅在完整版中可用)

請注意DB_BulkExport只導出數據;它不記錄結果集的結構。這與BCP沒有什麼不同,也與主要社區 wiki 答案中提供的解決方案沒有任何不同,因為那裡的解決方案忽略了排序規則、計算列、大多數列選項等。

Kin提到的 SQL Server 的另一個選項是mssql-scripter。這是一個免費/開源、多平台、基於 Python 的工具。我沒有使用它,但它似乎導出了可以執行以重新創建數據和/或模式(表、約束等)的 DDL 和/或 DML 語句。它似乎只將數據導出為INSERT語句而不是分隔欄位。看起來很有趣,但請查看“問題”以確保沒有任何會影響您的使用的東西。


此外,即使這個問題(以及主要的社區 wiki 回答)提到了 SQL Server,但圍繞 GDPR 的問題並不特定於 SQL Server。所以,只是想我會提到導出表(甚至模式等)的能力可用於 MySQL 在它附帶的以下兩個實用程序中:

同樣可以在 PostgreSQL 中使用它附帶的以下兩個實用程序來完成:

對於 Oracle,請參閱以下資源,如果不是完全等效的輸出,我相信至少會讓您非常接近(感謝Michael Kutz為我指明了正確的方向):

我不確定 DB2 是否帶有類似的實用程序。

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