Цель
Клонировать базу данных SQL на другой удаленный SQL Server с помощью сценария PowerShell.
Что работает
Использование SSMS для импорта файла BACPAC на разные серверы (удаленно и локально) работает без предупреждений или ошибок (сообщается).
Чего нет
Импорт BACPAC на удаленный SQL Server приводит к следующей ошибке при использовании sqlpackage.exe и инструментов PowerShell dbatools:
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)
Следующим шагом было отключение пользователей и добавление необходимых пользователей и ролей с помощью сценария. Использование следующей ссылки в качестве справки привело к созданию базы данных, которую я не смог удалить с нашим существующим логином и паролем администратора.
DacPac исключает пользователей и логины при экспорте или импорте
Чтобы это исправить, нам пришлось изменить пароль администратора в RDS.
SQL Server AWS RDS не может удалить базу данных
Примечания
- Я не могу удалить пользователя XXX, поскольку он сопоставлен с другими базами данных.
- Студия управления SQL Server версии 17.9.1
- Инструменты базы данных PowerShell v1.0.30
Вопросы
- Есть ли способ узнать, что выполняет SSMS, чтобы я мог воспроизвести его с помощью сценария?
- Какие есть варианты решения этой проблемы?