スポンサードリンク

2017年11月14日

Exchange Server 2013 回復メールボックス

私の会社では、Exchange Server 2013 を使用しています。
DAGを設定して、2拠点にデータベースを置いていますので、万一の場合でも、メールデータを失う事は無いと考えていますが、一応、OSに標準装備されている、Windows Server バックアップで、バックアップは取ってあります。

このバックアップから、データを戻す事は無いと思いますが、今回、回復メールボックスの使い方を調べましたので、備忘録代わりに掲載しておきます。

手順は、以下の通りです。

(A) バックアップの edb ファイルをリストア用に準備
(B) edb ファイルから回復用データベースを作成
(C) 回復用データベース内のメールボックスから、既存のメールボックスへアイテムをリストア
(D) リストアされたアイテムの確認

(A) バックアップの edb ファイルをリストア用に準備
1.バックアップから復元したデータベース ファイル(.edb)、および トランザクション ログ ファイル、チェックポイント ファイルをメールボックス サーバー上の任意のフォルダに配置します。
Windows Server バックアップの「回復」で戻しました。

2.コマンドプロンプトを起動して、上記 1. で配置したフォルダのパスにカレント ディレクトリを移動します。

- 実行例
cd C:\Recovery\RDB01

3. データベースが Clean Shutdown の状態であるか確認します。
- 構文
Eseutil /mh <データベース ファイルのパス>

- 実行例
Eseutil /mh "C:\Recovery\RDB01\RDB01.edb"

上記コマンドの結果で、
"State: Dirty Shutdown"
の場合には、以下のコマンドによりトランザクション ログを再生します。
"State: Clean Shutdown"
である場合には、本手順は省略し、(B)に進みます。

- 構文
Eseutil /R Enn /l <トランザクション ログ ファイルの格納ディレクトリ> /d <データベース ファイルの格納ディレクトリ>
※ Enn はデータベースのログ生成プレフィックスです (E00、E01、E02 など)

- 実行例
Eseutil /R E00 /l "C:\Recovery\RDB01" /d "C:\Recovery\RDB01"

上記コマンドの実行後、Eseutil /mh コマンドにて、データベースが Clean Shutdown の状態であるか確認します。

ウチの場合、ここで手間取りました。
ファイルが使用中か、ロックされているという内容のメッセージが出て、ログ再生が出来ませんでした。
それも、コマンド実行から1時間以上もたってからエラーストップします。
DBのサイズにもよると思いますが、本来は、数秒で終了するはずです。

この症状は、サーバーを再起動しても解消しませんでした。
データベースが格納されているフォルダ名の変更はできるので、実際には他で使用されている筈はないと思われます。
フォルダ名変更直後、実行したところ、数秒で完了しました。

(B) edb ファイルから回復用データベースを作成
==============
1. Exchange 管理シェルを起動します。
2. 以下のコマンドレットを実行して、バックアップの edb ファイルから回復用データベースを作成します。
- 構文
New-MailboxDatabase -Recovery -Name <回復用データベース名> -Server <メールボックス サーバー名> -EdbFilePath <データベース ファイル配置先> -LogFolderPath <ログ ファイル作成先>

- 実行例
New-MailboxDatabase -Recovery -Name RDB01 -Server MBX01 -EdbFilePath "C:\Recovery\RDB01\RDB01.edb" -LogFolderPath "C:\Recovery\RDB01"

新規にメールボックス データベースを追加した後は、該当サーバー (上記の例では MBX01) にて、Microsoft Exchange Information Store サービスの再起動が必要です。
Microsoft Exchange Information Store サービスの再起動中は、当該メールボックス サーバーのデータベースにアクセスできない状態となります。
また、DAG 環境の場合はサービスを再起動するとフェール オーバーが発生する為、事前にデータベースのスイッチオーバーを実施するなどの対応を検討する必要があります。

3. 以下のコマンドレットを実行して、回復用データベースをマウントします。
- 構文
Mount-Database -Identity <回復用データベース名>

- 実行例
Mount-MailboxDatabase -Identity RDB01

(C) 回復用データベース内のメールボックスから、既存のメールボックスへアイテムをリストア
1. Exchange 管理シェルから以下のコマンドレットを実行して、リストア元のユーザーのメールボックスの GUID を確認します。
- 構文
Get-MailboxStatistics -Database <回復用データベース名> | Where {$_.DisplayName -eq <リストアするユーザーの表示名>} | fl DisplayName,MailboxGuid

- 実行例
Get-MailboxStatistics -Database "RDB01" | Where {$_.DisplayName -eq "user01"} | fl DisplayName,MailboxGuid

- 出力例
DisplayName : user01
MailboxGuid : 26d59c79-c694-477a-9325-e8c0e8b085e9

2. 以下のコマンドレットを実行して、リストア元のユーザーのメールボックスから、リストア先のユーザーのメールボックスにアイテムをリストアします。
- 構文
New-MailboxRestoreRequest -SourceDatabase <回復用データベース名> -SourceStoreMailbox <手順1. で確認した GUID> -TargetMailbox <復元先メールボックスのユーザー名> -AllowLegacyDNMismatch

- 実行例 ※ 以下の例では、回復用データベース内の user01 のメールボックス データを、user02 のメールボックスへ復元しています。
New-MailboxRestoreRequest -SourceDatabase "RDB01" -SourceStoreMailbox "26d59c79-c694-477a-9325-e8c0e8b085e9" -TargetMailbox "user02" -AllowLegacyDNMismatch

Get-MailboxRestoreRequest コマンドレットを使用して、メールボックス復元要求の状態を定期的に確認します。実行結果の Status が Completed で完了です。

これで、user01 のメールボックスに、user02 のメールデータがコピーされます。

完了したメールボックス復元要求は、以下のコマンドレットにて削除できます。

Get-MailboxRestoreRequest -Status Completed | Remove-MailboxRestoreRequest


D) リストアされたアイテムの確認
==============
user01 でログオンし、outlook を起動すれば、内容確認できます。
また、リストア先のメールボックスを他のユーザーが参照したい場合は、以下のコマンドレットを実行し、そのメールボックスに対するフル アクセス権を付与すれば、参照可能となります。
(これは、Exchange管理センターからでも設定可)

- 構文
Add-MailboxPermission -Identity <アクセス許可を追加するメールボックス> -User <アクセス許可を与えるメールボックス> -AccessRights <付与するアクセス許可>

- 実行例 ※ 以下の例では、user03 に user02 に対するフル アクセス権限を与えています。
Add-MailboxPermission -Identity user02 -User user03 -AccessRights FullAccess

アイテムのリストア完了後、作成した回復用データベースが不要になったら、以下のコマンドレットにて削除できます。

- 構文
Remove-MailboxDatabase <回復用データベース名>

- 実行例
Remove-MailboxDatabase "RDB01"



posted by まさ at 14:29| Comment(0) | ExchangeServer
システム管理者日記」の先頭へ