sql-server - 使用 CLI 工具 (sqlpackage.exe / PS dbatools) 时通过 BACPAC / DACPAC 导入数据库在用户上失败
问题描述
目标
使用 PowerShell 脚本将 SQL 数据库克隆到不同的远程 SQL Server
什么有效
使用 SSMS 将 BACPAC 文件导入不同的服务器(远程和本地)不会出现(报告)警告或错误。
什么没有
使用 sqlpackage.exe 和 PowerShell dbatools 将 BACPAC 导入远程 SQL Server 会导致以下错误:
Warning SQL72038: The object [XXX] already exists in database with a different definition and will not be altered.
Error SQL72014: .Net SqlClient Data Provider: Msg 15023, Level 16, State 1, Line 1 User, group, or role 'XXX' already exists in the current database.
Error SQL72045: Script execution error. The executed script:
CREATE USER [XXX] FOR LOGIN [XXX];
我还尝试使用 PS dbatools DACPAC 方法:https ://dbatools.io/clone/
具有不同设置的错误消息更改为:
Initializing deployment (Start)
The object [XXX] already exists in database with a different definition and will not be altered.
Initializing deployment (Complete)
Analyzing deployment plan (Start)
Analyzing deployment plan (Complete)
Reporting and scripting deployment plan (Start)
Reporting and scripting deployment plan (Complete)
Updating database (Start)
Creating NEW_DATABASE...
The database settings cannot be modified. You must be a SysAdmin to apply these settings.
Creating [XXX]...
.Net SqlClient Data Provider: Msg 15023, Level 16, State 1, Line 1 User, group, or role 'XXX' already
exists in the current database.
Script execution error. The executed script:
CREATE USER [XXX] WITHOUT LOGIN;
An error occurred while the batch was being executed.
Updating database (Failed)
下一步是禁用用户并通过脚本添加回所需的用户和角色。使用以下链接作为参考,我无法使用我们现有的管理员登录名和密码删除数据库。
为了解决这个问题,我们必须在 RDS 中更改我们的管理员密码
笔记
- 我无法删除用户 XXX,因为它已映射到不同的数据库
- SQL Server Management Studio v17.9.1
- PowerShell dbatools v1.0.30
问题
- 有没有办法找出 SSMS 正在执行什么,以便我可以通过脚本复制它?
- 有哪些选项可以解决此问题?
解决方案
虽然我会在这里分享我的意见,但现在回答这个问题已经很晚了,以便将来有人会发现它有助于解决问题。
这就是我所做的,但有一些例外。排除对象类型 = Users;Permissions;RoleMembership;Logins; 在 sql 包命令行属性中成功部署数据库。
例外情况是,您将无法在现有集合上部署您的用户、权限。在全新安装中,您可以删除此排除属性以部署整个集合而不会出错。
这是要在 sqlPackage.exe 命令中使用的命令行参数
/P:ExcludeObjectTypes=Users;Permissions;RoleMembership;Logins;
参考:MS DOCS -> https://docs.microsoft.com/en-us/sql/tools/sqlpackage/sqlpackage-publish?view=sql-server-ver15
推荐阅读
- excel - Excel Count Ifs 取决于 2 列的总和
- google-cloud-platform - 如果我查询 Bigquery 视图,如何计算定价?
- python - 如何创建在其行中包含指定字符串的列列表?
- c# - 更改 AutoFac 默认行为
- python - User-defined function with arbitrary number of grouping variables in pandas
- docker - 在 docker 镜像中添加文件
- html - 为什么聚合物的铁选择器对我不起作用?
- linux - 从 Artifactory 安装 RPM 包
- c# - Global.asax.cs Application_Error 中的 MVC 自定义错误代码未按预期工作
- hibernate - 如何使用 springboot 2.1 和 java 8 编写请求 sql native?