MPFListener.exe crashed because of sqloledb.dll?

Recently, I have seen a couple of our customers encountered the following where the MPFListner.exe (Provisioning Auditing and Recovery Service) crashed immediately after you try to start it. You can try to reboot the machine, or restart the Provisioning Auditing and Recovery Service multiple times; it just won’t recover from it.

The service will get started and then it will crashed right away giving the following error,

Problem Description: Event Type: Error
Event Source: Application Error
Event Category: (100)
Event ID: 1000
Date: 1/1/2009
Time: 1:00:00 PM
User: N/A
Computer: <ServerName>
Description:
Faulting application MPFListener.exe, version 13.3.609.9, faulting module sqloledb.dll, version 2000.86.3959.0, fault address 0x0004abe4.

For more information, see Help and Support Center at https://go.microsoft.com/fwlink/events.asp.
Data:
0000: 41 70 70 6c 69 63 61 74 Applicat
0008: 69 6f 6e 20 46 61 69 6c ion Fail
0010: 75 72 65 20 20 4d 50 46 ure MPF
0018: 4c 69 73 74 65 6e 65 72 Listener
0020: 2e 65 78 65 20 31 33 2e .exe 13.
0028: 33 2e 36 30 39 2e 39 20 3.609.9
0030: 69 6e 20 73 71 6c 6f 6c in sqlol
0038: 65 64 62 2e 64 6c 6c 20 edb.dll
0040: 32 30 30 30 2e 38 36 2e 2000.86.
0048: 33 39 35 39 2e 30 20 61 3959.0 a
0050: 74 20 6f 66 66 73 65 74 t offset
0058: 20 30 30 30 34 61 62 65 0004abe
0060: 34 4

With the help of some of my colleagues, we were able to track the problem down to a null value in the EventDesc field in the Event table in MPFTranLogData database. It seems that the MPFListener crashes when moving Records from MPFTranLogData to MPFAudit database and the sqloledb.dll was not able to handle the null value when it is called and crashed. Hence, as long as the data is still in the MPFTranLogData, the MPFListener will crash the moment it attempts to move the record with the null value.

A hotfix is available for this where the MPFListener will have better intelligence on dealing with this and will continue to move records over to MPFAudit without crashing like this. However, as I am writing this, you will have to contact Microsoft to obtain the hotfix.

To work around right now is this,

1. To find out if you have such records in your database,

 

SELECT *

 FROM [MPFTranLogData].[dbo].[Events]

WHERE [EventDesc] is null

2. If you find records some there, then try to update those records by setting the EventDesc to ‘N/A’ instead of having it as null like the following,

 

UPDATE [MPFTranLogData].[dbo].[Events]

SET [EventDesc]=’N/A’

WHERE [EventDesc] is null

Please take note that the above steps will update the database directly. This is provided "AS IS" with no warranties, and confers no rights. Use of included script samples are subject to the terms specified in the Terms of Use.

Thanks to Mike K and Luc G.