我可以在没有 SQL Server 的情况下还原 SQL Server .bak 文件吗?

Abe*_*Abe 17 sql-server backup restore

我有一些.bak来自 SQL Server 2005 转储的大文件。

我可以在不使用 SQL Server 的情况下将这些恢复到 PostgreSQL、MySQL 或纯文本文件吗?

开源解决方案将是最有用的。

Aar*_*and 19

这是我的建议:

  1. 构建一个运行 Windows 的虚拟机,有足够的磁盘空间来保存备份。将备份文件复制到那里。如果您还没有构建虚拟机的能力,您可以使用Oracle VirtualBox 等免费产品来构建。
  2. 下载并安装 SQL Server 评估版。确保包含数据库引擎和管理工具 - 完整。
  3. 如果 VM 有足够的空间来保存备份但没有足够的空间来还原它,您可以使用Red-Gate 同名产品的试用版执行“虚拟还原” (它允许您与备份文件就好像它已经恢复一样)。否则,按正常方式恢复数据库

  4. 一旦数据库可用(通过正常还原或虚拟还原),您可以通过以下方式为架构和数据生成脚本:

    • 打开 Management Studio 并连接到您的实例。
    • 打开对象资源管理器。
    • 右键单击新恢复的数据库,选择任务 > 生成脚本...
    • 点击下一步,点击下一步
    • 在“选择脚本选项”页面上,向下滚动并将“脚本数据”设置为 True
    • 点击下一步
    • 检查所有相关对象,然后单击下一步
    • 检查您想要的表,然后单击下一步
    • 选择将脚本写入文件。现在,您将拥有一个包含所有使用 SQL Server 插入语法的对象和数据的文件,您将不得不处理输出以获取适用于 Postgres 的格式(我不知道任何细微的语法差异)。

或者,您可以尝试使用bcp 实用程序将数据提取到 CSV 文件或类似文件,但您必须逐表执行此操作或使用一些巧妙的脚本(PowerShell、T-SQL、C#/SMO 等)。 ) 为您生成所有 bcp 命令。一旦在 CSV 文件中,将数据批量加载到 Postgres 应该是微不足道的(但您仍然需要做一些工作来生成表格)。

作为最后的建议,如果 .bak 文件不是很大,并且数据不是机密,我非常愿意尝试为您生成您需要的格式的文件。我有很多有空间的 Windows 虚拟机,挑战在于将 .BAK 文件放到我可以检索它的地方 - 特别是如果它比大多数文件共享服务支持的要大。


swa*_*eck 7

不幸的是,如果不深入了解文件本身的内部结构,就无法访​​问 .bak 文件的内容。我可以想到这里有一个人可能知道这些信息,但我无法确定那个人是否会告诉你如何去做

因此,您将需要安装 SQL Server 实例。您还需要确保此实例可以与您的 Postgres 服务器通信(使用 pg_hba.conf) 一旦到达那里,您就有了几个迁移数据的好路径。

第一个路径是安装 Postgres Windows ODBC 驱动程序并建立到 pg 服务器的连接。然后您可以使用 SSIS 编写数据迁移脚本。如果你要走这条路,我建议你在安装数据库服务器时安装SSIS。

另一个选项还涉及 ODBC 驱动程序连接,但您可以在 SQL Server 中创建链接服务器并通过 SQL Server 在 pg 实例上运行插入。我之前已经在这里回答过这个确切的问题,所以应该不难找到。

编辑

为了合并 Aaron 的评论,一旦您启动并运行 SQL Server,您还可以以各种不同的方式将数据导出到平面文件。如果你选择这条路,请告诉我,我会发布一些方法来做到这一点

编辑(2):

除非您想提前创建结构,否则链接服务器进程可能不是最佳方法。这是我的首选方法,但我通常已经在两侧设置了结构。

这使 Aaron Bertrand 的答案成为最佳答案。请注意,除了数据类型(IDENTITYvs. SEQUENCE, postgres 一无所知,NVARCHAR因为您在数据库本身上设置了编码)。Postgres 对CREATE CLUSTERED INDEX(CLUSTER可能对你有用) 一无所知。最后,由于我在评论中看到您将使用空间数据,因此 postgresql 对CREATE SPATIAL INDEX语法一无所知。您需要安装 postgis 并使用INDEXTYPE关键字来创建空间索引。最后,确保您适当地处理架构。

长话短说:

  1. 使用 Aaron Bertrand 的方法生成脚本和数据(我可能会坚持使用表级别)
  2. 记下索引 DDL(如果它仍然有效),但不要包含它
  3. 一旦结构和数据就位,就在 postgres 上创建索引

  • 我认为您不需要配置 SQL Server 来与 Postgres 对话。我敢肯定,一旦安装了 SQL Server,您就可以将数据提取为 Postgres 能够理解的各种格式。 (3认同)