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.