Vous devez réduire votre environnement Exchange 2016 à une seule base de données tout en gardant Outlook et OWA opérationnels ? Voici une procédure pas‑à‑pas, robuste et vérifiable, pour y parvenir sans surprises.
Vue d’ensemble de la question
Contexte classique : l’entreprise dispose de quatre bases de données Exchange 2016 (par exemple DB01 à DB04) et souhaite n’en garder qu’une seule montée pendant les 6–7 mois précédant la fermeture. Dès qu’une base est démontée, Outlook et Outlook Web App cessent de répondre pour certains comptes ou pour l’interface d’administration (ECP).
Racine du problème : des boîtes aux lettres système (arbitration, discovery, audit, parfois des boîtes publiques) ou des boîtes actives d’utilisateurs restent hébergées sur des bases démontées. OWA/ECP et diverses fonctions (transport, eDiscovery, OAB, flux de modération, etc.) s’appuient impérativement sur ces boîtes. Si elles vivent dans une base non montée, l’authentification peut boucler, retourner des erreurs 500, ou l’ouverture de session Outlook échoue.
Idée directrice : tout ce qui peut encore être consulté par des utilisateurs ou par Exchange lui‑même doit être rassemblé dans une base unique (DB01), et toutes les autres bases doivent être exclues du provisioning puis démontées proprement.
Résumé de la solution
Avant de démonter quoi que ce soit, migrez d’abord toutes les boîtes aux lettres utilisateurs et système vers la base cible, définissez cette base comme seule base provisionnable, vérifiez qu’il ne reste aucun déplacement en cours ni message en file, puis démontez et supprimez les bases non utilisées. Testez OWA/Outlook sur plusieurs comptes pour valider.
Plan d’action rapide
Étape | Actions essentielles | Pourquoi c’est nécessaire |
---|---|---|
1. Sauvegarder l’existant | Exécuter une sauvegarde Exchange‑aware complète de chaque base et des journaux. | Prévenir toute perte de données et permettre la purge saine des journaux. |
2. Identifier la base à conserver | Get-MailboxDatabase pour lister, choisir la base cible (ex. DB01), vérifier son état et son espace disque. | Définir le point de convergence de toutes les boîtes aux lettres. |
3. Migrer toutes les boîtes actives | Get-Mailbox -Database <OldDB> -ResultSize Unlimited | New-MoveRequest -TargetDatabase DB01 | Tout utilisateur pointant vers une base démontée perd l’accès. |
4. Migrer les boîtes système | Get-Mailbox -Arbitration | New-MoveRequest -TargetDatabase DB01 Get-Mailbox -AuditLog | New-MoveRequest -TargetDatabase DB01 Get-Mailbox -RecipientTypeDetails DiscoveryMailbox | New-MoveRequest -TargetDatabase DB01 Get-Mailbox -PublicFolder | New-MoveRequest -TargetDatabase DB01 (Santé : voir note « Monitoring » ci‑dessous) | OWA/ECP, OAB, modération et eDiscovery sont adossés à ces boîtes. |
5. Définir DB01 comme seule base provisionnable | $target = "DB01" Get-MailboxDatabase $target | Set-MailboxDatabase -IsExcludedFromProvisioning:$false Get-MailboxDatabase | Where-Object {$_.Name -ne $target} | Set-MailboxDatabase -IsExcludedFromProvisioning:$true | Empêche la création automatique de nouvelles boîtes dans les bases à retirer. |
6. Vérifier files d’attente et déplacements | Get-Queue doit être sain ; Get-MoveRequest doit être vide ou terminé. | Évite qu’un message ou un déplacement reste bloqué pendant le démontage. |
7. Démontage et suppression des bases inutiles | Dismount-Database <OldDB> Remove-MailboxDatabase <OldDB> pour nettoyer l’objet AD, puis suppression manuelle du .edb et des journaux après validation. | Libère des ressources et évite les références résiduelles. |
8. Surveiller et tester | Contrôler les journaux d’événements, exécuter les tests de connectivité et ouvrir Outlook/OWA sur plusieurs comptes. | Confirme que toutes les dépendances ont bien été migrées. |
Note « Monitoring » : les boîtes de santé HealthMailbox‑* sont recréées automatiquement par le service Microsoft Exchange Health Manager. Il est généralement inutile de les déplacer ; si elles résident dans une base que vous supprimez, vous pouvez les supprimer puis redémarrer le service pour forcer leur recréation dans la base restante.
Étapes détaillées et scripts prêts à l’emploi
Préparer et sécuriser
- Sauvegarde : effectuez une sauvegarde complète Exchange‑aware de chaque base. Vérifiez‑la :
Get-MailboxDatabase -Status | ft Name,Mounted,Server,LastFullBackup -Auto
- Journalisation circulaire (optionnel pour les 6–7 mois) : après une sauvegarde complète réussie, vous pouvez limiter la croissance des journaux :
Set-MailboxDatabase DB01 -CircularLoggingEnabled:$true # Redémarrer le service Microsoft Exchange Information Store pour prise en compte
- À propos des quotas et de l’espace : assurez‑vous que DB01 dispose de suffisamment d’espace (données + index + marge de logs). Prévoyez large : volume libre ≥ taille totale migrée × 1,2.
Choisir la base cible et fixer le provisioning
$target = "DB01"
# Activer le provisioning uniquement sur DB01
Get-MailboxDatabase $target | Set-MailboxDatabase -IsExcludedFromProvisioning:$false
Get-MailboxDatabase | ? {$_.Name -ne $target} | Set-MailboxDatabase -IsExcludedFromProvisioning:$true
# Contrôle
Get-MailboxDatabase | ft Name,IsExcludedFromProvisioning -Auto
Migrer les boîtes des utilisateurs
Procédez par anciennes bases pour garder une vue claire et des lots atomiques. Chaque lot peut être suspendu juste avant la coupure si vous voulez piloter la bascule finale.
$target = "DB01"
$oldDBs = (Get-MailboxDatabase | ? Name -ne $target).Name
foreach ($db in $oldDBs) {
$batch = "Consol-$db-to-$target"
Get-Mailbox -Database $db -ResultSize Unlimited |
New-MoveRequest -TargetDatabase $target -BatchName $batch `
-SuspendWhenReadyToComplete:$false
}
# Surveillance
Get-MoveRequest | Get-MoveRequestStatistics -IncludeReport |
ft DisplayName,Status,PercentComplete,TotalMailboxSize,BytesTransferred,StatusDetail -Auto
# Nettoyage après réussite
Get-MoveRequest -MoveStatus Completed | Remove-MoveRequest
Conseils : si certains profils sont sensibles, migrez d’abord un échantillon pilote. Évitez de paramétrer des -BadItemLimit
laxistes ; traitez les éléments corrompus au cas par cas.
Migrer les boîtes système indispensables
Ce point est souvent la cause des pannes OWA/ECP après démontage : une boîte système restée sur une base non montée. Déplacez systématiquement :
- Arbitration (modération, OAB, EWS, assistant de boîtes) :
Get-Mailbox -Arbitration -ResultSize Unlimited |
New-MoveRequest -TargetDatabase $target -BatchName "Consol-System-Arbitration"
- AuditLog :
Get-Mailbox -AuditLog -ResultSize Unlimited |
New-MoveRequest -TargetDatabase $target -BatchName "Consol-System-Audit"
- Discovery (eDiscovery) :
Get-Mailbox -RecipientTypeDetails DiscoveryMailbox -ResultSize Unlimited |
New-MoveRequest -TargetDatabase $target -BatchName "Consol-System-Discovery"
- Boîtes publiques (si présentes) :
Get-Mailbox -PublicFolder -ResultSize Unlimited |
New-MoveRequest -TargetDatabase $target -BatchName "Consol-PublicFolders"
- Monitoring (HealthMailbox‑*) : non critique pour OWA/Outlook, et généralement non déplaçable par move request. Vous pouvez les régénérer :
# Sur chaque serveur Exchange :
Get-Mailbox -Monitoring -Server $env:COMPUTERNAME | Remove-Mailbox -Confirm:$false
Restart-Service MSExchangeHM
Vérifier files d’attente, déplacements et santé
# Files de transport
Get-Queue | ft Identity,MessageCount,Status,NextHopDomain -Auto
# Déplacements restants
Get-MoveRequest | ft DisplayName,Status,MoveStatus,PercentComplete -Auto
# Connectivité et services clés
Test-OWAConnectivity -MailboxCredential (Get-Credential)
Test-MapiConnectivity -Database $target
Test-OutlookConnectivity -Protocol MapiHttp -MailboxCredential (Get-Credential)
Test-WebServicesConnectivity -MailboxCredential (Get-Credential)
Attendez que Get-MoveRequest
ne retourne plus que des Completed, supprimez les move requests terminées, et assurez‑vous que les files de transport ne contiennent pas de messages bloqués.
Démonter et supprimer proprement les anciennes bases
# Démontage (sans interruption des services globaux)
Dismount-Database DB02 -Confirm:$false
Dismount-Database DB03 -Confirm:$false
Dismount-Database DB04 -Confirm:$false
# Suppression des objets AD des bases (facilite l’hygiène de l’org)
Remove-MailboxDatabase DB02 -Confirm:$false
Remove-MailboxDatabase DB03 -Confirm:$false
Remove-MailboxDatabase DB04 -Confirm:$false
# Après validation, supprimer les fichiers .edb et dossiers de logs correspondants sur le disque.
Surveillez ensuite l’Observateur d’événements (Application et MSExchange*) pendant au moins 24 heures d’activité.
Cas particuliers et pièges à éviter
- DAG : si un DAG existe, vous pouvez le simplifier à un seul nœud pour la période de vie résiduelle. Assurez‑vous que
ActivationPreference
de la copie DB01 est1
sur l’hôte actif. Conservez idéalement une copie jusqu’à l’arrêt définitif. - Boîtes en litige / rétention : les boîtes LitigationHold ou avec In‑Place Hold se déplacent, mais la taille des versions peut allonger la durée du move. Prévoyez la fenêtre.
- Archives : si vous avez des archives locales (In‑Place Archive), elles se déplacent avec la boîte. Les archives online ne sont pas concernées.
- Autorisations déléguées : les ACL (FullAccess/SendAs) suivent la boîte, mais il est prudent d’exporter un inventaire avant les moves pour audit.
- OAB : l’OAB est généré par une boîte arbitration ; si OWA/ECP tombe après un démontage, c’est souvent qu’une arbitration est restée derrière. Revenez à l’étape « boîtes système ».
- Public Folders modernes : déplacez aussi les hierarchy et content mailboxes s’ils existent, puis validez
Get-PublicFolderMailboxDiagnostics
si nécessaire.
Vérifications rapides au quotidien
Contrôle | Commande | Résultat attendu |
---|---|---|
Bases montées | Get-MailboxDatabase -Status | ft Name,Mounted -Auto | Seule DB01 est Mounted |
Provisioning | Get-MailboxDatabase | ft Name,IsExcludedFromProvisioning -Auto | DB01 = False, autres = True |
Boîtes système | (Get-Mailbox -Arbitration).Database | Toutes sur DB01 |
Migrations | Get-MoveRequest | Aucune en cours |
Transport | Get-Queue | File saine, pas d’augmentation persistante |
OWA/Outlook | Test-OWAConnectivity , Test-OutlookConnectivity | Succès sur plusieurs comptes |
Automatisation complète (script consolidé)
Ce script propose un enchaînement contrôlé : il fixe le provisioning, déplace utilisateurs et boîtes système, attend la fin des lots, puis prépare le démontage des anciennes bases. À adapter (noms des serveurs, volumes, etc.).
param(
[Parameter(Mandatory=$true)][string]$TargetDatabase = "DB01"
)
Write-Host "==> Cible: $TargetDatabase" -ForegroundColor Cyan
# 1) Provisioning : activer uniquement sur la cible
Get-MailboxDatabase $TargetDatabase | Set-MailboxDatabase -IsExcludedFromProvisioning:$false
Get-MailboxDatabase | ? {$_.Name -ne $TargetDatabase} | Set-MailboxDatabase -IsExcludedFromProvisioning:$true
# 2) Déplacements UTILISATEURS par base source
$oldDBs = (Get-MailboxDatabase | ? Name -ne $TargetDatabase).Name
foreach ($db in $oldDBs) {
$batch = "Users-$db-to-$TargetDatabase"
Write-Host "Lot $batch" -ForegroundColor Yellow
Get-Mailbox -Database $db -ResultSize Unlimited |
New-MoveRequest -TargetDatabase $TargetDatabase -BatchName $batch
}
# 3) Déplacements SYSTEME
Get-Mailbox -Arbitration -ResultSize Unlimited |
New-MoveRequest -TargetDatabase $TargetDatabase -BatchName "System-Arbitration"
Get-Mailbox -AuditLog -ResultSize Unlimited |
New-MoveRequest -TargetDatabase $TargetDatabase -BatchName "System-Audit"
Get-Mailbox -RecipientTypeDetails DiscoveryMailbox -ResultSize Unlimited |
New-MoveRequest -TargetDatabase $TargetDatabase -BatchName "System-Discovery"
Get-Mailbox -PublicFolder -ResultSize Unlimited |
New-MoveRequest -TargetDatabase $TargetDatabase -BatchName "System-PublicFolder"
# 4) Attente et nettoyage
do {
$moving = Get-MoveRequest -MoveStatus InProgress,Queued,AutoSuspended -ErrorAction SilentlyContinue
if ($moving) {
Write-Host ("En cours: {0}" -f $moving.Count)
Start-Sleep -Seconds 30
}
} while ($moving)
Get-MoveRequest -MoveStatus Completed | Remove-MoveRequest
# 5) Rapport
"`n--- Boîtes restantes hors $TargetDatabase ---"
Get-Mailbox -ResultSize Unlimited | ? {$_.Database -ne $TargetDatabase} |
select Name,PrimarySmtpAddress,Database | ft -Auto
Plan de retour arrière
- Si un lot échoue, ne démontez pas la base source. Corrigez l’erreur (quota, éléments corrompus, boîte verrouillée, etc.), puis relancez le move request.
- En cas d’impact OWA/ECP : remontez temporairement la base démontée, déplacez immédiatement les boîtes arbitration/audit/discovery vers DB01, puis redémontez.
- Conservez une sauvegarde récente de chaque base jusqu’à la période d’extinction définitive.
Désinstallation finale d’Exchange (lors de la fermeture)
- Vérifier qu’il ne reste aucune boîte aux lettres (y compris système et publiques) dans l’organisation on‑prem.
- Démonter/supprimer la dernière base (DB01) une fois la messagerie arrêtée et archivée selon la politique de l’entreprise.
- Exécuter ensuite
Setup.exe /Mode:Uninstall
sur chaque rôle encore présent.
Erreurs courantes à éviter
- Démonter une base hébergeant des boîtes arbitration : OWA/ECP plantera. Déplacez‑les d’abord.
- Oublier d’exclure les anciennes bases du provisioning : de nouvelles boîtes peuvent s’y créer « par hasard ».
- Supprimer les fichiers .edb sans
Remove-MailboxDatabase
: l’objet AD reste ; vous accumulerez des incohérences. - Ignorer les files de transport : des messages peuvent rester orphelins pendant le démontage.
Checklist finale
- Dernière sauvegarde complète validée pour toutes les bases.
- DB01 : montée, saine, espace disque suffisant, IsExcludedFromProvisioning = False.
- Toutes les boîtes utilisateurs retournent
Database=DB01
. - Toutes les boîtes système (arbitration, audit, discovery, publiques) sont sur DB01.
Get-MoveRequest
: vide / tous Completed et supprimés.Get-Queue
: sain, aucun message bloqué.- OWA/ECP et Outlook testés sur plusieurs comptes et postes.
- Anciennes bases démontées et supprimées (
Remove-MailboxDatabase
), fichiers nettoyés. - Journalisation circulaire ajustée selon vos besoins.
Conclusion
En déplaçant méthodiquement les boîtes utilisateurs et les boîtes système vers une base unique, en verrouillant le provisioning et en contrôlant files et déplacements, vous pouvez n’avoir qu’une seule base montée sur Exchange 2016 sans interrompre Outlook ni OWA. La clé est d’anticiper : sauvegarde vérifiée, migrations en lots, vérifications répétées et démontage propre. Votre environnement reste stable pendant la période transitoire tout en vous préparant à l’arrêt planifié.