Есть ли способ сделать резервную копию и восстановить весь SQL Server одной командой (базы данных, данные и пользователи)? Я успешно добился этого без сервера MySql, но могу найти только примеры экспорта отдельной базы данных для SQL Server.
Чтобы украсть один из моих собственных ответов :) Я успешно использовал этот сценарий для миграции сотен баз данных. (Этот сценарий требует подключения к сети между серверами.)
@ECHO ON
set controlfile=control.txt
set oldserver=
set oldmdfpath=
set newmdfpath=
set newserver=
set oldlogpath=
set newlogpath=
set movedmdfpath=
set movedldfpath=
SETLOCAL DISABLEDELAYEDEXPANSION
FOR /F %%L IN (%controlfile%%) DO (
SET "line=%%L"
SETLOCAL ENABLEDELAYEDEXPANSION
ECHO !line!
sqlcmd -E -S!oldserver! -Q"EXEC master.dbo.sp_detach_db @dbname = N'!line!'"
copy "!oldmdfpath!\!line!.mdf" !newmdfpath!
copy "!oldlogpath!\!line!_log.ldf" !newlogpath!
sqlcmd -E -S!newserver! -Q"CREATE DATABASE [!line!] ON ( FILENAME = N'!newmdfpath!\!line!.mdf' ),( FILENAME = N'!newlogpath!\!line!_log.ldf' ) FOR ATTACH"
move "!oldmdfpath!\!line!.mdf" !movedmdfpath!
move "!oldlogpath!\!line!_log.ldf" !movedldfpath!
ENDLOCAL
)
ENDLOCAL
(Файл control.txt содержит список перемещаемых баз данных. Вы можете получить их через select name from sys.databases where name not in ('master','msdb','model','tempdb')
.)
Резервное копирование / восстановление - самый безопасный метод, но отсоединение / подключение выполняется намного быстрее, когда вы получаете действительно большое количество баз данных.
Вам придется решать вопросы входа в систему (и возможные проблемы с sid) отдельно. Эта ссылка может помочь. То же самое по ссылкам JoeQwerty выше.