Herhangi bir şekilde devre dışı kalan ve işlevini yerine getiremeyen Exchange Server 2013 veritabanını başka bir Exchange Server’a taşıyarak aktif hale getirebilir ve Mailbox Database’i içindeki  Mailbox’ları tekrar erişilebilir hale getirebilirsiniz.

Eski Database’in Durumu

Öncelikle kullanılamayan Exchange Server sunucusunun veritabanının durumuna bakmamız gerekir. Bu aşamada Exchange Server servislerinin hepsini durudurn ve mevcut Mailbox Database’ini kolay erişilebilir bir dizine kopyalaın.

eseutil /mh DB02.edb

Komutunu çalıştırdığınızda Veritabanı State’i Dirty Shutdown ise bunu Clean Shutdown’a getirmiz gerekiyor.

Bunun için aşağıdaki komutu çalıştırın.

eseutil /r E01 /l C:\Data\Kurtar /d C:\Data\Kurtar

/r parametresi Recovery olacağını belirtir E01 ise Veritabanı loglarıdır. Bu loglar E00 da olabilir. Kendi yapınıza göre değiştirmelisiniz.

/l (Büyük L) parametresi Veritabanı loglarının hangi dizinde tutulduğunu belirtir. Genelde EDB uzantılı dosya ile aynı dizindedir.

Komut tamamlanıca

eseutil /mh DB02.edb

ile durumunu kontrol ettikten sonra State’ini Clean Shutdown görmeniz gerekmektedir.

Database’imizi Yeni Exchange’e Tanıtalım

Mailbox Database’imiz sağlıklı bir şekilde kullanıma hazır hale getirdikten sonra. Edb dosyanızı çalışan yeni Exchange Server’a taşıyabiliriz ve ekleyebiliriz.

Mailbox Database’i Exchange Server’a eklemek için aşağıdaki komutu çalıştırabilirsiniz.

New-MailboxDatabase -Server MAILSERVER -Name KurtarilmisDB -Recovery -EdbFilePath C:\Data\Kurtar\DB02.edb -LogFolderPath C:\Data\Kurtar

Daha sonra Exchange’in Database’i kullanabilimesi için Mount etdebiliriz. Aşağıdaki komut bunun için yeterlidir.

Mount-Database KurtarilmisDB

Artık kurtarılmış veritabanımıza erişebilir ve ve içindeki Mailbox’ları mevut Mailbox’a restore edebilir duruma geldik. Veritabanı içinde kaç Mailbox olduğunu görmek çin aşağıdaki komutu kullanabilirsiniz.

Get-MailboxStatistics -Database RecoveryDB | ft -auto

Şimdi eski Veritabanındaki bir mailbox’ı mevcut yapıdaki yeni mailbox’a restore edelim. Aşağıdaki komut bu işlemi gerçekleştirecektir.

New-MailboxRestoreRequest -SourceDatabase KurtarilmisDB -SourceStoreMailbox "Hakan Akyol" -TargetMailbox hakan.akyol

Bonus 1

Eğer isterseniz eski Mailbox’ı yeni bir Mailbox’ın farklı bir dizinine Restore edebilirsiniz, böylece mevcut Inbox’ı etkilenmemiş olacak ve istediği zaman eski bilgilerine daha sistematik ulaşabilecektir. Tabi istenildiğinde gerçekleştirmenizi öneririz. Bunun için New-MailboxRestoreRequest komutunun TargetRootFolder parametresini kullanmanız yeterli olacaktır.

New-MailboxRestoreRequest -SourceDatabase KurtarilmisDB -SourceStoreMailbox "Hakan Akyol" -TargetMailbox hakan.akyol -TargetRootFolder "Kurtarilanlar" -IncludeFolders "#Inbox#/*"

New-MailboxRestoreRequest komutu arkaplanda Exchange’in işlemi yapması için bir istek oluşturur. Exchange bu işlemi kuyruğa alır ve sırası ile tamamlar. Exchange’in işlem kuyruğunu görmek için aşağıdaki komutu kullanabilirsiniz.

Get-MailboxRestoreRequest

Bonus 2

Aşağıdaki PowerShell scripti eski veritabanındaki tüm kullanıcıları yeni veritabanına otomatik olarak Recovery yapar. Bu script tamamen veri kurtarma amacı ile boş bir Exchage Server üzerinde test edilmiştir. UserPrincipalName, Mailbox Alias gibi önemli değerler gerçekçi senaryoya göre oluşturulmamaktadır. Sadece Mailbox’ları ulaşılabilir kılmaktadır.

<#
.SYNOPSIS
    Bu script Recovery Mailbox Database'indeki mailbox'lara göre yeni kullanıcı oluşturur ve Restore isteği gönderir.
.DESCRIPTION
    Başka bir sunucu üzerinden kurtarılmış ve yeni bir sunucuya Mount edilmiş Mailbox Database içindeki kullanıcı tipindeki Mailbox'ları listeler ve bunlara göre aktif Veritabanı üzerinde kullanıcılar oluşturur. Oluşturulan kullanıcılar için eski veritabanından Restore isteği gönderir.
.NOTES
    File Name      : ResoteRecoveryDB.ps1
    Author         : Oğuzhan YILMAZ (oguzhan@maestropanel.com)
    Prerequisite   : Exchange Server 2013
.LINK
    http://wiki.maestropanel.com
#>
$RecoveryDatabaseName = "RecoveryDB" #Veritabanının İsmi
$TempPassword = Read-Host "makara24!" -AsSecureString #Geçici parola, Kullanıcı açmak için
$UPNSuffix = "salla.com"; #Sunucu üzerindeki geçerli suffix

     foreach($ritem in Get-MailboxStatistics -Database $RecoveryDatabaseName | ?{($_.DisplayName -notlike "*HealthMailbox*") -AND ($_.DisplayName -notlike "*Microsoft*") -AND ($_.DisplayName -notlike "*SystemMailbox*") -AND ($_.DisplayName -ne "Administrator")}) {
    
    New-Mailbox -DisplayName $ritem.DisplayName -Name $ritem.DisplayName -Password $TempPassword -UserPrincipalName "$($ritem.Identity)@$($UPNSuffix)"
    New-MailboxRestoreRequest -SourceDatabase RecoveryDB -SourceStoreMailbox $ritem.Identity -TargetMailbox $ritem.DisplayName -AllowLegacyDNMismatch

}

Yazar