如何將整個數據庫備份到文本文件
如果它很愚蠢並且有效,那麼它仍然很愚蠢。
關於 GDPR 的喧囂讓我開始思考——如果你必須進入備份並修改/刪除數據,你會怎麼做?破解打開一個 .bak 文件對我來說聽起來很難。但是打開一個 .txt 文件非常容易。
我可以將我的數據庫備份到一個文本文件,從而更容易從備份中刪除歷史記錄嗎?
雖然這不是實際備份的好選擇,但有一些將表轉儲到文本文件的案例。在這種情況下,
xp_cmdshell
呼叫BCP.EXE的另一種方法是使用SQL#(我編寫的)中可用的DB_BulkExport SQLCLR 儲存過程。然後,您可以使用File_GZip壓縮文件。以下是使用DB_BulkExport與 BCP.EXE 相比的優缺點:
優點:
- 無需啟用
xp_cmdshell
- 添加列標題
- 文本限定沒有欄位、所有欄位或僅需要它的欄位(即非數字/非二進製欄位)。文本限定字元串欄位意味著您可以使用標準欄位分隔符(例如逗號或製表符)和標準行分隔符(例如 CRLF 或 LF / NL),而不是您希望不使用的字元或字元序列存在於任何字元串欄位中。文本限定符是使用者定義的(通常是雙引號),嵌入文本限定符的轉義序列可以是您喜歡的任何內容(通常也是雙引號,但也可以是反斜杠)。
- 控製
BIT
表示:1 / 0、T / F 或 True / False。- (很快)控制
SMALLDATETIME
,DATETIME
,DATE
,TIME
,DATETIME2
, 和DATETIMEOFFSET
格式。缺點:
- 不是免費的(DB_BulkExport和File_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 是否帶有類似的實用程序。