SQL Server 2014 としていますが、SQL Server 2005 SP1 以降であれば、おそらく使えるのではと思っています。
# SQL Server 2008 は CU3 以降かもしれませんが…。
以下の情報も参考になります。
Automating Deployment of SQL Server Maintenance Plans
SSIS package query
SSIS Package Extract from MSDB
How to Transfer(Copy) Maintenance Plans from One Server to other???….
メンテナンスプランですが、SSIS パッケージとして保存されており、dtutil を使用することでエクスポートすることができます。
以下は SQL2014 という名前付きインスタンスから [MaintePlan] というメンテナンスプランを dtsx ファイルとしてエクスポートするためのコマンドの例となります。
dtutil.exe /SQL "Maintenance PlansMaintePlan" /Encrypt FILE;C:ssistempMaintePlan.dtsx;2;pass /SourceServer .SQL2014
サーバーで設定されているメンテナンスプランは以下のようなクエリで取得ができます。
SELECT foldername + '' + name as export_target, * FROM dbo.sysssispackagefolders spf INNER JOIN dbo.sysssispackages sp ON spf.folderid = sp.folderid WHERE foldername = 'Maintenance Plans'
エクスポートしたメンテナンスプランのインポートについては以下のコマンドで実施することができます。
以下のコマンドは既定のインスタンスにインポートをしている例となります。
dtutil.exe /FILE "C:ssistempMaintePlan.dtsx" /Decrypt pass /Copy SQL;"Maintenance PlansMaintePlan" /DestServer "localhost"
インポートする際には注意点があります。
dtsx 内には接続マネージャーの情報を保持しているのですが、この接続マネージャーの情報がエクスポート元の情報が入っているケースがあります。
dtsx ファイルは XML ファイルですのでテキストエディタで開くことができますので、[ConnectionManager] の設定値が適切かどうかをインポート前に確認しておく必要があります。
接続マネージャーの設定に問題がなければ、上記のコマンドを使用してインポートをします。
メンテナンスプランですが、
- メンテナンスプランの処理
- メンテナンスプランのスケジュール
の 2 つで構成されています。
メンテナンスプランのインポートでは処理の部分が取り込まれますが、スケジュールについては登録が行われていない状態となっています。
スケジュールを登録するためには、
- SQL Server Agent ジョブの移行
- メンテナンスプランを一度開いて再度保存
することで登録ができます。
基本的な流れを把握しておくと、msdb をリストアしなくても移行が可能になりそうですね。