Exchange Sunucusu çöktü ve artık önyükleme yapamıyor. Posta kutusu veritabanını ikinci bir Exchange sunucusuna bağlamak istiyoruz. Maalesef posta kutusu veritabanını bağlayacak bir düğme yoktur. Bu makalede, Exchange Server posta kutusu veritabanını herhangi bir veri kaybı olmadan nasıl geri yükleyeceğinizi öğreneceksiniz.

Artık önyükleme yapamayan, arızalı bir Exchange Server 2019’umuz ( EX01-2019 ) ve kararlı bir Exchange Server 2019’umuz ( EX03-2019 ) var .

İki posta kutusu veritabanı vardır:

  • Posta kutusu veritabanı DB01, EX01-2019’da kullanılan tek posta kutusu veritabanıdır. Maalesef EX01-2019 artık çevrimdışı olduğundan veritabanı posta kutusu bağlama durumu Bilinmiyor (Çevrimdışı) ve hiçbir şey çalışmıyor.
  • Posta kutusu veritabanı Posta Kutusu Veritabanı EX03-2019’a bağlanmıştır ve kullanımda değildir. Sağlığı gayet iyi.

Peki Exchange posta kutusu veritabanını yeni Exchange Server EX03-2019’a nasıl geri yükleyeceğiz?

Exchange posta kutusu veritabanını yeni sunucuya geri yükleyin

Posta kutusu veritabanı DB01 (.edb) dosyasına sahibiz . Peki posta kutusu veritabanı (.edb) dosyasını yeni Exchange Sunucusuna nasıl bağlarız? Veritabanını Exchange yönetim merkezindeki bir dosya yolundan veya PowerShell ile bağlama seçeneği yoktur.

Exchange Server’ın Veritabanı Taşınabilirliği adı verilen bir özelliği vardır . Bu, bir posta kutusu sunucusundaki posta kutusu veritabanının aynı kuruluş içindeki başka bir posta kutusu sunucusuna taşınmasına ve bağlanmasına olanak tanır.

Önemli: Bir posta kutusu veritabanını kurtarmak için veritabanı taşınabilirliğini kullanırken, kaynak ve hedef Exchange sunucularındaki işletim sistemi sürümü ile Exchange Sunucusu sürümü aynı olmalıdır. Örneğin, Exchange 2016 posta kutusu veritabanı daha önce Windows Server 2016 çalıştıran bir sunucuya bağlanmışsa, veritabanı taşınabilirliği yalnızca veritabanını Windows Server 2016 ve Exchange 2016 çalıştıran bir sunucuya geçirirken çalışacaktır.

1. Adım. Kaynak posta kutusu veritabanı kapatma durumunu alın

Bir sonraki adımın ne olacağına karar vermek için veritabanı kapatma durumunu kontrol etmeliyiz.

Komut İstemi’ni başlatın ve aşağıdaki komutu çalıştırın.

eseutil /mh "C:\Backup\DB01\DB01.edb"

Yalnızca State özelliğini göstermek için aşağıdaki komutu da çalıştırabilirsiniz .

eseutil /mh "C:\Backup\DB01\DB01.edb" | findstr "State:"

Çıkış, Temiz Kapatma veya Kirli Kapatma değerini gösterecektir .

State: Clean Shutdown

2. Adım. Kaynak posta kutusu veritabanının yazılımla kurtarılmasını gerçekleştirin

Posta kutusu veritabanı Temiz Kapatma durumundaysa veya işlem günlükleriniz yoksa bu adımı atlayabilirsiniz.

Veritabanı kirli kapatma durumundayken ve tüm işlem günlüğü dosyaları mevcutken, veritabanında yazılımla kurtarma işlemi gerçekleştirin. Bu, kaydedilmemiş tüm işlem günlüklerini veritabanına kaydeder, böylece veri kaybı olmaz.

Posta kutusu veritabanında yazılımla kurtarma gerçekleştirmek için Komut İstemi’nde aşağıdaki komutu çalıştırın.

  • /r : günlük öneki
  • /l : günlük dosyalarının yolu
  • /d : veritabanı dosyasının yolu
  • /s : kontrol noktası dosyasının yolu
eseutil /r E00 /l "C:\Backup\DB01 Logs" /d "C:\Backup\DB01" /s "C:\Backup\DB01 Logs"

Aşağıdaki çıktı görünür.

Extensible Storage Engine Utilities for Microsoft(R) Exchange Server
Version 15.02
Copyright (C) Microsoft Corporation. All Rights Reserved.

Initiating RECOVERY mode...
    Logfile base name: E00
            Log files: C:\Backup\DB01 Logs
         System files: C:\Backup\DB01 Logs
   Database Directory: C:\Backup\DB01

Performing soft recovery...
                      Restore Status (% complete)

          0    10   20   30   40   50   60   70   80   90  100
          |----|----|----|----|----|----|----|----|----|----|
          ...................................................



Operation completed successfully in 3.78 seconds.

3. Adım. Hedef posta kutusu veritabanını oluşturun

Exchange Management Shell’i yönetici olarak çalıştırın. Veritabanını bağlamak için kullanacağınız Exchange Server’da yeni bir posta kutusu veritabanı oluşturun. Veritabanı dosyasının ve işlem günlüklerinin yollarını belirtin.

Not: Yollardaki klasörleri oluşturacaktır ancak posta kutusu veritabanı dosyası veya veritabanı günlükleri orada görünmeyecektir. Yalnızca posta kutusu veritabanını bağladığınızda görünecektir. Ancak, sonraki adımlardan birinde veritabanını yedekle değiştirmeniz gerektiğinden veritabanını şimdi bağlamayacaksınız.

New-MailboxDatabase -Name "DB01-Recovered" -Server "EX03-2019" -EdbFilePath "E:\DB01-Recovered\DB01.edb" -LogFolderPath "F:\DB01-Recovered"

Aşağıdaki çıktı görünür.

Name                           Server          Recovery        ReplicationType
----                           ------          --------        ---------------
DB01-Recovered                 EX03-2019       False           None
WARNING: Please restart the Microsoft Exchange Information Store service on server EX03-2019 after adding new mailbox
databases.

Veritabanını üzerine yazılabilir olarak işaretleyin. -AllowFileRestore parametresi , bir veritabanının bir yedekten geri yüklenmesine izin verilip verilmeyeceğini belirtir.

Set-MailboxDatabase "DB01-Recovered" -AllowFileRestore:$true

Kopyala

Önemli: Posta kutusu veritabanını bağlamayın. Öncelikle kaynak posta kutusu veritabanı dosyalarını taşımanız gerekir.

4. Adım. Kaynak posta kutusu veritabanını ve günlük dosyalarını taşıyın

Posta kutusu veritabanını yedekten veya önyükleme yapmayan Exchange Sunucusundan alın.

Kaynak posta kutusu veritabanını ve günlük dosyalarını önceki adımda oluşturduğunuz hedef yollara taşıyın.

DB01.edb posta kutusu veritabanını kopyalayın .

EX03-2019’da E:\DB01-Recovered yoluna yapıştırın .

Posta kutusu veritabanı DB01 günlüklerini kopyalayın . Posta kutusu veritabanı işlem günlükleriniz yoksa bu adımı atlayabilirsiniz.

F:\DB01-Recovered yoluna yapıştırın .

5. Adım. Hedef veritabanını bağlayın

DB01-Recovered veritabanını bağlayın .

Mount-Database "DB01-Recovered"

DB01-Recovered posta kutusu veritabanını Exchange yönetim merkezine monte edilmiş olarak gördüğünüzü doğrulayın .

6. Adım. Kullanıcılar için posta kutusu veritabanını ayarlayın

Posta kutularını DB01’den DB01 -Recovered’a yeniden yerleştirelim .

Get-Mailbox -Database "DB01" -ResultSize Unlimited

Kullanıcılara EX01-2019’a bağlı olduklarını gösteriyor ki bu tamamen normal.

Name                      Alias                ServerName       ProhibitSendQuota
----                      -----                ----------       -----------------
Administrator             Administrator        ex01-2019        Unlimited
Dogan Can                 dogan.can            ex01-2019        Unlimited
Demo Users                demo.user             ex01-2019       Unlimited
sharedmailboxonprem       sharedmailboxonprem  ex01-2019        Unlimited

Posta kutusunu yeni veritabanı adı olan DB01-Recovered’a ayarlamanız gerekir .

Tek bir kullanıcı için posta kutusu veritabanını değiştirin. Bu, DB01-Recovered posta kutusu veritabanının niteliklerini ayarlayacak ve EX03-2019 sunucu adını da otomatik olarak ayarlayacaktır.

Set-Mailbox -Identity "Boris.Campbell" -Database "DB01-Recovered" -Force

Bunu tüm kullanıcılar için ayarlayın.

Get-Mailbox -Database "DB01" -ResultSize Unlimited | Set-Mailbox -Database "DB01-Recovered" -Force

Ortamda sorunlar varsa Get-Mailbox cmdlet’i posta kutularını göstermez. Bu nedenle bunun yerine Get-ADUser cmdlet’ini kullanmanız gerekir .

Get-ADUser -Filter * -Properties msExchHomeServerName, homeMDB | Select-Object Name, msExchHomeServerName, homeMDB | Sort-Object Name | Out-GridView

Bu, tüm kullanıcılara gösterecektir.

Tüm kullanıcıların bir posta kutusu yoktur ve farklı veritabanlarında olabilirler. Öyleyse yalnızca Exchange Server EX01-2019 ve posta kutusu veritabanı DB01’deki kullanıcılara filtre uygulayalım .

# Define variables
$msExchHomeServerName = "/o=EXOIP/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Configuration/cn=Servers/cn=EX01-2019"
$homeMDB = "CN=DB01,CN=Databases,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),CN=Administrative Groups,CN=EXOIP,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=exoip,DC=local"

# Get users matching the specified criteria
Get-ADUser -Filter {msExchHomeServerName -eq $msExchHomeServerName -and homeMDB -eq $homeMDB} -Properties msExchHomeServerName, homeMDB | Select-Object Name, msExchHomeServerName, homeMDB | Sort-Object Name | Out-GridView

Filtrelenen tüm kullanıcılar için yeni posta kutusu veritabanı DB01-Recovered’ı ayarlayalım .

# Define variables
$msExchHomeServerName = "/o=EXOIP/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Configuration/cn=Servers/cn=EX01-2019"
$homeMDB = "CN=DB01,CN=Databases,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),CN=Administrative Groups,CN=EXOIP,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=exoip,DC=local"

# Get users matching the specified criteria
$users = Get-ADUser -Filter {msExchHomeServerName -eq $msExchHomeServerName -and homeMDB -eq $homeMDB} -Properties SamAccountName, msExchHomeServerName, homeMDB

# Iterate through each user and set the mailbox database
foreach ($user in $users) {
    Set-Mailbox -Identity $user.SamAccountName -Database "DB01-Recovered" -Force
    Write-Host "Mailbox database set for user $($user.SamAccountName)" -ForegroundColor Green
}

Yukarıdaki komutlar arşiv posta kutularını değil, yalnızca posta kutularını yeniden barındırdı. Arşiv posta kutularını yeniden barındırmak için msExchArchiveDatabaseLink öznitelik değerini değiştirmeniz gerekir .

DB01 posta kutusu veritabanındaki arşiv posta kutularını bulun .

$msExchArchiveDatabaseLink = "CN=DB01,CN=Databases,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),CN=Administrative Groups,CN=EXOIP,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=exoip,DC=local"

# Get users matching the specified criteria
Get-ADUser -Filter { msExchArchiveDatabaseLink -eq $msExchArchiveDatabaseLink } -Properties SamAccountName, msExchArchiveDatabaseLink, msExchHomeServerName | Select-Object Name, msExchArchiveDatabaseLink, msExchHomeServerName | Sort-Object Name | Out-GridView

Tüm arşiv posta kutuları için yeni posta kutusu veritabanını DB01-Recovered’ı ayarlayalım .

# Define variable
$msExchArchiveDatabaseLink = "CN=DB01,CN=Databases,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),CN=Administrative Groups,CN=EXOIP,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=exoip,DC=local"
$msExchArchiveDatabaseLinkNew = "CN=DB01-Recovered,CN=Databases,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),CN=Administrative Groups,CN=EXOIP,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=exoip,DC=local"

# Get users matching the specified criteria
$users = Get-ADUser -Filter { msExchArchiveDatabaseLink -eq $msExchArchiveDatabaseLink } -Properties msExchArchiveDatabaseLink

# Update the msExchArchiveDatabaseLink attribute for each user
foreach ($user in $users) {
    Set-ADUser -Identity $user -Replace @{msExchArchiveDatabaseLink = $msExchArchiveDatabaseLinkNew }
    Write-Host "Mailbox database set for user $($user.SamAccountName)" -ForegroundColor Green
}

7. Adım. Posta kutusunu hedef veritabanına alın

Posta kutularının DB01-Recovered posta kutusu veritabanında barındırıldığını doğrulayın .

Get-Mailbox -ResultSize Unlimited -Database "DB01-Recovered"
Get-Mailbox -ResultSize Unlimited | Where {$_.ArchiveDatabase -like "DB01-Recovered"}

Posta kutuları için DB01 veritabanını kontrol edin ; sonuç olmayacaktır.

Get-Mailbox -ResultSize Unlimited -Database "DB01" 
Get-Mailbox -ResultSize Unlimited | Where {$_.ArchiveDatabase -like "DB01"}

DB01-Recovered posta kutusu veritabanı çevrimiçidir ve herkes Exchange Server’a bağlanıp işine devam edebilir.