How to backup Exchange 2010 DAG databases using Powershell

By Andrei Ungureanu - Last updated: Wednesday, February 15, 2012 - Save & Share - Leave a Comment

Subiectul din titlu a venit mai mult ca o provocare, legata si de faptul ca tot vreau de ceva vreme sa imi indrept atentia mai mult catre Powershell dar si de faptul ca Microsoft isi bate joc de noi in continuare cu backup-ul de Exchange.

Perioada cand MS nu a catadicsit sa ofere o solutie de backup pentru unul din produsele lor de baza a cam trecut, dar nu complet. Pentru ca ce ofera ei acum e o gluma. E tot backup-ul vechi bazat pe VSS si umblat putin la el ca baza sa fie consistenta cand salveaza tot volumul si dupa sa stearga transaction logurile. A fost nevoie de ani ca sa scoata asa ceva si in multe cazuri e tot inutilizabil. In special cand vorbim de DAG (Database Availability Group).

Si acum hai sa explic de ce sunt atat de revoltat pe backup-ul din Exchange 2010. Pentru ca nu iti permite sa faci backup la copia pasiva a bazei de date. Da, stiu era mai complicat codul pentru un astfel de backup dar pana la urma costa o caruta de bani si Exchange-ul. Si mai rau, daca acea copie pasiva se afla pe acelasi volum cu o copie activa, nici una dintre ele nu poate fi backup-ata. Ouch. Iar scenariul este unul cat se poate de simplu: doua mailbox servere, fiecare tinand doua baze de date in DAG – una pasiva si una activa, fiecare server cu un volum pentru OS si inca unul pentru bazele de date. Deci, ambele baze de date puse pe acelasi volum inseamna “problem”.

Un soi de rezolvare ar fi in urmatorul articol de pe technet:

http://technet.microsoft.com/en-us/library/dd876851.aspx

If a server hosting the data being backed up is a member of a database availability group (DAG) and hosts both active and passive database copies, you must disable the Microsoft Exchange Replication service VSS writer. If the Microsoft Exchange Replication service VSS writer is enabled, the backup operation will fail.
To disable the Microsoft Exchange Replication service VSS writer, perform the following steps:
1. Log on to the server by using an account that has local administrator access, and then start Registry Editor (regedit).
2. Navigate to HKEY_LOCAL_MACHINE\Software\Microsoft\ExchangeServer\v14\Replay\Parameters.
3. Add a new DWORD value named EnableVSSWriter, and set its value to 0.
4. Exit Registry Editor and then restart the Microsoft Exchange Replication service.

Dar asta inseamna ca vom putea salva doar copia activa, ceea ce rezulta in faptul ca trebuie sa facem backup si la celalalt mailbox server. Nu ar fi chiar atat de grav insa cum eu tin sa optimizez totul, as fi preferat sa imi salvez bazele de date dintr-o singura operatiune de backup. Iar solutia dupa cum banuiati a fost sa activez ambele baze de date pe serverul de pe care fac backup-ul, iar dupa ce se termina backup-ul sa mut una din ele pe celalalt server.

Exista mai multe metode prin care as fi putut realiza acest task, dar eu am preferat sa merg pe varianta cu script powershell schedulat cu Task Scheduler. O varianta basic a script-ului arata cam asa:

add-pssnapin Microsoft.Exchange.Management.PowerShell.E2010
add-pssnapin windows.serverbackup
#aici puteti lasa si linia de mai jos doar pentru a fi siguri ca ambele baze o sa fie active pe serverul cu job-ul de backup
#move-activemailboxdatabase "Mailbox Database 1" -ActivateOnServer MBX1 -MountDialOverride:None -Confirm:$false
move-activemailboxdatabase "Mailbox Database 2" -ActivateOnServer MBX1 -MountDialOverride:None -Confirm:$false

#Starting Windows Backup
$policy=New-WBPolicy
$volumes = Get-WBVolume -AllVolumes | Where {$_.MountPath -eq "C:"}
Add-WBBareMetalRecovery –Policy $policy
Add-WBVolume -Policy $policy -volume $volumes
$BackupTargetVolume=New-WBbackupTarget –NetworkPath \\dc\backups
Add-WBBackupTarget -policy $policy -target $BackupTargetVolume
Set-WBVssBackupOptions -policy $policy -VssFullBackup
Start-WBBackup -Policy $policy
move-activemailboxdatabase "Mailbox Database 2" -ActivateOnServer MBX2 -MountDialOverride:None -Confirm:$false

Scriptul va muta bazele de date (sau baza, dupa caz) pe serverul pe care ruleaza, va crea job-ul de backup si il va executa, iar dupa ce job-ul se va termina va muta una din bazele de date pe alt server.

image

Rezultatele job-ului de backup se vor putea vedea in continuare in consola Window Backup si bineinteles in Event Viewer.

Sper ca exemplul meu sa va foloseasca si sa va ajute sa va faceti propriile scrituri de backup in Powershell.

LE: Modul in care se face backup-ul din Powershell e ciudat de complicat pentru un sysadmin. De asta am si pus exemplul ca sa nu treceti prin ce am trecut eu cand l-am facut Smile.

 

 

Posted in Exchange, Scripting, Windows Server • Tags: , , , Top Of Page

Write a comment