Já vám to vyexportuju. Dodejte mi mrtvou databázi a dostanete zpět mailboxy ve formě PST souborů. Následuje popis důvodů a postupu, jak to udělat sami, ale když to necháte na mě, nebudete se s tím trápit :-) Celková rychlost exportu je cca 8 GB za hodinu.
Proč? Existuje na to samozřejmě Exchange cmdlet (tedy příkaz v Exchange Management Shell konzoli) nazvaný New-MailboxExportRequest. Tím jste schopni nechat nějakou poštovní schránku z mailbox databáze vyexportovat do PST souboru. PST soubor si už můžete jednoduše připojit do Outlooku a normálně procházet maily.
Jenže.
Jenže takhle se dá exportovat jen z běžné mailbox databáze (mailbox database). Nelze exportovat ze záchranné databáze (recovery mailbox database - to se vytváří pomocí cmdlet New-MailboxDatabase -Recovery). Ta běžná databáze musí být připojena online (mounted) v databázovém motoru - službě Microsoft Exchange Information Store (MSExchangeIS).
Tím pádem nemůže být nijak poškozena. Musí také být z Exchange serveru ze stejně pojmenované organizace (Exchange organzation). Zjednodušeně řečeno, nelze tedy obnovit mailbox databázi z jednoho Exchange serveru do jiného, pokud nemají stejně pojmenovanou organizaci. Ve výchozím stavu se to obvykle jmenuje First Organization, ale člověk si to rád změní, jako téměř jedinou možnost, hned na začátku instalace.
Scénáře kdy je to problém:
- zhroutil se mi Exchange v doméně, zkoušel jsem obnovu, ale databáze nelze připojit (mount), protože je poškozená - je tzv. v dirty shutdown, například po neočekávaném pádu operačního systému, nebo pádu služby MSExchangeIS (proces store.exe). Nekorektní vypnutí serveru, třeba v důsledku obvyklé chyby v antiviru, nebo nepřítomnost baterie a/nebo UPS na serveru apod. Prostě poškozená databáze.
- zhroutilo se mi všechno - typicky naše jediná SBS (small business server), nebo třeba více serverů v jedné serverovně, ve které došel proud. A my jsme šli a celé jsme to přeinstalovali a ouha, ta stará databáze stejně nejde připojit. Protože jsme jako na potvoru zadali jiné jméno organizace.
- někdo smazal logy, protože si myslel, že když se to jmenuje "log", tak se to dá smazat.
- všechno je v pekle, potřebuju alespoň ty mailboxy :-)
Jak?
Nejprve musíte databázi opravit citlivě pomocí ESEUTIL a zkusit provést tzv. soft recovery (přepínač R) - to je operace, kdy se přehrají (rewind) logy. Pokud to projde a databáze EDB nakonec bude ve stavu clean shutdown, je to paráda. Nepřijdete o žádná data a všechno je úplně ideální. To je málokdy. Pokud to nefunguje, musíte udělat hard recovery (přepínač P), což už může znamenat ztrátu nějaký mailů a kontaktů. Nejspíš ale nic zásadního, pravděpodobně jen několik posledních (neukončené LOGy), pokud ovšem nejsou poškozená data v samotném EDB souboru. Při hard recovery o něco přijdete, s tím se musí počítat.
Po soft recovery se dají už smazat logy (truncate log files), které to samo taky mimochodem smaže, pokud použijete správný přepínač (T).
Speciálně hard recovery může trvat několik hodin i když je ten databázový EDB soubor jenom několik desítek GB.
Až pomocí ESEUTIL přivedete databázi do clean shutdown, můžete ji zkusit připojit pomocí New-MailboxDatabase -Recovery a Mount-Database do information store.
Tohle se nepovede, pokud se aktuální Exchnage organizace jmenuje jinak, než se jmenuje ta, ze které je ona databáze. Tzn. buď jste Exchange přeinstalovali, nebo se snažíte prostě připojit databázi z jiné organizace. Hlášky to jsou například:
Failed to mount database. Couldn't mount the database that you specified. An Active Manager operation failed. The database action failed. Operation failed with message: MapiExceptionCallFailed: Unable to mount database. (hr=0x80004005, ec=1276)
Pokud máte tento problém, nelze to vyřešit jinak, než že buď Exchange přeinstalujete znovu a dáte tam správné jméno původní organizace. Nebo si nainstalujete nový Exchange do nějakého virtuálního prostředí a vyndání mailboxů provedete tam.
Když tohle máte, a konečně se vám ta databáze připojí (mount) jako recovery database, můžete už skoro začít exportovat mailboxy pomocí New-MailboxExportRequest. Jenže ouha. Ono neumí exportovat z recovery databáze. Musíte to nejprve z recovery database obnovit pomocí New-MailboxRestoreRequest do nějaké normální mailbox databáze a teprve potom to z ní už konečně vyexportovat do PST souboru.
A tu řešíte problém, že do které běžící databáze? Musí v ní taky existovat ten mailbox, do kterého to chcete nacpat. Jenže nechcete třeba žádný přepsat. Takže musíte založit nějaké dočasné. Jenže to by vám sežralo strašně moc místa v databázi. Takže musíte založit vždycky jen jednu dočasnou schránku, obnovit to do ní, vyexportovat to z ní do PST a schránku smazat a zase znovu.
K tomuhle procesu bych doporučoval si vytvořit rovnou celou dačasnou mailbox databázi (temporary mailbox database), protože na ní byste měli taky zapnout circular loging (Set-MailboxDatabase -CircularLoggingEnabled:$true), jinak vám logy zacpou disk. Navíc nezapomeňte, že když mailbox jenom smažete, on se potvora akorát přesune do Disconnected mailboxes a vydrží vám v databázi dalších dlouhých 30 dnů. Takže i nadále žere místo.
Je potřeba tedy mezi blokem obnova mailboxu a jeho export do PST tu dočasnou mailovou schránku úplně smazat.
Bože to je drbačka.
Udělal jsem si na to takový automatizovaný skriptík. Stačí, když uděláte virtuálku s Exchange a někam do sdíleného adresáře si nahrajete tu zdrojovou databázi (prozatím musí být v clean shutdown) a pustíte skript. A za pár dnů to máte zpátky v PST :-)
Skript je součástí mojí free knihovny ADLAB, je v souboru lib-modifyActions.ps1 a jmenuje se Recover-ExchangeMailboxes. Nezapomeňte, že musíte mít ve virtuálce dost místa na disku, aby si mohl stáhnout celou tu databázi na lokál do VHD a potom to byl schopen vyexportovat do PST mailbox po mailboxu. Takže místa cca celá databáze plus dvakrát největší mailbox.
Jak jsem říkal, mám na to prostředí, abych to udělal za vás :-)