我有一些.bak
来自SQL Server 2005转储的大文件。
是否可以在不使用SQL Server的情况下将它们还原到PostgreSQL,MySQL或平面文本文件?
开源解决方案将是最有用的。
我有一些.bak
来自SQL Server 2005转储的大文件。
是否可以在不使用SQL Server的情况下将它们还原到PostgreSQL,MySQL或平面文本文件?
开源解决方案将是最有用的。
Answers:
这是我的建议:
如果虚拟机有足够的空间来保存备份,但又没有足够的空间来还原备份,则可以使用Red-Gate的同名产品试用版执行“虚拟还原” (这使您可以与备份文件,就好像它已还原一样)。否则,以正常方式还原数据库。
一旦数据库可用(通过正常还原或虚拟还原),您可以通过以下方式为架构和数据生成脚本:
另外,您可以尝试使用bcp实用程序将数据提取到CSV文件或类似文件中,但是您必须逐表执行此操作或使用一些巧妙的脚本(PowerShell,T-SQL,C#/ SMO等)。 )为您生成所有bcp命令。进入CSV文件后,将数据批量加载到Postgres中应该很简单(但是您仍然需要做一些工作来生成表)。
作为最后的建议,如果.bak文件不是巨大的,并且数据不是机密的,我非常愿意尝试以所需的格式为您生成文件。我有很多带有空间的Windows VM,挑战在于将.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)的答案。请注意,除了数据类型(IDENTITY
vs.之外SEQUENCE
,NVARCHAR
由于您在数据库本身上设置了编码,postgres一无所知)。Postgres一无所知CREATE CLUSTERED INDEX
(CLUSTER
可能对您有用)。最后,由于我在注释中看到您将要使用空间数据,因此postgresql对CREATE SPATIAL INDEX
语法一无所知。您需要安装postgis并使用INDEXTYPE
关键字来创建空间索引。最后,请确保您正确处理架构。
长话短说: