SYMPTOMS
You can see the errors like the following in EventLog on MPS node:
Event Source: Provisioning EngineEvent Category: NoneEvent ID: 4108 or 4109
Date: X/XX/XXXXTime: XX:XX:XX
User: N/AComputer: XXXXDescription:The provisioning engine failed while aborting the transaction picked by the backgroundthread for cleanup. Transaction ID = 'XXXXX', client transaction ID = '{unknown}', Transaction Log server = 'XXX-XXX' Database = 'MPFTranLogData'. The transaction might be in an inconsistent state. Check the transaction log database to determine the exact state of the transaction.For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp. CAUSE
Following issues could be the reason of such errors:
- Some MPS Providers throw exception on transaction rollbackE.g. SetUserPassword procedure in standard Active Directory provider this is an issue of Microsoft's providers implementation, because by design of MPS Engine requires no-error policy in transaction rollback method.
- This may be a result of incorrect MPS Engine restart (dllhost.exe process killing).
The standard behaviour of MPS Engine is a removing failed transactions to the MPFAuditLog database, but sometimes it isn't happens. Possibly it is a Microsoft issue.
RESOLUTION
1. Log on on to the Microsoft Provisioing System host (POAMPS01) using an account that is a member of the Domain Administators group.2. Run Administrative Tools > Event Viewer.
3. Right-click Application and select View > Filter.
4. In Event Types box check Error and uncheck Information and Warning check boxes.
5. Select Provisioning Engine in Event Source combo box.
6. In Event ID type 4109. Click OK.
7. On the right pane double-click on every event and copy Transaction ID to textual file (comma separated list of failed transaction ids).
8. Repeat steps 2-6 but enter 4108 for Event ID field.
9. Run Microsoft SQL Server > SQL Query Analizer tool.
10. Select MPFTranLogData database in databases combo box.
11. Enter the following SQL script:
DELETE FROM Request WHERE TranIdx IN (<comma separated list of failed transaction ids>)
DELETE FROM TransIDs WHERE TranIdx IN (<comma separated list of failed transaction ids>)
12. Click Execute Query button.
Example:
DELETE FROM Request WHERE TranIdx in (32256, 34175, 34178)
DELETE FROM TransIDs WHERE TranIdx in (32256, 34175, 34178)
Important!
TransIDs table may exists under two owners: dbo and POADOMAIN\MPFServiceAcct. Execute query for table with POADOMAIN\MPFServiceAcct owner i.e.:
DELETE FROM "POADOMAIN\MPFServiceAcct".TransIDs WHERE TranIdx in (32256, 34175, 34178)
Keywords: mps failed transactions