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のサービスの再起動をしておきます。