[PowerShell] : SQL Server 2008 でバックアップを取る方法(Agent版あり)

実は、SQL Server 2008 のバックアップもPowerShellで簡単に実行することができます。

こんな、バックアップスクリプトをSQLで作っておき、それをInvoke-SqlCmd で、ファイル名を指定して実行するだけ。

SQLスクリプト

DECLARE @backupSetId as int 

DECLARE @now as nvarchar(10)
DECLARE @backupfile nvarchar(max)
SELECT 	@now = CONVERT(varchar, getdate(), 112),
@backupfile = N'D:\backup\SampleDb_' + @now + '.bak'
BACKUP DATABASE [SampleDb] TO  DISK = @backupfile
WITH NOFORMAT,
INIT,
NAME = N'SampleDb-完全 データベース バックアップ',
SKIP,
NOREWIND,
NOUNLOAD,
STATS = 10
SELECT 	@backupSetId = position
FROM
msdb..backupset
WHERE
database_name = N'SampleDb'
AND 	backup_set_id = (select max(backup_set_id) from msdb..backupset where database_name=N'SampleDb' )
IF @backupSetId is null
BEGIN
raiserror(N'確認に失敗しました。データベース ''SampleDb'' のバックアップ情報が見つかりません。', 16, 1)
END
RESTORE VERIFYONLY FROM  DISK = @backupfile WITH  FILE = @backupSetId, NOUNLOAD,  NOREWIND

上記バックアップスクリプト実行するPowerShellのコマンドライン

 # Invoke-SqlCmd -InputFile 'バックアップ用SQLスクリプト'
Invoke-SqlCmd -InputFile 'D:\backup\SampleDb_Backup.sql'

たった、これだけなんですが、1つだけ注意点!

それは、Invoke-SqlCmd コマンドをSQL Server Agent で動かす時、このままだとエラーになります。

ちなみに、SQL Server Agent で、PowerShellを動かしたい場合は、下記で行けます。

手順1:Management Studio で、[管理]→[SQL Server Agent] を選択する

手順2:新規ジョブを作成し、下記のように設定する

手順3:ジョブを作成する際、[種類]にPowerShellを選択し、コマンド欄には、下記のように入力します。(SQL Server 認証の例)

  
# ユーザIDとパスワードを指定する
#(コマンドライン実行と違い、SQL Server Agentは接続情報をもっていないため)
Invoke-SqlCmd -InputFile 'D:\backup\SampleDb_Backup.sql'
-ServerInstance "サーバ名\SQL Serverのインスタンス名" -U ユーザID -P パスワード

手順4:後は、ジョブに対するエラー発生時の対処方法などを設定すればOKです。

手順5:作成したジョブを右クリックし、[ステップでジョブを開始] します。

成功メッセージが返ってきて、所定のフォルダにDBバックアップファイルが無事格納されていればOKです。

ただ、もう1つわからないことがあります。(T-SQL を私が忘れているだけかもしれませんが)

それは、Invoke-SqlCmd コマンドって、SQL Server でいう、EXEC(正式名はEXECUTE) ですよね?

ストアド実行時に関しては戻り値がとれるんで、OKなんですが、SQLスクリプトファイルで実行したものって

戻り値とれないんでしたっけ?

もし、それができれば、Invoke-SqlCmd でスクリプトファイルをSQL Server Agent で実行しても、

きちんとした戻り値処理ができるんですけどね・・・ うーん、知っている方、教えてください。

コメント

  1. HIRO より:

    Invoke-SqlCmdっていろいろな使い道があるんですね。
    きっとSQLServerのPowerShellでは一番使用されるコマンドレットでしょうね。

    図入りでわかりやすい説明ありがとうございました。
    躓きやすいポイントに説明があるのもさすがですね!!

タイトルとURLをコピーしました