Модуль Powershell SQLServer — Может восстанавливать-База данных SQLD -Автоматически размещать переименованные файлы?

#sql-server #powershell

#sql-сервер #powershell

Вопрос:

  • Версия Powershell: 5.1.19041.1320
  • Версия модуля SQLServer:
  • 21.1.18256 Версия SSMS: 15.0.18390.0

Я пытаюсь написать несколько сценариев Powershell, которые автоматизируют некоторые действия по резервному копированию и восстановлению, необходимые моей организации. По этой причине резервное копирование и восстановление иногда будут выполняться на одном и том же экземпляре SQL Server, фактически клонируя одну базу данных под новым именем.

SSMS могут тривиально обрабатывать этот случай в своем пользовательском интерфейсе, просто указав новое имя базы данных в мастере. При этом создается сценарий, подобный этому:

 RESTORE DATABASE [NewDatabaseName] FROM DISK = N'C:FolderBackupFileName.bak' WITH FILE = 40, MOVE N'Database_Data' TO N'C:Program FilesMicrosoft SQL ServerServerInstanceMSSQLDATANewDatabaseName.mdf', MOVE N'Database_log' TO N'C:Program FilesMicrosoft SQL ServerServerInstanceMSSQLDATANewDatabaseName.ldf', NOUNLOAD, STATS = 5  

Все просто и достаточно очевидно. Попытка выполнить то же самое с модулем SQLServer, используя флаги-AutoRelocate и-Script, приводит к следующему:

 RESTORE DATABASE [NewDatabaseName] FROM DISK = N'C:FolderBackupFileName.bak' WITH MOVE N'Database_Data' TO N'C:Program FilesMicrosoft SQL ServerServerInstanceMSSQLDATAOldDatabaseName.mdf', MOVE N'Database_log' TO N'C:Program FilesMicrosoft SQL ServerServerInstanceMSSQLDATAOldDatabaseName.ldf', NOUNLOAD, STATS = 10  

В частности, он не пытается автоматически переименовать файлы .mdf и .ldf так, как это делает SSMS, сохраняя имя резервной копии базы данных. Это создает потенциальную головную боль в будущем при резервном копировании на разных серверах и приведет к полному сбою при выполнении на одном сервере из-за конфликта. Пропуск флагов-AutoRelocate просто полностью удаляет перемещения, функционально приводя к одному и тому же.

Здесь я могу сделать целый ряд вещей. Очевидно, я могу просто выполнить правильные сценарии напрямую, или я могу подготовить аргумент RelocateFile для Restore-SQLDatabase. Что я хочу понять, так это то, что я упускаю что-то очевидное, что позволит мне пропустить необходимость делать эти вещи, чтобы инструмент мог обрабатывать это автоматически, как это может сделать SSMS.

Спасибо. 🙂

Комментарии:

1. -AutoRelocate изменяет только путь к папке в каталоге данных экземпляра SQL Server по умолчанию. Это полезно для операций резервного копирования/восстановления между различными экземплярами SQL Server на одном хосте. Если вы хотите переименовать файлы данных/журналов, вам нужно будет использовать -Relocate переключатель с массивом параметров SMO.RelocateFile.