Correggere database Exchange 2003

Lo scorso mese mi sono trovato ad affrontare un caso interessante, innescato presumibilmente dalla leggerezza, associata ad un pizzico di inesperienza.
Quasi al termine dell’esecuzione del backup giornaliero di un server con Exchange 2003, questo si interrompeva, restituendo un errore ESE per cui erano percorribili due soluzioni.

Ripristinare un backup che non presentasse questo errore, che nel mio caso specifico, stava ad indicare una corruzione al database, oppure dopo aver eseguito un CHKDSK del volume in cui sono presenti i database (.edb e .stm) eseguire questa serie di comandi da linea di comando.

Prima di tutto si devono interrompere i servizi relativi ad exchange, smontare il db e farne un backup

Screen relativo allo scollegamento del database

Le operazioni che seguiranno si svolgeranno con delle tempistiche importanti, infatti, come ipotizza la stessa microsoft ci vogliono 11 ore per un database di 50G. Nel mio caso, per un database di 47G sono servite poco meno di 10 ore per deframmentarlo ma circa 18 per correggere e ripristinare.

Preso atto di questo, le operazioni da compiere sono quindi la deframmentazione e l’eventuale successiva correzione.
Ci si porta nella shell all’interno della directory di Exchange C:\Exchsrvr\bin e si da il comando

eseutil /d /ispriv

Attenzione che la deframmentazione o correzione del database, andranno ad occupare il 110% della sua dimensione, si dovrà quindi in mancanza di spazio, impostare un percorso dove salvare i file temporanei in questo modo

eseutil /d /ispriv /td:\Sample.edb /fd:\tempstpub.stm

dove:

  • ispriv è l’opzione che permette di selezionare Archivio informazioni privato ovvero le mail degli utenti
  • /td:\Sample.edb indica il percorso temporaneo dell’archivio
  • /fd:\tempstpub.stm indica il percorso temporaneo dell’archivio allegati

Purtroppo nel mio caso, la sola deframmentazione non ha portato alcun risultato, speravo infatti che l’errore si trovasse in una zona defframentata del database. E’ stato necessario correggerlo usando ancora una volta eseutil ma con un secondo parametro:

eseutil /p /ispriv /td:\Sample.edb

 

A seguire vi riporto lo script bash utilizzato per la defframentazione, con i comandi per stoppare e riavvire i servizi usati da exchange (attenzione i servizi stoppati sono relativi a quelli in uso sul server incriminato e non sono tutti quelli di default)

 

ECHO Smonta il database
PAUSE
net stop MSExchangeES /y
net stop MSExchangeIS /y
net stop MSExchangeMTA /y
net stop MSExchangeSA /y
net stop POP3Svc /y
net stop IMAP4Scv /y
echo time /T > c:\log.txt
cd \
cd "C:\Programmi\Exchsrvr\bin\"
ECHO Servizi Exchange stoppati. Procedo con la frammentazione
eseutil /d  C:\Exchsrvr\MDBDATA\priv1.edb /tf:\temppriv.edb /ff:\tempstpub.stm
ECHO Frammentazione priv1 completata 
eseutil /d  C:\Exchsrvr\MDBDATA\pub1.edb /tf:\tempub.edb /ff:\tempstpub.stm
ECHO Frammentazione pub1 completata

net start MSExchangeES /y
net start MSExchangeIS /y
net start MSExchangeMTA /y
net start MSExchangeSA /y
net start POP3Svc /y
net start IMAP4Scv /y

echo time /T >> c:\log.txt
ECHO Monta database
PAUSE

 

Per ulteriori letture e approfondimenti:

http://support.microsoft.com/kb/192185
http://forums.msexchange.org/fb.aspx?m=1800504795
http://www.petri.co.il/understanding_exhange_is.htm

Rispondi