Назад | Перейти на главную страницу

Резервное копирование и восстановление всех баз данных и пользователей SQL Server

Есть ли способ сделать резервную копию и восстановить весь 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 выше.