由于缺少对象,DACPAC 无法部署
Posted
技术标签:
【中文标题】由于缺少对象,DACPAC 无法部署【英文标题】:DACPAC fails to deploy due to missing object 【发布时间】:2021-12-19 01:26:12 【问题描述】:我有一个复杂数据库的 DACPAC,我试图通过 Azure DevOps Pipeline 中的 Powershell 进行部署。
我通过 Sqlpackage.exe 运行它
& $(sqlPackage) "/Action:Publish" "/TargetServerName:$(myserver)" /TargetDatabaseName:"(myDB)" "/p:CreateNewDatabase=True" "/TargetUser:$(myUser)" "/TargetPassword:$(myPass)" "/SourceFile:$(myDacpac)" "/p:IgnoreUserSettingsObjects=True" "/p:IgnoreAuthorizer=True" "/p:VerifyDeployment=True" "/p:ExcludeObjectTypes=Logins;Aggregates" "/p:IncludeTransactionalScripts=True"
查看我的日志文件,我发现我的 [missingobject] 正在创建中:
2021-11-04T17:52:30.6001273Z Creating [missingobject]...
然后很多步骤之后我得到这个错误:
Error SQL72014: .Net SqlClient Data Provider: Msg 208, Level 16, State 103, Procedure MY_VIEW, Line 20 Invalid object name 'myschema.[missingobject]'.
Error SQL72045: Script execution error. The executed script:
CREATE VIEW myschema.MY_VIEW
缺少的对象是在同名 CLR 程序集中定义的聚合函数。我可以看到 CLR 程序集存在于数据库的 Assemblies 文件夹中。但实际的聚合函数并不存在。
似乎 dacpac 正在部署程序集,然后是视图。但是函数应该在视图之前。
在网上看,我看到 sql server “智能地”确定依赖关系并以正确的顺序部署,但这里似乎没有发生。
【问题讨论】:
【参考方案1】:SQLPROJ 和 dacpac 必须同时包含:程序集和 CREATE AGGREGATE/FUNCTION 脚本。
同名CLR程序集
这意味着唯一的Creating [missingobject]
代表程序集。
而且您的 sqlpackage 参数 /p:ExcludeObjectTypes=Logins;Aggregates
不会为任何聚合留下机会。从中删除Aggregates
。
【讨论】:
以上是关于由于缺少对象,DACPAC 无法部署的主要内容,如果未能解决你的问题,请参考以下文章
API Facebook 营销错误:不支持的获取请求。 ID 为 XXXXXX 的对象不存在,由于缺少权限而无法加载
无法连接到 OpenOffice Base - 用户缺少权限或找不到对象异常