旧DBサーバーからデータベースを新DBサーバーに移行する。
旧DBサーバー:SQL Server 2008 R2
新DBサーバー:SQL Server 2016
方針は下記の通り。
- 旧DBサーバーでデータベースのフルバックアップを取得する
- 旧DBサーバーからフルバックアップを新DBサーバーにコピーする
- 新DBサーバーにフルバックアップをリストアする
旧DBサーバーでデータベースのフルバックアップを取得する
SQLは以下の通り。
バックアップ先はローカルしか指定できない。。。
fullBackup.sql
BACKUP DATABASE [TEST] TO DISK = N'E:\TEST\Backup\TEST_FULLBACKUP' WITH NOFORMAT, NOINIT, NAME = N'TEST-完全 データベース バックアップ', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
sqlcmdを使って旧DBサーバーでSQLを実行する。
$oldDBServerName = "OLD"
$dBInstanceName = "TEST"
$userName = "sa"
$password = "password"
$scriptDir=Split-Path $MyInvocation.MyCommand.Path -Parent
$mainBackupSQL = $scriptDir + "\..\SQL\fullBackup.sql"
sqlcmd -S $oldDBServerName -d $dBInstanceName -U $userName -P $password -i $backupSQL
旧DBサーバーからフルバックアップを新DBサーバーにコピーする
バックアップはローカルでしか取得できないので別途コピーする必要がある。
robocopyでコピーする。
$oldDBBackupSrcDir = "\\OLD\E$\TEST\Backup\"
$newDBBackupDstDir = "E:\TEST\Backup\"
$backupFileName = "TEST_FULLBACKUP"
robocopy $oldDBBackupSrcDir $newDBBackupDstDir $backupFileName /r:0
新DBサーバーにフルバックアップをリストアする
新DBサーバーにコピーしたフルバックアップを使ってリストアする。
SQLは以下の通り。
restore.sql
USE [master]
RESTORE DATABASE [TEST] FROM DISK = N'E:\TEST\Backup\TEST_FULLBACKUP' WITH FILE = 1, NOUNLOAD, STATS = 5
GO
後は新DBサーバーでSQLを実行するだけ。
$newDBServerName = "NEW"
$userName = "sa"
$password = "password"
$scriptDir=Split-Path $MyInvocation.MyCommand.Path -Parent
$restoreSQL = $scriptDir + "\..\SQL\restore.sql"
sqlcmd -S $newDBServerName -U $userName -P $password -i $restoreSQL
まとめ
スクリプトを実行するだけで旧DBサーバーのデータベースが新DBサーバーにリストアされるようになった。
めでたし。
SQLは別途用意してね。
$oldDBServerName = "OLD"
$newDBServerName = "NEW"
$dBInstanceName = "TEST"
$userName = "sa"
$password = "password"
$scriptDir=Split-Path $MyInvocation.MyCommand.Path -Parent
$mainBackupSQL = $scriptDir + "\..\SQL\fullBackup.sql"
$restoreSQL = $scriptDir + "\..\SQL\restore.sql"
$oldDBBackupSrcDir = "\\OLD\E$\TEST\Backup\"
$newDBBackupDstDir = "E:\TEST\Backup\"
$backupFileName = "TEST_FULLBACKUP"
# バックアップ
sqlcmd -S $oldDBServerName -d $dBInstanceName -U $userName -P $password -i $backupSQL
# バックアップ転送
robocopy $oldDBBackupSrcDir $newDBBackupDstDir $backupFileName /r:0
# リストア
sqlcmd -S $newDBServerName -U $userName -P $password -i $restoreSQL