修復済みの Exchange データベースのサポート ポリシーの変更
(この記事は 2015 年 5 月 1 日に Office Blogs に投稿された記事 New Support Policy for Repaired Exchange Databases の翻訳です。最新情報については、翻訳元の記事をご参照ください。)
データベースの修復プロセスは、多くの場合、他の回復手段を利用できない場合に Exchange データベースを回復するための最終手段として使用されます。このプロセスは、マイクロソフト サポートから勧告を受け、かつその他の回復手段をすべて試したと判断した場合にのみ実施します。これまで何年にもわたり、Exchange の多くのバージョンでほぼ同じ修復プロセスが採用されていましたが、マイクロソフトが広範なサポート案件の分析から得た情報に基づき、今回このプロセスが変更されます。
簡単に言うと、修復処理が行われたデータベースのサポート ポリシーを変更します。従来、ESEUTIL および ISINTEG (修復コマンドレット) を使用して修復されたデータベースはサポート対象となっていました。一方、新しいサポート ポリシーでは、修復カウントが 1 以上であるデータベースの退避が必要になります。つまり、そのデータベースに格納されているすべてのメールボックスを新しいデータベースに移行する必要があります。
現在の修復プロセス
修復プロセスは次の 3 つの手順から構成されます。
- ページ レベルでのデータベースの修復
- データベースの最適化によるデータベースの再構築と再作成
- データベース内の論理構造の修復
手順 1 には、ESEUTIL /p を使用します。これは通常、データベースがページ レベルで破損している場合に行います。たとえば、-1018 JET エラーが発生している場合や、データベースをクリーン シャットダウン状態にするために必要なログ ファイルが存在せずデータベースがダーティ シャットダウン状態のままになっている場合です。ESEUTIL /p を実行すると、データが損失するおそれがあるという警告メッセージが表示されます。続行するには、[OK] を選択します。
[PS] C:\Program Files\Microsoft\Exchange Server\Mailbox\First Storage Group>eseutil /p '.\Mailbox Database.edb'
Extensible Storage Engine Utilities for Microsoft(R) Exchange Server
Version 08.03
Copyright (C) Microsoft Corporation. All Rights Reserved.
Initiating REPAIR mode...
Database: .\Mailbox Database.edb
Temp. Database: TEMPREPAIR4520.EDB
Checking database integrity.
The database is not up-to-date. This operation may find that this database is corrupt because data from the log files has yet to be placed in the database. To ensure the database is up-to-date please use the 'Recovery' operation.
Scanning Status (% complete)
0 10 20 30 40 50 60 70 80 90 100
|----|----|----|----|----|----|----|----|----|----|
.
Rebuilding MSysObjectsShadow from MSysObjects.
Scanning Status (% complete)
0 10 20 30 40 50 60 70 80 90 100
|----|----|----|----|----|----|----|----|----|----|
...................................................
Checking the database.
Scanning Status (% complete)
0 10 20 30 40 50 60 70 80 90 100
|----|----|----|----|----|----|----|----|----|----|
...................................................
Scanning the database.
Scanning Status (% complete)
0 10 20 30 40 50 60 70 80 90 100
|----|----|----|----|----|----|----|----|----|----|
...................................................
Repairing damaged tables.
Scanning Status (% complete)
0 10 20 30 40 50 60 70 80 90 100
|----|----|----|----|----|----|----|----|----|----|
...................................................
Repair completed. Database corruption has been repaired!
Note:
It is recommended that you immediately perform a full backup of this database. If you restore a backup made before the repair, the database will be rolled back to the state it was in at the time of that backup.
Operation completed successfully with 595 (JET_wrnDatabaseRepaired, Database corruption has been repaired) after 30.187 seconds.
この段階で、データベースはクリーン シャットダウン状態になり、修復プロセスを進められるようになります。この状態は、ESEUTIL /mh で確認することが可能です。
[PS] C:\Program Files\Microsoft\Exchange Server\Mailbox\First Storage Group>eseutil /mh '.\Mailbox Database.edb'
State: Clean Shutdown
手順 2 では、ESEUTIL /d を使用してデータベースを最適化します。最適化を行うには、一時データベースをホストするボリュームに十分な空き領域が必要です (通常、データベースのサイズの 110% に相当するディスクの空き領域が必要になります)。
[PS] C:\Program Files\Microsoft\Exchange Server\Mailbox\First Storage Group>eseutil /d '.\Mailbox Database.edb'
Extensible Storage Engine Utilities for Microsoft(R) Exchange Server
Version 08.03
Copyright (C) Microsoft Corporation. All Rights Reserved.
Initiating DEFRAGMENTATION mode...
Database: .\Mailbox Database.edb
Defragmentation Status (% complete)
0 10 20 30 40 50 60 70 80 90 100
|----|----|----|----|----|----|----|----|----|----|
...................................................
Moving 'TEMPDFRG3620.EDB' to '.\Mailbox Database.edb'... DONE!
Note:
It is recommended that you immediately perform a full backup of this database. If you restore a backup made before the defragmentation, the database will be rolled back to the state it was in at the time of that backup.
Operation completed successfully in 7.547 seconds.
手順 3 は、データベース内のオブジェクトの論理的な修復です。その方法は Exchange のバージョンによって異なります。
Exchange 2007 では、次の例のように、ISINTEG を使用して論理的な修復を実行します。
C:\>isinteg -s wingtip-e2k7 -fix -test alltests -verbose -l c:\isinteg.log
Databases for server wingtip-e2k7:
Only databases marked as Offline can be checked
Index Status Database-Name
Storage Group Name: First Storage Group
1 Offline Mailbox Database
Enter a number to select a database or press Return to exit.
1
You have selected First Storage Group / Mailbox Database.
Continue?(Y/N)y
Test Categorization Tables result: 0 error(s); 0 warning(s); 0 fix(es); 0 row(s); time: 0h:0m:0s
Test Restriction Tables result: 0 error(s); 0 warning(s); 0 fix(es); 0 row(s); time: 0h:0m:0s
Test Search Folder Links result: 0 error(s); 0 warning(s); 0 fix(es); 0 row(s);time: 0h:0m:0s
Test Global result: 0 error(s); 0 warning(s); 0 fix(es); 1 row(s); time: 0h:0m:0s
Test Delivered To result: 0 error(s); 0 warning(s); 0 fix(es); 0 row(s); time: 0h:0m:0s
Test Repl Schedule result: 0 error(s); 0 warning(s); 0 fix(es); 0 row(s); time:0h:0m:0s
Test Timed Events result: 0 error(s); 0 warning(s); 0 fix(es); 0 row(s); time: 0h:0m:0s
Test reference table construction result: 0 error(s); 0 warning(s); 0 fix(es); 0 row(s); time: 0h:0m:0s
Test Folder result: 0 error(s); 0 warning(s); 0 fix(es); 4996 row(s); time: 0h:0m:2s
Test Deleted Messages result: 0 error(s); 0 warning(s); 0 fix(es); 0 row(s); time: 0h:0m:0s
Test Message result: 0 error(s); 0 warning(s); 0 fix(es); 1789 row(s); time: 0h:0m:0s
Test Attachment result: 0 error(s); 0 warning(s); 0 fix(es); 406 row(s); time: 0h:0m:0s
Test Mailbox result: 0 error(s); 0 warning(s); 0 fix(es); 249 row(s); time: 0h:0m:0s
Test Sites result: 0 error(s); 0 warning(s); 0 fix(es); 996 row(s); time: 0h:0m:0s
Test Categories result: 0 error(s); 0 warning(s); 0 fix(es); 0 row(s); time: 0h:0m:0s
Test Per-User Read result: 0 error(s); 0 warning(s); 0 fix(es); 0 row(s); time:0h:0m:0s
Test special folders result: 0 error(s); 0 warning(s); 0 fix(es); 0 row(s); time: 0h:0m:0s
Test Message Tombstone result: 0 error(s); 0 warning(s); 0 fix(es); 0 row(s); time: 0h:0m:0s
Test Folder Tombstone result: 0 error(s); 0 warning(s); 0 fix(es); 0 row(s); time: 0h:0m:0s
Now in test 20(reference count verification) of total 20 tests; 100% complete.
Typically when ISINTEG completes, it advises reviewing the isinteg.log file. At the end of the file is a summary section, listing the number of errors encountered. If the number of errors is greater than zero, you need to re-run the command. Continued repairs need to be performed until the error count reaches 0 or the same number of errors is encountered after two executions.
. . . . . SUMMARY . . . . .
Total number of tests : 20
Total number of warnings : 0
Total number of errors : 0
Total number of fixes : 0
Total time : 0h:0m:3s
Exchange 2010 以降では ISINTEG が廃止され、一部の機能が New-MailboxRepairRequest および New-PublicFolderDatabaseRepairRequest コマンドレットによって提供されます。どちらも、データベースのオンライン時に修復処理を実行できます。
Exchange 2010 の場合
[PS] C:\Windows\system32>New-MailboxRepairRequest -Mailbox user252 -CorruptionType SearchFolder,FolderView,AggregateCounts,ProvisionedFolder,MessagePtagCN,MessageID
RequestID Mailbox ArchiveMailbox Database Server
--------- ------- -------------- -------- ------
7f499ce3-e Wingtip False Mailbox. WINGTIP-E2K10.Wingti...
Exchange 2013 の場合
[PS] C:\>New-MailboxRepairRequest -Mailbox User532 -CorruptionType SearchFolder,FolderView,AggregateCounts,
ProvisionedFolder,ReplState,MessagePTAGCn,MessageID,RuleMessageClass,RestrictionFolder,FolderACL,
UniqueMidIndex,CorruptJunkRule,MissingSpecialFolders,DropAllLazyIndexes,ImapID,ScheduledCheck,Extension1,
Extension2,Extension3,Extension4,Extension5
Identity Task Detect Only Job State Progress
-------- ---- ----------- --------- --------
a44acf2b {Sea False Queued 0
上記の修復処理が完了すると、多くの場合、データベースをマウントして通常のユーザー操作を続けることが可能でした。
修復済みデータベースのサポートの変更
マイクロソフトは過去 2 年間にわたり、お客様のサーバーから自動的にアップロードされたワトソン博士のダンプを確認し、インフォメーション ストアのクラッシュの原因を調査してきました。こうしたクラッシュは、不可解かつ一見不可能なストア レベルの破損が原因で発生していました。ストア レベルの破損の種類は多様で、データベースやサーバー、Exchange のバージョン、お客様環境もさまざまでしたが、こうしたケースのほぼすべてにおいて、ある重要な事実が確認されました。それは、データベースに記録されている修復カウントが 1 以上であるという点です。
ESEUTIL /p が実行され、かつデータベースの修復が必要な場合、修復カウントの値が増加し、データベース ヘッダーに修復日時が記録されます。データベース ヘッダーに格納される修復情報は、オフラインでの最適化の後も保持されます。ヘッダー内の修復情報は、ESEUTIL /mh で確認することが可能です。
[PS] C:\Program Files\Microsoft\Exchange Server\Mailbox\First Storage Group>eseutil /mh '.\Mailbox Database.edb'
Extensible Storage Engine Utilities for Microsoft(R) Exchange Server
Version 08.03
Copyright (C) Microsoft Corporation. All Rights Reserved.
Initiating FILE DUMP mode...
Database: .\Mailbox Database.edb
File Type: Database
Format ulMagic: 0x89abcdef
Engine ulMagic: 0x89abcdef
Format ulVersion: 0x620,12
Engine ulVersion: 0x620,12
Created ulVersion: 0x620,12
DB Signature: Create time:04/05/2015 08:39:24 Rand:2178804664 Computer:
cbDbPage: 8192
dbtime: 1059112 (0x102928)
State: Clean Shutdown
Log Required: 0-0 (0x0-0x0)
Log Committed: 0-0 (0x0-0x0)
Streaming File: No
Shadowed: Yes
Last Objid: 4020
Scrub Dbtime: 0 (0x0)
Scrub Date: 00/00/1900 00:00:00
Repair Count: 2
Repair Date: 04/05/2015 08:39:24
Old Repair Count: 0
Last Consistent: (0x0,0,0) 04/05/2015 08:39:25
Last Attach: (0x0,0,0) 04/05/2015 08:39:24
Last Detach: (0x0,0,0) 04/05/2015 08:39:25
Dbid: 1
Log Signature: Create time:00/00/1900 00:00:00 Rand:0 Computer:
OS Version: (6.1.7601 SP 1 NLS 60101.60101)
Previous Full Backup:
Log Gen: 0-0 (0x0-0x0)
Mark: (0x0,0,0)
Mark: 00/00/1900 00:00:00
Previous Incremental Backup:
Log Gen: 0-0 (0x0-0x0)
Mark: (0x0,0,0)
Mark: 00/00/1900 00:00:00
Previous Copy Backup:
Log Gen: 0-0 (0x0-0x0)
Mark: (0x0,0,0)
Mark: 00/00/1900 00:00:00
Previous Differential Backup:
Log Gen: 0-0 (0x0-0x0)
Mark: (0x0,0,0)
Mark: 00/00/1900 00:00:00
Current Full Backup:
Log Gen: 0-0 (0x0-0x0)
Mark: (0x0,0,0)
Mark: 00/00/1900 00:00:00
Current Shadow copy backup:
Log Gen: 0-0 (0x0-0x0)
Mark: (0x0,0,0)
Mark: 00/00/1900 00:00:00
cpgUpgrade55Format: 0
cpgUpgradeFreePages: 0
cpgUpgradeSpaceMapPages: 0
ECC Fix Success Count: none
Old ECC Fix Success Count: none
ECC Fix Error Count: none
Old ECC Fix Error Count: none
Bad Checksum Error Count: none
Old bad Checksum Error Count: none
Operation completed successfully in 0.78 seconds.
修正不可能な破損はデータベースの修復後もそのまま残り、ストアのクラッシュやサーバーの不安定化の原因になるおそれがあります。そのため、Repair Count (修復カウント) または Old Repair Count (古い修復カウント) が 1 以上である状態が続いている Exchange データベースの退避が必要となるようにサポート ポリシーを変更しました。メールボックス (およびパブリック フォルダー) を新しいデータベースに移行すれば、基礎となるデータベース構造には、データベースの修復プロセスでは修正できない破損がありません。その結果、ストアのクラッシュやサーバーの不安定化を防ぐことが可能です。
Tim McMichael