HowTo: Migration from Exchange 2013 to Exchange 2016 (Part 2)

This is the second part of the Exchange 2013 to Exchange 2016 migration. The first part can be found here:

Now that we have 2 functional Exchange servers, it's time to migrate the data.

Migration of public folders

The first step is to migrate the public folders. In contrast to Exchange 2010 and earlier, the public folder migration from Exchange 2013 to Exchange 2016 is child's play. If you do not use public folders, you can skip this part and continue directly with the migration of the mailboxes.

There is a mailbox for public folders on the Exchange 2013 server

Migration of public folders

This mailbox contains a few public folders:

Migration of public folders

To migrate the public folders, only the mailbox for the public folders needs to be moved to the Exchange 2016 database. This can be done quickly using the Exchange Management Shell:

Get-Mailbox -PublicFolder | New-MoveRequest -TargetDatabase DB2016

Push

The status can also be queried using the shell:

Get-MoveRequest

Status

Depending on the size of the public folders, this can of course take some time. The following command can be used to check in which database the mailboxes for public folders are stored:

Get-Mailbox -PublicFolder | ft name,alias,servername,database

Control

That was all. No more setting up folder replication, just move public folder mailbox. Wonderful.

Migration of mailboxes

Before the mailboxes are moved, the offline address book must be assigned to the Exchange 2016 database:

Offline address book

For the sake of simplicity, I take all mailboxes with me in one go, including system mailboxes. Here, however, everyone can decide for themselves at which points in time which users are moved.

Move mailboxes

The next step is to assign a name and specify the target database:

Move mailboxes

In the last dialog, you can control when the switch to the new database should take place, either directly after the move or at a selectable time:

Move mailboxes

The migration batch has been created, so wait until the move is complete:

Migration batch

At some point it will be done

image

By the way: Does anyone remember this message? A thing of the past, no restart necessary.

image

In the third and final part, the environment is cleaned up and Exchange 2013 is uninstalled. Coming soon.

Update: The third part can be found under the following link:

HowTo: Migration from Exchange 2013 to Exchange 2016 (Part 3)

17 thoughts on “HowTo: Migration von Exchange 2013 zu Exchange 2016 (Teil 2)”

  1. Vielleicht hab ich es ja überlesen…
    2 Tipps
    Ich setze immer bei den Datenbanken vor der Migration
    1. unter „Wartung“ Umlaufprotokollierung aktiv (dadurch wird der Log Ordner nicht so vollgeballert, was vor allem bei virtuellen Umgebungen ganz gut ist
    2. unter „Grenzwerte“ setze alle Parameter auf unlimited. Die sind auf 2GB vor eingestellt und die Migration eines Postfachs läuft nicht durch, wenn das Limit erreicht ist.
    Nach der Migration die Umlaufprotokollierung wieder ausschalten, das ist für die Performance besser.
    Grenzwerte nach belieben. Ich halts da wie bei M 365. 50GB. „Senden und Empfangen verbieten“ im auf unlimited – außer man hat ne schriftliche Anweisung vom Kunden…

    Reply
    • Hi Rainer,
      Ja den Punkt 1. hätte ich auch machen sollen, nun hab ich in der VM wieder 2 große Platten weil mir C: vollgelaufen ist.
      Aber demnächst kommt die DAG, dann verschwindet das wieder nach den Migrationen.

      LG

      PS: 2. isn guter Tipp danke

      Reply
  2. Hallo Frank,

    du schreibst in deiner Anleitung ganz zum Schluss, dass die Meldung in Outlook der Vergangenheit angehört. In meinem Test bekomme ich diese aber angezeigt. Migration von Exchange 2013 nach 2016, Outlook 2016. Gibt es irgendwelche Voraussetzungen, die erfüllt werden müssen?

    Reply
    • Hi Frank,

      ich hab das gleiche Problem wie Paul im Post vor mir. Die Meldung mit dem Outlook-Neustart kommt immer noch. Warum?

      Gruß
      Brilo

      Reply
  3. Hallo Frank,

    Super Anleitung Danke dafür. Ich habe auch so ein Problem das sich die Postfächer nicht migrieren lassen.
    Von Exchange 2007 auf 2013 kein Problem. Aber von 2013 auf 2016 steht die Migration immer auf Synchronisierung.
    Die Ausgabe von Get-MoveRequest ist leer. So als wenn die Migration nicht laufen würde. Das zu migrierende Postfach enthält nur ein paar Mails ist kein produktives System. Daher kann es auch nicht solange dauern. Was kann ich hier noch tun bzw. welche Commandlets helfen bei der Fehlersuche?

    Gruß
    Andreas

    Reply
      • Hallo Frank,

        Ist das Migrationspostfach die Voraussetzung? Nein ich habe gleich mit den Benutzern angefangen. Habe es eigentlich so gemacht wie bei Exchange 2013 auch. Was muss ich denn hier tun? Habe auch nichts vom Migrationspostfach gelesen.

        Gruß
        Andreas

        Reply
        • Hallo Andreas,
          es gibt ein Systempostfach mit dem Namen „Migration…“ dies musst du zuerst auf den Exchange 2016 Server verschieben, dann sollten sich auch die Benutzerpostfächer verschieben lassen.
          Gruß, Frank

        • Hallo Frank,

          Nachdem ich es gestern noch ein paar mal über das ECP versucht habe – vergeblich. Habe ich mit dem folgenden Befehl auf der Exchange Powershell die Postfächer erfolgreich migrieren können.
          Get-Mailbox -Database „DB01“ | New-MoveRequest -TargetDatabase „DB02“ -BatchName „DB01toDB02“
          Danke für die Unterstützung

          Gruß
          Andreas

  4. Vielleicht sollte man noch erwähnen – Bei großen Datenbanken die Umlaufprotokollierung beachten.

    Sonst läuft die Daten-Partition voll.. ;-)

    Reply
    • Ja der Hinweis sollte FETT in ROT dastehen. Habe meine Log Partition mehrfach vergrößern müssen. ;) und wir haben „nur“ 1 DB mit 750GB + 1 PF DB mit 150GB.

      Reply
  5. Hallo Frank,

    ich hab es nun bei einem Postfach, das sich mit dem Migrarationsassistenten nicht verschieben lässt, mit New-MoceRequest versucht und da funktioniert es. Werde eben nun die Postfächer mit der Powershell verschieben.

    Gruß Ernst

    Reply
  6. Hallo Frank,

    danke für deine rasche Antwort. Komme aber erst jetzt dazu zu antworten. Ich hab hier die Ausgaben für einen Benutzer, bei dem die Migration von 2007 auf 2013 funktioniert hat, aber bei der Migration von 103 auf 2016 einfach nichts passiert. Der Versuch erscheint auch nicht in den Ausgaben.

    Get-MoveRequest

    RunspaceId : cefc90b9-c327-465f-8116-4303687a2924
    ExchangeGuid : 05f66854-323a-4e3c-9de3-435ac4eb56b8
    SourceDatabase :
    TargetDatabase : db
    SourceArchiveDatabase :
    TargetArchiveDatabase :
    Flags : IntraOrg, Pull
    RemoteHostName :
    BatchName : MigrationService:Migration2
    Status : Completed
    RequestStyle : IntraOrg
    Direction : Pull
    IsOffline : False
    Protect : False
    Suspend : False
    SuspendWhenReadyToComplete : False
    Alias : David
    ExtensionCustomAttribute1 : {}
    ExtensionCustomAttribute2 : {}
    ExtensionCustomAttribute3 : {}
    ExtensionCustomAttribute4 : {}
    ExtensionCustomAttribute5 : {}
    DisplayName : David
    ExternalDirectoryObjectId :
    LastExchangeChangedTime :
    RecipientType : UserMailbox
    RecipientTypeDetails : UserMailbox
    Identity : myDomain.local/MyBusiness/Users/SBSUsers/David
    IsValid : True
    ExchangeVersion : 0.20 (15.0.0.0)
    Name : David
    DistinguishedName : CN=David,OU=SBSUsers,OU=Users,OU=MyBusiness,DC=dbGmbH,DC=local
    Guid : 6906efd4-70fa-4392-9d17-bc27b15dc8a1
    OrganizationId :
    Id : myDomain.local/MyBusiness/Users/SBSUsers/David
    OriginatingServer : Server01-DC.myDomain.local
    ObjectState : Changed

    Get-MoveRequest | Get-MoveReqestStatistics
    RunspaceId : f020deb9-e30e-405a-aca9-e8c82923a7eb
    MailboxIdentity : myDomain.local/MyBusiness/Users/SBSUsers/David
    DistinguishedName : CN=David,OU=SBSUsers,OU=Users,OU=MyBusiness,DC=dbGmbH,DC=local
    DisplayName : David
    Alias : David
    ExchangeGuid : 05f66854-323a-4e3c-9de3-435ac4eb56b8
    ArchiveGuid :
    Status : Completed
    StatusDetail : None
    SyncStage : SyncFinished
    Flags : IntraOrg, Pull
    RequestStyle : IntraOrg
    Direction : Pull
    IsOffline : False
    Protect : False
    DoNotPreserveMailboxSignature : True
    Priority : Normal
    WorkloadType : Local
    Suspend : False
    SuspendWhenReadyToComplete : False
    IgnoreRuleLimitErrors : False
    RecipientTypeDetails : UserMailbox
    SourceVersion : Version 8.3 (Build 516.0)
    SourceDatabase : W2K8\First Storage Group\Mailbox Database
    SourceServer : W2K8.myDomain.local
    TargetVersion : Version 15.0 (Build 1263.0)
    TargetDatabase : db
    TargetServer : SRVEX2K13.myDomain.local
    SourceArchiveDatabase :
    SourceArchiveVersion :
    SourceArchiveServer :
    TargetArchiveDatabase :
    TargetArchiveVersion :
    TargetArchiveServer :
    RemoteHostName :
    RemoteGlobalCatalog :
    BatchName : MigrationService:Migration2
    StartAfter :
    CompleteAfter :
    EffectiveIncrementalSyncInterval : 00:15:00
    ConfiguredIncrementalSyncInterval :
    RemoteCredentialUsername :
    RemoteDatabaseName :
    RemoteDatabaseGuid :
    RemoteArchiveDatabaseName :
    RemoteArchiveDatabaseGuid :
    TargetDeliveryDomain :
    ArchiveDomain :
    BadItemLimit : 10
    BadItemsEncountered : 1
    LargeItemLimit : 0
    LargeItemsEncountered : 0
    AllowLargeItems : True
    QueuedTimestamp :
    StartTimestamp :
    LastUpdateTimestamp :
    LastSuccessfulSyncTimestamp :
    InitialSeedingCompletedTimestamp :
    FinalSyncTimestamp :
    CompletionTimestamp :
    SuspendedTimestamp :
    OverallDuration : 00:00:00
    TotalSuspendedDuration : 00:00:00
    TotalFailedDuration : 00:00:00
    TotalQueuedDuration : 00:00:00
    TotalInProgressDuration : 00:00:00
    TotalStalledDueToContentIndexingDuration : 00:00:00
    TotalStalledDueToMdbReplicationDuration : 00:00:00
    TotalStalledDueToMailboxLockedDuration : 00:00:00
    TotalStalledDueToReadThrottle : 00:00:00
    TotalStalledDueToWriteThrottle : 00:00:00
    TotalStalledDueToReadCpu : 00:00:00
    TotalStalledDueToWriteCpu : 00:00:00
    TotalStalledDueToReadUnknown : 00:00:00
    TotalStalledDueToWriteUnknown : 00:00:00
    TotalTransientFailureDuration : 00:00:00
    TotalIdleDuration : 00:00:00
    MRSServerName : SRVEX2K13.myDomain.local
    TotalMailboxSize : 17.84 GB (19,158,568,745 bytes)
    TotalMailboxItemCount : 43182
    TotalArchiveSize :
    TotalArchiveItemCount :
    BytesTransferred : 18.05 GB (19,379,583,969 bytes)
    BytesTransferredPerMinute : 0 B (0 bytes)
    ItemsTransferred : 43102
    PercentComplete : 100
    CompletedRequestAgeLimit : 7.00:00:00
    PositionInQueue :
    InternalFlags : SkipFolderPromotedProperties
    FailureCode :
    FailureType :
    FailureSide :
    Message :
    FailureTimestamp :
    IsValid : True
    ValidationMessage :
    RequestGuid : 8999ac7d-c6da-4688-8ab0-a2bc8b8cada6
    RequestQueue : db
    MigrationMailboxGuid :
    SourceEndpointGuid :
    Identity : myDomain.local/MyBusiness/Users/SBSUsers/David
    DiagnosticInfo :
    Report :
    LastFailure :
    RequestExpiryTimestamp : 31.12.9999 23:59:59
    ObjectState : New

    Gruß Ernst

    Reply
  7. Hallo Frank,

    danke für die tollen Anleitungen. Ich habe bei der Migration von 2013 auf 2016 folgendes Problem:
    Es wurde zuerst eine Migration auf von 2007 auf 2013 (Postfächer und öffentliche Ordner) gemacht, hat ohne Probleme funktioniert. Nach Prüfung ob alles rund läuft, wurde der Exchange 2007 entfernt. Der Exchange 2013 läuft immer noch ohne Probleme.Nun habe ich am Wochenende eine Migration von 2013 auf 207 gemacht. Die öffentlichen Ordner wurden problemlos migriert. Wenn ich aber Postfächer migriere passiert nichts Bei der Ersten Übername wurden alle finalisiert. Wenn ich aber ein Systemkonto migriere, welches bei der Installation von 2013 angelegt wird, wird dieses migriert. Bei den Konten, die nicht gehen ist bei Gesamt zuerst eine Zahl, nach kurzer Zeit ist hier aber wieder eine 0.

    Wo könnte hier der Fehler liegen?

    Gruß Ernst

    Reply
    • Hallo Ernst,

      so aus dem Stehgreif kann ich das nicht beantworten, der Moverequest müsste aber Aufschluss geben:

      get-moverequest | fl
      get-moverequest | Get-MoveRequestStatistics | fl

      Gruß, Frank

      Reply

Leave a Comment