备份和恢复所有数据库和用户 SQL Server

备份和恢复所有数据库和用户 SQL Server

有没有办法用一个命令 (数据库、数据和用户) 备份和恢复整个 SQL Server?我已经成功地用 MySql 服务器实现了这一点,但只能找到 SQL Server 单个数据库导出的示例。

答案1

窃取我自己的一个答案:)我已经成功使用此脚本迁移了数百个数据库。 (此脚本需要服务器之间的网络连接。)

@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 的链接也一样。

相关内容