DPM 2012 R2 mmc crashes when recovering from Azure online protection RRS feed

  • Question

  • Hi!

    We have a problem with DPM 2012 R2 - when recovering files from Azure Online protection, the mmc console crashes with Event id 999. Error log states that 'specified path, file name, or both are too long'. Restoring the same files from tape or local disk works fine. Also, restoring separate instances from Azure online protection, like SQL database, works fine, so far it looks that only file server online restoring fails. The backup to Azure completes with no errors, whatsoever. It seems that the problem lies in DPM SQL database datasource ids, however, changing the datasource ids manually doesn't seem a reasonable workaround. The error log is attached below:

    The description for Event ID 999 from source MSDPM cannot be found. Either the component that raises this event is not installed on your local computer or the installation is corrupted. You can install or repair the component on the local computer.

    If the event originated on another computer, the display information had to be saved with the event.

    The following information was included with the event: 

    An unexpected error caused a failure for process 'mmc'.  Restart the DPM process 'mmc'.

    Problem Details:
    <FatalServiceError><__System><ID>19</ID><Seq>5</Seq><TimeCreated>09.05.2016. 7:08:45</TimeCreated><Source>DpmThreadPool.cs</Source><Line>163</Line><HasError>True</HasError></__System><ExceptionType>PathTooLongException</ExceptionType><ExceptionMessage>The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.</ExceptionMessage><ExceptionDetails>System.IO.PathTooLongException: The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
       at System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths)
       at Microsoft.Internal.EnterpriseStorage.Dls.CloudBackup.CloudEngineProxyWrapper.GetItemNameFromPath(String path)
       at Microsoft.Internal.EnterpriseStorage.Dls.CloudBackup.CloudEngineProxyWrapper.GetRecoverableItemWithSuffix(CBRecoverableItem item, String suffix)
       at Microsoft.Internal.EnterpriseStorage.Dls.UI.ObjectModel.FileSystem.VolumeRecoverysource.GetShareRecoverableObjectsFromOnlineBackup()
       at Microsoft.Internal.EnterpriseStorage.Dls.UI.ObjectModel.FileSystem.VolumeRecoverysource.GetAllShares(Object tag)
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
       at System.Threading.ThreadPoolWorkQueue.Dispatch()</ExceptionDetails></FatalServiceError>

    the message resource is present but the message is not found in the string/message table

    Any help would be appreciated, thanks!

    Monday, May 9, 2016 9:00 AM

All replies

  • Hi,

    You can always bypass this <g class="gr_ gr_99 gr-alert gr_spell gr_inline_cards gr_run_anim ContextualSpelling ins-del multiReplace" data-gr-id="99" id="99">mmc</g> limitation by using PowerShell to Recover the data.

    Here is the code <g class="gr_ gr_197 gr-alert gr_tiny gr_spell gr_inline_cards gr_run_anim ContextualSpelling multiReplace" data-gr-id="197" id="197">i</g> used:

    Parameters: Folder Path, File to Restore, Deletion Date
    Example Usage: 
    .\RecoverFile.ps1 "E:Users\Jon.Doe" "Documents" "2018-09-16 09:54:24.117" 
    $filePath = [IO.Path]::Combine("E:\", "Users\" ) 
    $fileName = "Jon.Doe"
    $dateDeleted = Get-Date "2018-09-20 18:00"
    $filePath = [IO.Path]::Combine("E:\Users\", $args[0] )
    $fileName = $args[1]
    $dateDeleted = Get-Date $args[2]
    Write-Host "Restoring '" -NoNewLine
    Write-Host $filePath -NoNewLine
    Write-Host $fileName -NoNewLine
    Write-Host "' which was deleted on '" -NoNewLine
    Write-Host $dateDeleted -NoNewLine
    Write-Host "'"
    $recoveryDate = Get-Date $dateDeleted.AddDays(-1).ToShortDateString()
    $pg = Get-ProtectionGroup -DPMServerName DPMSERVER.domain.local | Where-Object {$_.FriendlyName -eq "InsertProtectionGroupNameHere"} 
    $ds = Get-Datasource $pg
    $so = New-DPMSearchOption -FromRecoveryPoint $recoveryDate.AddDays(-1).ToShortDateString() -ToRecoveryPoint $recoveryDate.ToShortDateString() -SearchDetail FilesFolders -SearchType exactMatch -Location $filePath -SearchString $fileName
    $ri = Get-DPMRecoverableItem -Datasource $ds[2] -SearchOption $so
    $ro = New-RecoveryOption -TargetServer DPM-02 -RecoveryLocation CopyToFolder -FileSystem -AlternateLocation "C:\Restored\" -RecoveryType Restore -OverwriteType Overwrite
    $recoveryJob = Recover-RecoverableItem -RecoverableItem $ri -RecoveryOption $ro
    #4.3 Wait till the recovery job completes
    while (! $recoveryJob.hasCompleted )
        # Show a progress bar
        Write-Host "." -NoNewLine
        Start-Sleep 1
    if($recoveryJob.Status -ne "Succeeded")
        Write-Host "Recovery failed" -ForeGroundColor Red
        Write-Host "Recovery successful" -ForeGroundColor Green

    • Proposed as answer by Peteris Tuesday, June 11, 2019 6:23 AM
    Thursday, September 20, 2018 8:56 AM