こんにちは、System Center サポート部の石井です。
今回は SCCM 2012 SP1 環境のバックアップとリストア方法について、ご説明します。
A. SCCM 2012 SP1 本体のデータベースのバックアップについて
B. SCCM 2012 SP1 本体のデータベースのリストア方法について
特に、リストア方法については、SCCM 2012 SP1 に累積更新 (CU) を適用している場合には、追加ステップが必要となりますので、ご注目下さい。
今回は、SCCM 2012 本体のバックアップに絞ってご紹介を行います。SCCM 2012 本体のほか、SCCM 2012 で配布を行っているソフトウェアのソース フォルダーや、SQL Server Reporting Services (SCCM のレポート) のバックアップ、System Center Update Publisher のバックアップ等は別途、必要に応じて実施いただく必要があります。詳細は "Backup and Recovery in Configuration Manager" ドキュメントをご参考下さい。
参考情報: Backup and Recovery in Configuration Manager
http://technet.microsoft.com/en-us/library/gg712697.aspx
※ 本ドキュメントに、DPM からのバックアップが可能という記載が見られます。SCCM 2012 の次期バージョンである System Center 2012 R2 Configuration Manager からは、DPM 2012 からダイレクトにバックアップが行えるようになっています。ただし、現行の SCCM 2012 SP1 では DPM からのダイレクトなバックアップはサポートされません。
A. SCCM 2012 SP1 本体のデータベースのバックアップについて
SCCM 2012 本体のバックアップは、SCCM 2012 の管理コンソールより [管理] ワークスペースを開き、画面左のツリーから [サイトの構成] - [サイト] を選択します。
サイト名を右クリックし、[サイトのメンテナンス] から "サイト サーバーのバックアップ" というタスクをスケジュールすることで、SCCM サイトのバックアップがスケジュール可能です。
ポイント: Windows Server バックアップによるシステム バックアップや、SQL Server としてのバックアップは可能なのか?
SCCM 2012 の SQL Server をホストするマシンにおいて、Windows Server バックアップを使ったシステム バックアップや、"CM_<サイト コード>" という名称の SQL データベースを SQL コマンド、あるいは DPM などのツールによってバックアップが可能であるか、という点について補足します。
結論から申しますと、SCCM 2012 本体のサービスを止めた状態で行っていただいた場合のみ、整合性が保証されます。
つまり、バックアップの流れとしては以下となります。
1. SCCM 2012 のサイト サーバーでサービスを停止します。(SMS_EXECUTIVE、SMS_SITE_COMPONENT_MANAGER)
2. SCCM 2012 の SQL Server データベースをバックアップします。(DPM を用いる、SQL コマンドでバックアップする、Windows Server バックアップでシステム バックアップをする。)
3. バックアップが開始した後は、1 で停止したサービスは開始可能です。
※ 3 について補足すると、昨今のバックアップは、VSS を使用しており、バックアップ開始時の静止点 (スナップショット) からのファイルコピーを行います。このため、バックアップが開始してしまえば、その後ファイルがいかに変更されようが、バックアップされるデータはバックアップ開始時の一貫性を維持しています。つまり、「バックアップ開始時に、SCCM のサービスが止まっていて、SQL にデータ変更を行っていない」ということのみ、保証してやれば、バックアップは問題無く使用出来ます。
さらに補足すると、2 をスケジュールしている場合、1 と 3 をタスク スケジューラーを使うことで、自動化が可能です。バックアップのスケジュールの5 ~ 10 分程度前に "NET STOP SMS_EXECUTIVE" "NET STOP SMS_SITE_COMPONENT_MANAGER" と実行し、バックアップ スケジュールの 5 ~ 10 分後に、"NET START SMS_EXECUTIVE" "NET START SMS_SITE_COMPONENT_MANAGER" と開始するよう、スケジュールして下さい。VSS スナップショットの作成は、長くても 20 秒程度ですので、5 分~ 10 分みれば十分です。また、バックアップ ジョブ自体は、数時間かかろうが、問題ありません。
このような運用だと、「SCCM にダウンタイムが発生するのでは?」とお気付きかと存じますが、通常の SCCM 2012 サイト バックアップのタスクを用いたとしても、SCCM 2012 本体のサービスは一時的に停止されます。つまり、バックアップにあたって、SCCM 2012 本体は必ず一時停止が必要ということです。SCCM 自体は、サービスをしばらく停止・開始しても、今まで行っていた処理は継続出来ますが、ダウンタイムが許容出来る夜間や週末にスケジュールいただく方が、ユーザー影響が少ないでしょう。
B. SCCM 2012 SP1 本体のデータベースのリストアについて
リストア前の下準備
SCCM 2012 のデータベースのリストアは、以下の方法で行います。
ア) SCCM 2012 のサイト バックアップのメンテナンス タスクを使ってバックアップしたデータを用いる場合
SCCM 2012 のデータベースを SQL Server から削除しておき、SCCM 2012 SP1 のセットアップ ディスクを挿入し、リカバリーを行います。
SQL Server Management Studio より、SCCM 2012 のデータベースに接続し、CM_<サイトコード> のデータベースを事前に削除しておく必要があります。CM_<サイト コード> のデータベースを [右クリック] し、[削除] を選択します。ポップアップした画面にて、"既存の接続を閉じる" オプションもチェックし、OK を押します。
CM_<サイト コード> データベースを事前に削除していない場合、リカバリー途中に、"データベースをバックアップから復元中に、SQL サーバーに既存の Configuration Manager データベースが見つかりました。" というエラーが発生し、失敗します。
イ) SCCM 2012 のデータベースを、SQL ベース、あるいは Windows Server バックアップにてバックアップしている場合
SCCM 2012 のデータベースを SQL Server にリストアしておき、SCCM 2012 SP1 のセットアップ ディスクを挿入し、リカバリーを行います。
SQL Server Management Studio より、SCCM 2012 のデータベースに接続し、CM_<サイトコード> のデータベースを事前に取得したバックアップから復元しておきます。
※ OS ごと立ち上がらなくなった、といった障害に備え、かならず SCCM 2012 サイト サーバーと SQL Server に��いては、Windows Server バックアップや DPM でベアメタル バックアップを行って下さい。OS リストア後、SCCM 2012 の復旧のため、適宜、上記いずれかを実施します。
※ SCCM 2012 SP1 のセットアップ ディスクからのリカバリーの重要性として、本手順の完了後、サイトの不整合を検知・修復する回復モードとなります。この回復ウィザードからリストアを完了しない場合、データに不整合があるまま動作する恐れがあります。(※ 例外として、SCCM 2012 の単一サイト、かつ、全機能を単一マシンにインストールしている場合のみ、Windows Server バックアップによるベアメタル バックアップからのリカバリーのみでも、正常動作します。)
ア) イ) いずれかの下準備を完了後、SCCM 2012 SP1 セットアップ ディスクからリカバリー ウィザードを実行します。
SCCM 2012 のデータベースのリカバリー ウィザードの実行
1. SCCM 2012 SP1 セットアップ ディスクを挿入します。
2. セットアップ ディスクの自動再生から "Configuratiom Manager 2012 SP1 のセットアップ" のウィザードが開始されます。"インストール" をクリックします。
3. "開始する前に" ページでは特に何もせず、次へ進みます。
4. "はじめに" ページでは、"サイトを復元する" オプションをチェックし、次へ進みます。
5. "サイト サーバーとデータベースの復元のオプション" では、復旧方法に応じて、以下の選択をします。
事前準備の ア)に相当: SCCM 2012 のメンテナンス タスクから取得したバックアップを使用する場合
"次の場所にあるバックアップ セットを使用してサイト データベースを復元する" を選択し、"参照" からバックアップ先のフォルダーを指定します。
事前準備の イ)に相当: 事前に SQL Server の DB を復元している場合
"手動で回復したサイト データベースを使用する" を指定します。
※バックアップが無い場合には、"このサイトの新しいデータベースを作成する" を設定し、以前と同じサイト コードで設定を行います。中央管理サイトが存在するような場合、そちらから設定を反映させるなど、最大限の復旧は試みますが、インベントリ履歴などのデータはクリアされ、再度クライアントからの取得を待つ必要があります。このオプションは今回の記事ではカバーしません。
6. "サイトの復元に関する情報" ページでは、自動的に同期時の参照先の他サイトが補完されます。(複数ある場合、任意のサイト FQDN を指定可能です。)
7. "プロダクト キー" ページでは、"この製品の製品版をインストールする" にチェックし、プロダクト キーを入力し、次へ進みます。
8. ここから、"前提条件の確認 ページで "インストールの開始" を行うまでは SCCM 2012 SP1 の初期インストール時と同じ設定のため、割愛します。
9. インストールで、SCCM 2012 SP1 の初期バージョンへのモジュールの復旧と、その後、復旧されたデータベースを元にした回復モードとなります。これらの処理は特に待たず、そのままウィザードは完了してください。
10. バックアップ取得時、SCCM 2012 SP1 に累積更新 (CU) を適用していた場合には、ウィザードを閉じてすぐに、以下の CU の再インストール手順を実施してください。CU の再適用を行わないままだと、回復モードが成功しない場合があります。CU の再インストール完了後、回復モードが完了すれば、SCCM 2012 管理コンソールから設定変更などの作業が行えます。
ポイント: SCCM 2012 SP1 に CU を適用している場合
SCCM 2012 SP1 には、2013 年 8 月時点で、CU 2 までリリースされています。SCCM 2012 SP1 のディスクからリカバリーを行うと、リカバリーの過程で、SCCM 2012 のインストール状態が CU 無しの SP1 初期状態に巻き戻るという状況が発生しますので、バックアップ時点の CU を再適用する必要があります。
ただし、この状態だと、OS の [プログラムと機能] からは、一見して CU が既に適用されているという状況に見えてしまいます。この状況では、CU の再インストールが行えないため、このインストール登録を削除するため、後述の手順を追加する必要があります。
※ ステップ 1 ~ 2 の CU 登録の削除はバックアップからのリストアの前後、どちらでも問題ありません。ただし、CU の再インストールについては、リストア後、なるべく時間をあけずに同時に行って下さい。
ステップ 1. CU の更新プログラムのプロダクト コードを取得します。
(ステップ 1 は、SCCM サーバーで行う必要は無く、クライアント マシンでも問題ありません。)
1-1. CU のインストーラー ファイルを解凍し、中の MSI ファイルを取得します。
コマンド プロンプトから、以下のコマンドを実行します。
CM12-SP1CU2-KB2854009-X64-ENU.exe /x
1-2. ポップアップ画面が出てきて、解凍先が聞かれるので、一時フォルダーを指定して解凍します。
1-3. フォルダー内に、MSI ファイルが存在しますので、ファイルを確認します。
例: SCCM 2012 SP1 CU2 だと "cm12-sp1cu2-kb2854009-x64-enu.msi" となります。
1-4. MSI ファイルからプロダクト コードを検出する VBS ファイルを作成します。
以下をテキスト エディターにコピーし、".vbs" 形式で保存します。
-----------------------------
' Connect to Windows installer object
On Error Resume Next
Dim installer : Set installer = Nothing
Set installer = Wscript.CreateObject("WindowsInstaller.Installer")
' Open database
Dim databasePath:databasePath = Wscript.Arguments(0)
Dim database : Set database = installer.OpenDatabase(databasePath, 0)
' Get the ProductCode from database
Dim query, view, record
query = "SELECT `Value` FROM `Property` WHERE `Property`='ProductCode'"
Set view = database.OpenView(query)
view.Execute : CheckError
Set record = view.Fetch
If NOT record Is Nothing Then
Wscript.Echo record.StringData(1)
End If
-----------------------------
1-5. コマンド プロンプトより、保存した VBS ファイルの引数に、MSI ファイルを指定します。
コマンド例)
cscript "C:\temp\check.vbs" "C:\temp\cm12-sp1cu2-kb2854009-x64-enu.msi"
結果例)
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.
{6600CD0C-1503-490D-9351-9556F689837D}
上記から、SCCM 2012 SP1 CU2 のプロダクト コードは "{6600CD0C-1503-490D-9351-9556F689837D}" であると確認できます。
ステップ 2. [プログラムと機能] から CU を強制削除します。
コマンド構文)
msiexec /x <プロダクト コード> /L*V <インストール ログ ファイルのパス>
CU2 の場合のコマンド例)
msiexec /x {6600CD0C-1503-490D-9351-9556F689837D} /L*V C:\temp\uninstall.log
※ インストールのためのログの保存先フォルダーはあらかじめ作成しておきます。
削除処理には、しばらく時間がかかります。以下のように、CU のインストーラーのウィンドウが消え、コントロール パネルの [プログラムと機能] の更新プログラム一覧から消えるまでお待ちください。
[コントロール パネル] - [プログラムと機能] より、"インストールされた更新プログラムを表示" を選択すると、以下のようなエントリーがありますが、CU 削除手順にてこの登録が消滅します。
念のためログ ファイルをご確認いただく場合、以下のような記録があれば成功です。
MSI (s) (D4:E4) [14:35:17:031]: 製品: Cumulative Update 2 for Configuration Manager SP1 (KB2854009) -- 削除を正しく完了しました。
MSI (s) (D4:E4) [14:35:17:031]: Windows インストーラーにより製品が削除されました。製品名: Cumulative Update 2 for Configuration Manager SP1 (KB2854009)、製品バージョン: 05.00.7804.1300、製品の言語: 0、製造元: Microsoft Corporation、削除の成功またはエラーの状態: 0
ステップ 3.アンインストールした CU を、再度サイト サーバーに適用します。
CU の再インストールにあたっては、コンソール・サーバー・クライアントのアップデート パッケージを作成するか、それぞれ選択項目がありますが、すべて以前のインストール時に作成されているので無効に設定してください。無効にせずとも、完了後に警告が出ますが、これは「既にパッケージが存在するので再作成できなかった」という事を示すだけなので、問題ありません。
CU の再インストールの完了後、指示に応じてコンピュータの再起動が必要な場合があります。CU をベースにした SCCM 2012 インストール状況となり、自動的にサイトの回復モードが実行されます。
上記完了にて、SCCM 2012 SP1 with CU の環境のリストアが完了します。
注意事項: CU の強制アンインストール手順は、SCCM 2012 SP1 CU 環境のリストアの際のみご利用ください。運用環境での CU のアンインストールはサポートされません。CU は、バイナリだけでなく、データベースの定義など様々な箇所を変更するため、運用環境で CU の強制アンインストールをすると環境破損に繋がる恐れがあります。