以编程方式将 SQL Server 数据库保存到 xml 文件,然后再次还原

本文关键字:文件 xml 然后 还原 保存 方式 编程 SQL 数据库 Server | 更新日期: 2023-09-27 17:58:01

我想将整个MS SQL 2008数据库保存到XML文件中...使用 asp.net。

现在我在这里有点迷茫..实现这一目标的最佳方法是什么?数据?

我稍后需要使用这些XML文件再次恢复数据库。我正在考虑使用数据集来读取表和写入 xml,并使用 SQLBulkCopy 类再次还原数据库。但我不确定这是否是正确的方法。

有什么线索和提示给我吗?

以编程方式将 SQL Server 数据库保存到 xml 文件,然后再次还原

如果您需要在同一

服务器类型(我的意思是 SQL Server 2008 或更高版本(上还原它,并且不关心查看 XML 中实际数据的能力,请执行以下操作:

  1. 使用"备份数据库"T-SQL 以编程方式备份数据库
  2. 压缩备份
  3. 将备份转换为 Base64
  4. 将备份作为 XML 文件的内容放置(如:<数据库名称 压缩方法="..." 压缩级别="...">这里的 Base64 内容
  5. 在需要还原它的服务器上,下载 XML,提取 Base64 内容,使用属性了解使用了哪些压缩。使用 T-SQL"RESTORE" 命令解压缩和还原。

这种方法行得通吗?当然,如果您需要查看数据库的内容,则需要开发XML方案,浏览每个表等。但是,您不会备份 SP/视图和其他项目。

因为您谈论的是 CMS,所以我假设您正在部署到您可能没有命令行访问权限的托管环境中。

现在,在我给你链接之前,我想声明这是一个主意。 XML 过于冗长,无法传输大量数据。 此外,虽然提取数据相对容易,但将其放回去将是困难的,并且本身是一个非常耗时的开发项目。

下一个警报:正如 Denis 建议的那样,您将错过所有存储过程、函数等。 最好的办法是使用正常的SQL服务器备份/还原过程。(顺便说一下,我赞成他的回答(。

最后,在我上次处理XML和SQL Server时,我们注意到当数据超过64KB边界时会出现有趣的问题。 基本上,在 63.5KB 时,查询运行得非常快(200 毫秒(。 在 64KB 时,查询时间跃升至一分钟以上,有时甚至更长。 我们没有费心测试超过 100KB 的任何内容,因为在零负载的快速/专用服务器上需要 5 分钟。

http://msdn.microsoft.com/en-us/library/ms188273.aspx

请参阅此内容以将其放回原处:如何将自动XML结果插入到表中?


对于踢球,这里有一个链接,讨论将数据作为json对象提取出来:http://weblogs.asp.net/thiagosantos/archive/2008/11/17/get-json-from-sql-server.aspx

您还应该阅读(不适合胆小的人(:http://www.simple-talk.com/sql/t-sql-programming/consuming-json-strings-in-sql-server/

当然,注释者都建议使用 CLR 方法构建一些东西,但在共享数据库托管环境中可能不可用。


归根结底,如果您真的坚持这种疯狂,那么只需遍历表列表并将所有数据导出到标准CSV文件即可更好地为您服务。 然后,迭代 CSV 文件以将数据加载回 ala C# - 有没有办法将 csv 文件流式传输到数据库中?


请记住,上述所有方法都受到以下影响的

  1. 由于数据开销,处理时间较长;这会导致
  2. 由于各种超时(页面处理、命令、连接等(而导致的失败可能性很高;以及,
  3. 如果你的数据模型在导出和重新导入之间发生了变化,那么你又回到了编写自定义翻译代码,最终还是搞砸了。

所以,只有当你真的必须这样做并且至少在某种程度上是一个受虐狂时,才这样做。 如果目的只是将一些数据从一个安装传输到另一个安装,您可以考虑使用其中一个工具,如 SQL 比较 和 SQL 数据比较 从 RedGate 来处理传输。

我不在乎你赚了多少(或多少(,在他们的开发人员捆绑包中的 1500 美元投资比你将花费数月的时间便宜得多,修复它,重做它,再次修复它,等等(为了记录,我不为他们工作。 他们的产品是一流的。

Red Gate的SQL Packager允许您将数据库打包到exe或VS项目中,因此您可能想看看它。您可以指定要考虑用于数据的表。

有什么具体的原因你想使用 xml 来做到这一点吗?