Exchange – naprawa bazy danych – aktualny przewodnik / Exchange Recover Database Complete Fast Guide

Czasami się zdarzy, że nasza baza danych w Exchange nie daje się zamontować, a próby montowania kończą się to komunikatami typu:

  • Operation failed with message: MapiExceptionJetErrorConsistentTimeMismatch: Unable to mount database
  • MapiExceptionJetErrorreadVerify Failure

Do naprawy bazy służy narzędzie eseutil i o dziwo na Internetach, nie ma przewodnika, co zrobić krok po kroku i dość szybko natrafiamy na konieczność użycia komendy /p, która to naprawia bazę danych, ale wraz ze stratą danych i celowo tutaj tego nie opisujemy, jako ostateczność odzyskania danych.

Poniżej co należy wykonać, aby naprawić bazę danych:

eseutil /ml “e:\Exchange\Databases_Logs\Mailbox_DB2″ – ścieżka do katalogu z logami, sprawdza poprawność logów transakcyjnych

eseutil /mh ” e:\Exchange\Databases_Data\Mailbox_DB2″ – ścieżka do plików z bazą danych, wyświetla informacje o bazie danych – zazwyczaj będzie tutaj informacja Dirty SchutDown i trzeba dobrowadzić do stanu Clean ShutDown

 

Naprawa bazy danych:

eseutil /R E00 /l “e:\Exchange\Databases_Logs\Mailbox_DB2″ /d ” e:\Exchange\Databases_Data\Mailbox_DB2″ /S ” e:\Exchange\Databases_Data\Mailbox_DB2″

przełączniki:
/l – ścieżka do katalogu z logami
/d – ścieżka do katalogu z bazą danych – bez podania pliku edb i bez \ na końcu!
/S – miejsce na nowy check point – w miejscu tym nie powinnu być pliku .chk (możemy go skasować bądź przenieść w miejscy, gdyby był z jakiegoś powodu potrzebny).

Po wykonaniu tej operacji logi transakcyjne będą aplikowane do pliku bazy danych. Gdyby skończyło się to komunikatem:

  • JET_errReadVerifyFailure, Checksum error on a database page

Oznacza, to iż plik danych jest uszkodzony i przed opcją /p uchronić nas może tylko odzyskanie go z backupu. Możemy odzyskać go do innej lokalizacji i w samym Exchange wykonać operacje, która wskaże nam nowy plik edb, ale bez kopiowania starego pliku:

Move-DatabasePath -Identity Mailbox_DB2 -EdbFilePath “F:\New_patch\Mailbox_DB2.edb” -ConfigurationOnly

Po odzyskaniu pliku .edb z backupu aplikujemy logi transakcyjne opisaną już metodą i w ten sposób nie powinniśmy stracić żadnych danych! Po wykonaniu powinniśmy móc zamontować bazę danych:

Get-MailboxDatabase |Mount-Database

 

A tak przy okazji logi transakcyjne są kasowane po prawidłowym wykonaniu backupu.

 


 

Sometimes it happens that our Exchange database cannot be mounted, and mounting attempts end with messages like:

  • Operation failed with message: MapiExceptionJetErrorConsistentTimeMismatch: Unable to mount database
  • MapiExceptionJetErrorreadVerify Failure

The eseutil tool is used to repair the database and I noticed that on the Internet, there is no guide what to do step by step. Moreover we can quickly find option to use the /p command that repairs the database, but with the loss of data. It should be used as a last hope option!

What you need to do to repair the database:

eseutil / ml “e: \ Exchange \ Databases_Logs \ Mailbox_DB2” – path to the directory with logs, checks the correctness of transaction logs

eseutil / mh “e: \ Exchange \ Databases_Data \ Mailbox_DB2” – path to files with database, displays information about the database – it will usually be Dirty SchutDown information and need to be brought to the Clean ShutDown state

Database repair:

eseutil / R E00 / l “e: \ Exchange \ Databases_Logs \ Mailbox_DB2” / d “e: \ Exchange \ Databases_Data \ Mailbox_DB2” / S “e: \ Exchange \ Databases_Data \ Mailbox_DB2”

switches:
/ l – directory path with logs
/ d – path to the database directory – without the edb file and without \ at the end!
/ S – a place for a new check point – in this place there should not be a .chk file (we can delete it or move it to a place if it was needed for some reason).

After this operation, transaction logs will be applied to the database file. If it would end with a message:

JET_errReadVerifyFailure, Checksum error on a database page

It means that the data file is damaged and we need to recover it from the backup (or use /p option). We can recover it to a different location and perform operation in that tell Exchange to use a new edb location without copying the old file:

Move-DatabasePath -Identity Mailbox_DB2 -EdbFilePath “F: \ New_patch \ Mailbox_DB2.edb” -ConfigurationOnly

After recovering the .edb file from the backup, we can apply transactional logs with the method already described and in this way we will not lose any data. After execution, we should be able to mount the database:

Get-MailboxDatabase | Mount-Database

Transaction logs are deleted after proper backup.