如何将整个数据库备份到文本文件

Jam*_*mes 7 sql-server backup export scripting

如果它很愚蠢并且有效,那它仍然是愚蠢的。

关于 GDPR 的喧嚣让我思考 - 如果您必须进行备份并修改/删除数据,您会怎么做?破解打开 .bak 文件对我来说听起来很难。但是打开一个 .txt 文件很容易。

我可以将我的数据库备份到文本文件中,从而更轻松地从备份中删除历史记录吗?

Sol*_*zky 2

虽然这对于实际备份来说不是一个好的选择,但有一些将表转储到文本文件的用例。xp_cmdshell在这种情况下,调用BCP.EXE 的另一种方法是使用SQL# (我编写的)中提供的DB_BulkExport SQLCLR 存储过程。然后您可以使用File_GZip来压缩文件。

BCP.EXE相比,以下是使用DB_BulkExport 的优点和缺点:

优点:

  1. 无需启用xp_cmdshell
  2. 添加列标题
  3. 文本限定没有字段、所有字段或仅需要它的字段(即非数字/非二进制字段)。文本限定字符串字段意味着您可以使用标准字段分隔符(例如逗号或制表符)和标准行分隔符(例如 CRLF 或 LF / NL),而不是您希望不是的字符或字符序列存在于任何字符串字段中。文本限定符是用户定义的(通常是双引号),嵌入文本限定符的转义序列可以是您喜欢的任何序列(通常也是双引号,但也可以是反斜杠)。
  4. 控制BIT表示:1 / 0、T / F 或 True / False。
  5. (很快)控制SMALLDATETIMEDATETIMEDATETIMEDATETIME2DATETIMEOFFSET格式。

缺点:

  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 是否有类似的实用程序。