Lingering Objects Blocking Replication — Event 1988
A domain controller logs Event 1988 and halts inbound replication when it encounters an object that was deleted and garbage-collected elsewhere in the forest but still exists as a live object on the source DC — here is how to find it and remove it safely.
Logged on the destination DC when a source DC tries to replicate an object that the destination has already garbage-collected.
The registry setting that causes a DC to block replication rather than silently reanimate a deleted object. Enabled by default on Server 2003 SP1 and later.
The window (180 days by default in forests raised to Windows Server 2003 SP1 or later) during which a deleted object persists before garbage collection. Miss this window and lingering objects form.
What the Error Looks Like
Event 1988 appears in the Directory Service event log on the destination DC — the one that has stopped accepting replication. The event body identifies the source DC, the object DN, and the object GUID:
Log Name: Directory Service
Source: NTDS Replication
Event ID: 1988
Level: Error
The local domain controller has attempted to replicate the following
object from the following source domain controller.
Source domain controller: <GUID-based CNAME of source DC>
Object: CN=JohnSmith,OU=Users,DC=corp,DC=example,DC=com
Object GUID: {a1b2c3d4-...}
This object is not present on the local domain controller because
it may have been deleted and already garbage collected.
Source domain controller:
<dc02.corp.example.com>
At the same time, repadmin /showrepl will show a persistent failure with error 8606 (“Insufficient attributes were given to create an object. This object may not exist because it may have been deleted and already garbage collected.”) on one or more naming contexts.
What It Actually Means
Think of a lingering object like a revoked access card that one security guard still has on file. Every other guard was told the card was revoked months ago and has destroyed their copy. But this one guard missed the memo — and now when he tries to wave the card through, the system at the door refuses because it knows the card no longer exists.
In AD terms: an object was deleted on most DCs, became a tombstone, and was eventually garbage-collected (permanently purged). But the source DC was offline, or replication was broken, for longer than the tombstone lifetime. When replication resumed, that DC tried to propagate changes for an object that the destination had already permanently deleted. Strict replication consistency — the correct default posture — refuses to reanimate it, so replication halts.
The alternative (loose replication consistency) would silently reanimate the deleted object on the destination. That is a worse outcome: deleted users, computers, or security groups would re-appear in the directory as live objects, potentially with stale group memberships and permissions.
How to Diagnose
The diagnosis is straightforward. The 1988 event itself gives you most of what you need. Run these commands from an elevated command prompt on any healthy DC.
# Check replication status across the forest — look for 8606 errors
repadmin /showrepl * /errorsonly
# Show the full replication summary, useful for spotting the affected naming context
repadmin /replsum
# Get the GUID of any healthy DC to use as your reference in the removal step
# (look for the "DSA object GUID" line in the output)
repadmin /showrepl dc01.corp.example.com
# Check the tombstone lifetime for the forest — default is 180 days on modern forests
repadmin /showattr "CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,DC=corp,DC=example,DC=com" /atts:tombstonelifetime
# Retrieve metadata on the lingering object to understand when it was deleted
# Use the Object GUID from the 1988 event
repadmin /showobjmeta dc02.corp.example.com "<GUID=a1b2c3d4-...>"
In the repadmin /showobjmeta output, look at the LastKnownParent date stamp (when the object was deleted) and the IsDeleted version number. A version of 1 means it was deleted once and never reanimated. An even-numbered version means it was deleted and then auth-restored at least once. That distinction matters for deciding whether the object should exist at all.
Common Causes
| Cause | How to Confirm | Fix |
|---|---|---|
| DC offline or replication broken for longer than tombstone lifetime | repadmin /showrepl shows a long gap in successful replication; compare gap duration against tombstone lifetime |
Remove lingering objects with repadmin /removelingeringobjects as shown below, then restore replication health |
| VM restored from a snapshot older than tombstone lifetime | DC’s USN is behind what partners expect; Event 2095 (USN rollback) may also appear | Force-demote the affected DC if the snapshot is too old; promote fresh. If snap is recent, remove lingering objects and verify replication. |
| Clock jump — system time advanced then corrected, accelerating garbage collection | Check Event Viewer and repadmin logs for timestamps that predate the OS installation or jump forward by years | Correct time, then run lingering-object removal. Review W32Time configuration on the affected DC. |
| Transient lingering object — object is in the deleted-objects container on the source, just not yet garbage-collected | repadmin /showobjmeta shows IsDeleted=1 and delete date is within the last 12 hours |
Wait up to 12 hours for the garbage-collection daemon to run, or trigger it manually (see below) |
| Auth-restore at the cusp of tombstone lifetime expiration | repadmin /showobjmeta shows IsDeleted version 2+ and the date stamp is at the cusp of TSL days |
Decide whether the object should exist. If yes, reanimate on all DCs. If no, delete it from the source with repadmin /removelingeringobjects. |
The Fix
There are three tools for removing lingering objects. Use them in the order shown — advisory mode first, always.
Option 1 — repadmin (command line, recommended for targeted cleanup)
# Step 1: Run in advisory mode first — this reports what would be removed without touching anything.
# Replace dc02 with the source DC holding lingering objects (named in the 1988 event).
# Replace the GUID with the DSA object GUID of any healthy reference DC (from repadmin /showrepl).
# Replace the DN with the naming context from the 1988 event.
repadmin /removelingeringobjects dc02.corp.example.com {healthy-dc-guid} "DC=corp,DC=example,DC=com" /advisory_mode
# Review the Directory Service event log on dc02 for Event 1388 entries
# (advisory mode logs what it would remove without acting).
# Step 2: Run without /advisory_mode to perform the actual removal.
repadmin /removelingeringobjects dc02.corp.example.com {healthy-dc-guid} "DC=corp,DC=example,DC=com"
# Repeat for the Configuration partition if needed.
repadmin /removelingeringobjects dc02.corp.example.com {healthy-dc-guid} "CN=Configuration,DC=corp,DC=example,DC=com" /advisory_mode
repadmin /removelingeringobjects dc02.corp.example.com {healthy-dc-guid} "CN=Configuration,DC=corp,DC=example,DC=com"
# After removal, force replication and verify it succeeds.
repadmin /syncall /AdeP
dc02 in the example) is the one being cleaned — it must have network access on port 389 to the reference DC named by GUID. Run the command from a DC, not from a workstation.
Option 2 — Lingering Object Liquidator (GUI, recommended for forest-wide cleanup)
Microsoft’s Lingering Object Liquidator (LOL) is a free download from the Microsoft Download Center (search “Lingering Object Liquidator”). It provides a GUI that scans the entire forest for lingering objects and removes them in bulk. It requires .NET Framework 4.5.2 and Domain Administrator credentials, and it must be run from a machine with network access to all DCs. For environments with multiple affected DCs or multiple naming contexts, LOL is considerably faster than running repadmin per-partition per-DC.
Option 3 — Trigger garbage collection manually (transient objects only)
# If the lingering objects are transient (already deleted, not yet garbage-collected),
# you can trigger the garbage-collection daemon immediately rather than waiting up to 12 hours.
# Run this from an elevated command prompt on the source DC.
repadmin /setattr "" "" doGarbageCollection add 1
Strict Replication Consistency
Strict replication consistency is what causes Event 1988 in the first place — and it is exactly what you want. It has been enabled by default on domain controllers since Windows Server 2003 SP1. On older forests, it may have been left off; check the value on all DCs and enable it if it is missing.
# Check the current value on a DC — 1 = strict (correct), 0 = loose (vulnerable)
reg query "HKLM\System\CurrentControlSet\Services\NTDS\Parameters" /v "Strict Replication Consistency"
# Enable strict replication consistency if not already set (run on each DC that lacks it)
reg add "HKLM\System\CurrentControlSet\Services\NTDS\Parameters" /v "Strict Replication Consistency" /t REG_DWORD /d 1 /f
How to Prevent It
Lingering objects form when replication is broken long enough for garbage collection to outpace it. Prevention is therefore a matter of monitoring replication health continuously and acting before any DC falls silent for longer than the tombstone lifetime.
| Measure | Detail |
|---|---|
| Monitor replication daily | Run repadmin /showrepl * /csv on a schedule and alert on any failure. A DC that has not replicated in more than 50% of the tombstone lifetime needs immediate attention. |
| Force-demote DCs that have been offline too long | Any DC that has been offline or unreachable for longer than the tombstone lifetime (180 days) should be force-demoted rather than brought back online. Rejoining it fresh is safer than attempting cleanup. |
| Snapshot policy for virtualised DCs | Never restore a DC snapshot older than the tombstone lifetime. For Hyper-V and VMware, use VSS-aware snapshots and keep them short-lived. Use the AD Recycle Bin for object recovery instead of snapshot restores where possible. |
| Verify W32Time is healthy | Clock jumps on a DC can prematurely accelerate garbage collection. Ensure the time hierarchy is configured correctly — the Time Service Errors — w32tm 0x800705B4 post covers the common failure modes. |
Final Thoughts
Lingering objects are almost always the consequence of something else that already went wrong — a DC that was offline too long, a snapshot restored carelessly, or a clock that jumped forward. Event 1988 is not the root cause; it is AD telling you that strict consistency is working as designed and that you have debt to repay from an earlier failure.
The cleanup itself is mechanical once you have identified the affected DC and naming context. The more important work is understanding how the gap opened in the first place and closing it so replication health does not degrade silently again. That is what the daily repadmin /showrepl monitoring is for — catching the gap when it is hours old, not months.
For the broader picture of how AD replication works and why it is designed around tombstone lifetimes, see Active Directory — Part 7 — Active Directory Replication.
repadmin /removelingeringobjects in advisory mode first, then without — targeting the source DC named in Event 1988. Verify replication is clean afterward with repadmin /showrepl * /errorsonly. Then find out why the DC missed replication long enough to create the problem, and fix that too.
For another replication failure that produces a similar “object divergence” symptom, see the USN Rollback Detected — Event 2095 post — the two issues often appear together after a DC is restored from an old snapshot.