SqlPackage.exe 导出/导入数据库

标签 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));

事实上,在 Management Studio 中查找的用户定义表类型无法删除。

如何解决?

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

最佳答案

最近其他人也遇到了这个问题(link) .

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

Microsoft 最近更新了他们的 DacFx 和 SSDT 工具(以及 Azure 门户),以便在导出/导入 bacpac 时明显忽略此错误对象。

相关说明:部署 dacpac 来升级此类受影响的数据库也存在类似问题,在部署尝试时,它会尝试删除并重新创建所有“用户定义的表类型”,但会失败,因为 script_deployment_databases 位于 sys.但是,目前 dacpac 的工具尚未修复。

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

关于SqlPackage.exe 导出/导入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28028210/

相关文章:

sql - SQL Server 中的连接组

azure - 如何在 Azure Data Factory 中比较一列与另一列的最大最小值

sql - 使用直接查询模式在 Azure SQL 数据库中使用存储过程

mysql - 如何在数据库中存储 5MB 文件预览

sql - 获取在特定日期创建的表的名称

c++ - 在 Recordset ADO 中找不到记录

c# - 使用反射的 Azure Table SDK 2 EntityResolver

mysql - SQL 查询以选择满足先决条件要求的主题

sql - 将 Like 语句与波斯语单词一起使用

sql - mysql选择数据