安装了Sql Server数据工具后,我尝试使用SqlPackage.exe
来自:C:\ Program Files(x86)\ Microsoft SQL Server \ 120 \ DAC \ bin \
我想"提取"架构和数据。这样我就可以迁移到没有任何现有数据库的新服务器 - 我希望架构和数据包含在该迁移中。这只是一个旋转/一次性环境。
现有数据库并不是很好,因为它们具有跨数据库引用。我想导出的数据库有多个对另一个名为" audit"的数据库的引用。涉及触发器 - 希望你能得到图片。
阅读完文档后,我尝试了这个命令:
.\sqlpackage.exe /Action:Export /SourceDatabaseName:"MyDb" /SourceServerName:foo\bar /TargetFile:"C:\temp\mydb.bacpac"
然而,这导致了以下许多错误:
Error SQL71562: Error validating element [dbo].[foo_u]: Trigge
r: [dbo].[foo_u] has an unresolved reference to object [Audit].[dbo].[Foo].[FooId]. External references are not supported when creating a package from this platform.
我尝试指定/p:VerifyExtraction=false
,但结果是:
.\sqlpackage : *** 'VerifyExtraction' is not a valid argument for the 'Export' action.
所以现在我在想哇,这一定不能得到支持。但是在VS2017中,当我去SQL Server资源管理器时,我可以"提取数据层应用程序"并选择"提取架构和数据的选项"对于所有表格。这样运行正常并产生一个" foo.dacpac"文件 - 用户界面提供了一个选项,用于"验证提取"我不加控制地离开了。
现在我感到困惑,因为我认为dacpac文件只包含模式,bacpac
文件用于模式加数据 - 但是在提取数据层应用程序时#34;数据"通过visual studio它可以生成一个dacpac文件。这是否意味着我需要使用" Extract"行动而不是"出口" SqlPackage.exe的动作?
有人可以就此提供任何指导吗?
答案 0 :(得分:1)
这是我发现的。
要提取架构和数据,您需要使用/ Action:Extract NOT / Action:Export。
"出口"生成包含数据的bacpac文件。如果源数据库中的对象(触发器,sprocs等)具有外部引用,则会出现这种情况。似乎无法解决这个问题。
"提取"生成一个dacpac文件,并且还可以选择包含数据,还可以禁用验证(默认情况下禁用),这样您就可以解决对外部对象的引用这一事实。
出口在其能力方面似乎被忽略了,而Extract更灵活。
这非常令人困惑。