SqlPackage.exe导出/导入数据库

时间:2015-01-19 15:36:43

标签: sql sql-server azure azure-sql-database sqlpackage

在使用SqlPackage.exe导出Azure并将数据库迁移到V12预览并将数据库导入本地计算机后,我获得了错误:

Error SQL72014: .Net SqlClient Data Provider: Msg 2760, Level 16, State 1, Line 1

The specified schema name "sys" either does not exist or you do not have permission to use it.


Error SQL72045: Script execution error.  The executed script:
CREATE TYPE [sys].[script_deployment_databases] AS TABLE (
    [logical_server] [sysname] NOT NULL,
    [database_name]  [sysname] NOT NULL,
    UNIQUE NONCLUSTERED ([database_name] ASC, [logical_server] ASC));

事实上,管理工作室中的用户定义表类型无法删除。

如何解决?

我尝试使用this script导出所有选项。

2 个答案:

答案 0 :(得分:1)

其他人最近出现此问题(link)

问题在于,Microsoft某些数据库的迁移意外地创建了“错误对象”sys.script_deployment_databases:一种使用sys架构但使用元数据is_user_defined = 1标记的表类型定义。它是“用户定义”的事实导致bacpacs包含它。尝试恢复bacpac失败,因为它试图在sys下创建它。

微软最近更新了他们的DacFx和SSDT工具(以及Azure门户网站),在导出/导入bacpacs时显然忽略了这个错误的对象。

相关说明:部署dacpacs以升级这样一个受折磨的数据库有一个类似的问题,在部署尝试时,它尝试删除并重新创建所有“用户定义的表类型”并失败,因为script_deployment_databases是在sys下但是,目前还没有为达帕奇修复工具。

删除script_deployment_databases对象的一种方法是使用CREATE DATABASE [X] AS COPY OF [Y]直接复制数据库,然后重命名它们以使副本替换原始数据。副本显然省略了该对象。

答案 1 :(得分:0)

解决方案是安装Microsoft SQL Server数据层应用程序框架的更新。可以找到here

可以在以下link

找到Microsoft的主题和响应

以下是Raul Garcia的答复 - MS:

  

更新(截至2015年3月2日):

     

从V12升级导出和导入bacpacs的修复程序   已部署Azure SQL数据库服务器。你应该能够   通过Azure门户成功导出/导入,您可以   安装此更新版本的DacFx以通过SSMS导出/导入,   SSDT,SqlPackage.exe或DacFx API。

     

http://www.microsoft.com/en-us/download/details.aspx?id=45886

     

(注意:如果是,您必须同时安装MSI的x64和x86版本   你在x64机器上。)

     

感谢您的耐心等待。   -Raul Garcia