从 Exchange 2013 迁移到 2019 导致目标数据库崩溃

从 Exchange 2013 迁移到 2019 导致目标数据库崩溃

将 Exchange 2013 邮箱迁移到 Exchange 2019 时遇到问题。每当邮箱处于迁移的最后步骤时,它都会导致目标邮箱(邮箱数据库 2019)中断。2019 服务器上的事件日志会亮起,每次崩溃都会伴随错误和警告。每次崩溃后,数据库都会重新安装,迁移将成功完成。今年我已经升级到 2019 几次,但这是我第一次从 2013 升级到 2019。其他迁移(2010 -> 2016 -> 2019)进展顺利。以下是我尝试修复它的所有方法。

  1. 将邮箱移回 2013 年。每次都执行一次,并在每次崩溃时重新安装数据库
  2. 这些是虚拟机,我从域中删除了 2019 并安装在新服务器上。同样的问题。
  3. 安装了 2019 年的另一个 CU(之前安装的是 CU6,现在升级到 CU3)。同样的问题
  4. 在另一个新的虚拟服务器上安装了 Exchange 2016。将邮箱迁移到 2016 没有任何错误。
  5. 从 2016 年迁移到 2019 年,同样的问题。
  6. 从 2019 年迁移到 2016 年,同样的问题。
  7. 打电话给微软,付了 500 美元,几个小时后毫无进展。他们帮助将所有内容恢复到 2013 并在那里稳定运行。
  8. 确保已启用 MAPI
  9. 将 MAPI 的内部和外部 URL 设置为正确的值
  10. 在事件查看器中搜索任何与数据库崩溃有关的模糊引用,但在应用程序日志之外找不到任何内容。

以下是我从一开始就遇到的两个错误。来源:MSExchangeIS 事件 ID 1002。在互联网上搜索此错误,我得到的是接近但不完全准确的错误,这些错误应该在较旧的 CU 中已经修复。

未处理的异常(System.InvalidOperationException:可空对象必须有一个值。在 System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource 资源)处,位于 Microsoft.Exchange.Protocols.MAPI.MapiMessage.IsStreamSizeInvalid(MapiContext 上下文,Int64 大小)处,位于 Microsoft.Exchange.Protocols.MAPI.MapiStream.ValidateStreamSize(MapiContext 上下文,Int64 大小)处,位于 Microsoft.Exchange.Protocols.MAPI.MapiStream.Write(MapiContext 上下文,Byte[] bytesToWrite,Int32 偏移量,Int32 长度)处,位于 Microsoft.Exchange.Server.Storage.MapiDisp.RopHandler.WriteStreamExtended(MapiContext 上下文,MapiStream 流,ArraySegment 1[] dataChunks, UInt32& outputByteCount, WriteStreamExtendedResultFactory resultFactory) at Microsoft.Exchange.Server.Storage.MapiDisp.RopHandlerBase.WriteStreamExtended(IServerObject serverObject, ArraySegment1[] dataChunks,WriteStreamExtendedResultFactory resultFactory)处Microsoft.Exchange.RpcClientAccess.Parser.RopWriteStreamExtended.InternalExecute(IServerObject serverObject、IRopHandler ropHandler、ArraySegment 1 outputBuffer) at Microsoft.Exchange.RpcClientAccess.Parser.InputRop.Execute(IConnectionInformation connection, IRopDriver ropDriver, ServerObjectHandleTable handleTable, ArraySegment1 outputBuffer) 在 Microsoft.Exchange.RpcClientAccess.Parser.RopDriver.ExecuteRops(List 1 inputArraySegmentList, ServerObjectHandleTable serverObjectHandleTable, ArraySegment1 outputBuffer、Int32 outputIndex、Int32 maxOutputSize、Boolean isOutputBufferMaxSize、Int32& outputSize、AuxiliaryData secondaryData、Boolean isFake、Byte[]& fakeOut) 在 Microsoft.Exchange.RpcClientAccess.Parser.RopDriver.ExecuteOrBackoff(IList 1 inputBufferArray, ArraySegment1 outputBuffer、Int32& outputSize、AuxiliaryData secondaryData、Boolean isFake、Byte[]& fakeOut) 在 Microsoft.Exchange.Server.Storage.MapiDisp.MapiRpc.<>c__DisplayClass29_1.b__0(MapiContext operationContext、MapiSession&会话、布尔值和 deregisterSession、AuxiliaryData 辅助数据)位于 Microsoft.Exchange.Server.Storage.MapiDisp.MapiRpc.Execute(IExecutionDiagnostics 执行诊断、MapiContext outerContext、字符串函数名称、布尔值 isRpc、IntPtr 和 contextHandle、布尔值 tryLockSession、字符串 userDn、IList 1 dataIn, Int32 sizeInMegabytes, ArraySegment1 auxIn、ArraySegment 1 auxOut, Int32& sizeAuxOut, ExecuteDelegate executeDelegate) at Microsoft.Exchange.Server.Storage.MapiDisp.MapiRpc.DoRpc(IExecutionDiagnostics executionDiagnostics, IntPtr& contextHandle, IList1 ropInArraySegments、ArraySegment 1 ropOut, Int32& sizeRopOut, Boolean internalAccessPrivileges, ArraySegment1 auxIn、ArraySegment 1 auxOut, Int32& sizeAuxOut, Boolean fakeRequest, Byte[]& fakeOut) at Microsoft.Exchange.Server.Storage.MapiDisp.PoolRpcServer.EcDoRpc(MapiExecutionDiagnostics executionDiagnostics, IntPtr& sessionHandle, UInt32 flags, UInt32 maximumResponseSize, ArraySegment1 请求、ArraySegment 1 auxiliaryIn, IPoolSessionDoRpcCompletion completion) at Microsoft.Exchange.Server.Storage.MapiDisp.PoolRpcServer.EcPoolSessionDoRpc_Unwrapped(MapiExecutionDiagnostics executionDiagnostics, IntPtr contextHandle, UInt32 sessionHandle, UInt32 flags, UInt32 maximumResponseSize, ArraySegment1 请求、ArraySegment`1 辅助输入、IPoolSessionDoRpcCompletion 完成)
位于 Microsoft.Exchange.Server.Storage.MapiDisp.PoolRpcServer。<>c__DisplayClass48_0.b__0() 位于 Microsoft.Exchange.Common.IL.ILUtil.DoTryFilterCatch[T](Action tryDelegate、GenericFilterDelegate filterDelegate、GenericCatchDelegate catchDelegate、T 状态)。

来源:MSExchangeIS 事件 ID 1013

邮箱 GUID 为 8f656114-9b45-43ac-8073-8ddd3f7596b8 的邮箱导致数据库“邮箱数据库 2”(da3e70b9-c9b1-4937-9fb1-f18324f85926) 崩溃或资源中断。

版本:15.02.0464.005 描述:InvalidOperationException:S.ThrowHelper.ThrowInvalidOperationException、MEPMAPI.MapiMessage.IsStreamSizeInvalid、MEPMAPI.MapiStream.ValidateStreamSize、MEPMAPI.MapiStream.Write、MESSMD.RopHandler.WriteStreamExtended、MESSMD.RopHandlerBase.WriteStreamExtended、MERCAP.RopWriteStreamExtende

从表面上看,我知道错误意味着什么……但我不知道去哪里修复它。如果您需要更多信息或事件日志,我会提供。感谢您的帮助!

答案1

您的 Exchange Server 2013 的内部版本号是多少?根据我的研究,MSExchangeIS 事件 ID 1013似乎是由于版本不支持导致的.NET Framework,1013事件相关的官方文档供参考:Exchange Server 2013 中的邮箱被隔离且数据库意外发生故障转移,您可以运行以下命令来检查您的 Exchange 2013 CU 当前的 .NET Framework 版本是否为支持/不支持的版本(同时,您也可以在Exchange 2019 Server上进行检查):

$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Server) $RegKey= $Reg.OpenSubKey("SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full") [int]$NetVersionKey= $RegKey.GetValue("Release") if($NetVersionKey -ge 381029) { "4.6 or later" return } switch ($NetVersionKey) { {($_ -ge 378389) -and ($_ -lt 378675)} {"4.5"} {($_ -ge 378675) -and ($_ -lt 379893)} {"4.5.1"} {$_ -ge 379893} {"4.5.2"} default {"Unable to Determine"} }

相关内容