Abe*_*Abe 17 sql-server backup restore
我有一些.bak来自 SQL Server 2005 转储的大文件。
我可以在不使用 SQL Server 的情况下将这些恢复到 PostgreSQL、MySQL 或纯文本文件吗?
开源解决方案将是最有用的。
Aar*_*and 19
这是我的建议:
如果 VM 有足够的空间来保存备份但没有足够的空间来还原它,您可以使用Red-Gate 同名产品的试用版执行“虚拟还原” (它允许您与备份文件就好像它已经恢复一样)。否则,按正常方式恢复数据库。
一旦数据库可用(通过正常还原或虚拟还原),您可以通过以下方式为架构和数据生成脚本:
或者,您可以尝试使用bcp 实用程序将数据提取到 CSV 文件或类似文件,但您必须逐表执行此操作或使用一些巧妙的脚本(PowerShell、T-SQL、C#/SMO 等)。 ) 为您生成所有 bcp 命令。一旦在 CSV 文件中,将数据批量加载到 Postgres 应该是微不足道的(但您仍然需要做一些工作来生成表格)。
作为最后的建议,如果 .bak 文件不是很大,并且数据不是机密,我非常愿意尝试为您生成您需要的格式的文件。我有很多有空间的 Windows 虚拟机,挑战在于将 .BAK 文件放到我可以检索它的地方 - 特别是如果它比大多数文件共享服务支持的要大。
不幸的是,如果不深入了解文件本身的内部结构,就无法访问 .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关键字来创建空间索引。最后,确保您适当地处理架构。
长话短说: