Sql-Server

移動 100 個數據庫的最簡單方法

  • June 22, 2013

我需要將大約 150 個數據庫從一台伺服器移動到另一台伺服器。

  1. SQL Server 2008網路版
  2. SQL Server 2012預覽版(在不同的數據中心 - 東海岸 Azure)

我計劃使用 RedGate Packager 一次移動一個,但這需要一段時間。

有沒有更快更簡單的方法?

我認為有效執行此操作的最佳方法是備份所有數據庫並通過站點到站點 VPN 傳輸(在您的位置和東海岸 Azure 數據中心之間設置)。

要備份所有數據庫,請使用以下步驟設置 SQL 代理作業。請記住,它是 CmdExec 類型,而不是 T-SQL 語句。

sqlcmd -E -S $(ESCAPE_SQUOTE(SRVR)) -d master -Q "EXECUTE [dbo].[DatabaseBackup] @Databases = 'ALL_DATABASES', @Directory = N'C:\SQL Backups', @BackupType = 'FULL', @Verify = 'Y', @CleanupTime =312, @CheckSum = 'Y',@Compress = 'Y'" -b

而且很簡單,將所有 .bak 文件從 C:\SQL Backups 複製到遠端 Azure 位置。並使用還原腳本一次還原所有數據庫。

我最近發現了一個工具 ( Teracopy ),它的複制/粘貼速度比傳統的 Windows 伺服器複製功能快得多。

希望這可以幫助。

兩個數據中心之間是否有網路連接?如果是這樣,這對我有用:

將“select name from sys.databases where name not in (‘master’, ‘msdb’, ‘model’, ’tempdb’)”的輸出粘貼到名為 control.txt 的文件中。

製作一個名為 migrate.cmd 的腳本,如下所示(當然,您需要在頂部添加值):


@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

祝你好運!

引用自:https://dba.stackexchange.com/questions/31395