LoginSignup
2
4

More than 5 years have passed since last update.

PowerShellで旧DBサーバーから新DBサーバーに移行する

Last updated at Posted at 2018-04-18

旧DBサーバーからデータベースを新DBサーバーに移行する。
旧DBサーバー:SQL Server 2008 R2
新DBサーバー:SQL Server 2016
方針は下記の通り。

  1. 旧DBサーバーでデータベースのフルバックアップを取得する
  2. 旧DBサーバーからフルバックアップを新DBサーバーにコピーする
  3. 新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
2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4