2

使用 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));

事实上,在 Management Studio 中有一个用户定义的表类型,它不能被删除。

怎么解决?

我尝试使用此脚本导出所有选项。

4

2 回答 2

1

其他人最近出现了这个问题(链接)

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

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

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

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

于 2015-03-05T20:39:44.020 回答
0

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

可以在以下链接中找到来自 Microsoft 的线程和响应

这是来自 Raul Garcia - MS 的回复:

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

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

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

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

感谢您的耐心等待。——劳尔·加西亚

于 2015-04-15T07:40:45.667 回答