PowerShellのスクリプトでSQL Server 2008のDBのデタッチとアタッチ

SQL ServerのDBをデタッチしてアタッチするPowerShellスクリプトのメモです。

  • DetachAttach.ps1
#PowerShellスクリプトを呼び出せるように、事前に「Set-ExecutionPolicy RemoteSigned」コマンドを呼び出しておく

###設定を変数定義
$serverInstance = "localhost\sqlexpress"
#$filePath = "C:\hoge\database"
$filePath = (Get-Location).Path
$dbName = "NorthWind"
$dataFile = "NorthWind"

###PowerShell for SQL Serverのスナップインをロード
Add-PSSnapin SqlServerCmdletSnapin100
Add-PSSnapin SqlServerProviderSnapin100

###SQL Serverに接続
cd SQLSERVER:\SQL\$serverInstance

###デタッチ
Write-Host "デタッチします"
(Get-Item .).DetachDatabase("$dbName",$false)


###アタッチ
Write-Host "アタッチします"
$files = New-Object System.Collections.Specialized.StringCollection
$files.Add("${filePath}\${dataFile}.mdf")
$files.Add("${filePath}\${dataFile}_log.ldf")

(Get-Item .).AttachDatabase("$dbName",$files)

Write-Host "実行終了"


上記のPowerShellスクリプトを呼び出すバッチファイル。

  • DetachAttach.bat
PowerShell -Command "&{.\DetachAttach.ps1}"
pause

ちなみに、DBに接続があるとデタッチに失敗することがあるので、DBアクセスしているアプリ(IIS)などを停止するか直前にDBのサービスの再起動をしておきます。