Servers Administration

Diagnosing AD Replication and FSMO Failures with repadmin and dcdiag

When Active Directory replication breaks, nothing fails loudly at first. Logons keep working off cached credentials, group policy keeps applying from the last good SYSVOL copy, and DNS keeps resolving because the records were already there. Then three weeks later a password reset does not take on half your domain controllers, a Kerberos ticket gets issued against a stale group membership, an account you disabled is still able to authenticate against one site, and repadmin starts spitting 8606 while the forest quietly diverges. By the time a human notices, you may already have lingering objects re-animating deleted principals, and if you let a domain controller roll its database backward you can poison the entire topology. Replication failures are the most consequential class of Active Directory incident precisely because they are silent, cumulative, and — when mishandled — self-propagating.

This is the triage playbook I run when a replication or FSMO (Flexible Single Master Operations) problem lands on my desk. It assumes Windows Server 2019/2022/2025 domain controllers, Domain Admin rights (plus Enterprise Admin for forest-wide operations), and that you understand the difference between fixing a symptom and fixing a cause. The two workhorse tools are repadmin (which reports and manipulates the replication engine directly) and dcdiag (which runs a battery of correctness tests against a DC’s role as a directory server, DNS resolver, and Kerberos endpoint). Every command in the early sections is read-only. The destructive steps — seizing a role, removing lingering objects, force-demoting a rolled-back DC, metadata cleanup — come later and each carries a warning, because the entire job is judgement about which DC holds the authoritative copy of the data before you delete anything.

By the end you will stop guessing. When repadmin /replsummary shows a wall of failures you will know whether you face a DNS resolution problem wearing an AD error code (8524), a blocked RPC dynamic port (1722), a genuine lingering object needing authoritative cleanup (8606), a DC that quarantined itself after a snapshot revert (event 2095), or a dead FSMO holder that needs seizing before you can issue new RIDs. Knowing which within the first ten minutes is what separates a contained incident from a weekend forest rebuild.

What problem this solves

Active Directory is a distributed database with no single source of truth by design — every writable DC accepts changes and reconciles them with every other DC through multimaster replication. That design is a gift: any DC can service a password change, a group edit, a new computer join, and the change propagates everywhere without a central bottleneck. It becomes a wall the moment reconciliation stops, because now you have N copies of “the truth” that disagree, and the platform will not tell you which one is right — it only tells you they differ, in the form of an error code on a replication link.

What breaks without this knowledge: an on-call engineer sees 8606 and “removes lingering objects” pointed at the wrong reference DC, deleting live accounts across the forest. Or they see 2095 (USN rollback) and clear the Dsa Not Writable registry flag to “fix replication,” re-injecting a rolled-back database and corrupting the topology permanently. Or they seize the RID Master from a DC that later comes back online, producing two DCs handing out overlapping RID pools and duplicate security principals. Every one of these is a well-intentioned action that turns a recoverable incident into an unrecoverable one. The failure mode of AD troubleshooting is not inaction — it is confident wrong action.

Who hits this: anyone operating on-premises or hybrid Active Directory at any scale beyond a single DC. It bites hardest on estates with multiple sites over WAN links (where a link outage lets a DC fall behind the tombstone lifetime), virtualised DCs (where snapshot reverts and P2V/clone operations cause USN rollback), and hybrid environments where Entra Connect is synchronising a diverging directory upward into the cloud. The fix is almost never “restart the Netlogon service” — it is “find the mechanism that stopped converging, confirm which DC is authoritative, and act with the specific tool that respects the replication invariants.”

To frame the whole field before the deep dive, here is every symptom class this article covers, the question it forces, and the first place to look:

Symptom class What it usually means First question to ask First command to run Most common single cause
Replication failing on a link A specific partner pair cannot exchange changes Is it DNS, RPC, or a directory problem? repadmin /showrepl <DC> /verbose DNS resolution of the partner’s CNAME
Forest-wide failures Many links failing at once Is one DC sick or the topology broken? repadmin /replsummary One DC unreachable or KCC not building links
8606 storm A DC is offering references to deleted objects Which DC has stale (lingering) data? repadmin /removelingeringobjects ... /advisory_mode A DC offline longer than tombstone lifetime
DC quarantined itself Event 2095, Dsa Not Writable set Was this DB restored improperly? reg query ...NTDS\Parameters /v "Dsa Not Writable" VM snapshot revert / clone → USN rollback
Can’t create users / RIDs exhausted RID pool cannot be refilled Is the RID Master alive and reachable? dcdiag /test:RidManager /v RID Master down or replication to it broken
FSMO operation fails Schema change, RID issue, PDC-dependent op fails Who holds the role and is it reachable? netdom query fsmo FSMO holder offline; role needs transfer/seize
SYSVOL not replicating GPOs/scripts diverge across DCs Is this FRS or DFSR, and is it healthy? dfsrmig /getglobalstate / DFSR event log DFSR backlog or a leftover FRS migration

Learning objectives

By the end of this article you can:

Prerequisites & where this fits

You should already understand Active Directory Domain Services fundamentals: that a forest is the security and schema boundary, a domain is a partition and replication/administrative boundary within it, and that a domain controller hosts writable copies of several naming contexts (partitions): the Schema NC and Configuration NC (forest-wide), the Domain NC (per domain), plus application partitions such as the DNS zones (DomainDnsZones, ForestDnsZones). You should be comfortable in an elevated PowerShell prompt on a DC, able to read event logs, and know that the RSAT Active Directory module (Import-Module ActiveDirectory) and the classic tools (repadmin, dcdiag, ntdsutil, netdom, nltest) ship with the AD DS role and RSAT.

This sits at the operational heart of the on-premises identity track. It assumes the build knowledge from Building an AD DS Forest the Right Way: Deployment, FSMO, and a Tiered Admin Model, because you cannot troubleshoot a topology you did not design deliberately. It leans heavily on Highly Available DNS and DHCP on Windows Server, End to End, because the majority of “replication” incidents are DNS incidents in disguise. Kerberos correctness depends on time, so Accurate Hybrid Time Sync: chrony on Linux and w32time in Active Directory is upstream of the authentication symptoms here. In a hybrid estate, Microsoft Entra Connect Sync Deep Dive: Designing Hybrid Identity with PHS, PTA, and Seamless SSO is downstream — a diverging on-prem directory becomes a diverging cloud directory.

A quick map of who confirms what during an incident, so you open the right tool first:

Layer What lives here Tool that inspects it Failure classes it causes
Name resolution (DNS) DC A/CNAME records, _msdcs SRV dcdiag /test:DNS, nslookup 8524, “target not found”, KCC can’t build links
Network / RPC 135/TCP endpoint mapper + dynamic ports repadmin /bind, portqry 1722, 1256, RPC-over-SMB fallbacks
Replication engine USN, UTDV, connection objects repadmin /showrepl, /queue 8451, 8456, stuck queues, no inbound partners
Directory data Objects, tombstones, lingering objects repadmin /removelingeringobjects 8606, re-animated deleted objects
Database (ESE / NTDS.dit) The Jet database, transaction logs Directory Service event log, esentutl 8451, USN rollback (2095), journal wrap
FSMO roles Schema/Naming/RID/PDC/Infrastructure masters netdom query fsmo, dcdiag /test:FSMOCheck Can’t extend schema, RID exhaustion, time skew
SYSVOL Policies and scripts (DFSR or FRS) dfsrmig, DFSR event log, Get-DfsrBacklog GPO/script divergence, no logon scripts

Core concepts

Six mental models make every later diagnosis obvious. Skipping them is why engineers guess.

USNs are local, monotonic, and load-bearing. Every DC keeps a monotonically increasing 64-bit counter, the Update Sequence Number. Each originating write (a real change made on that DC) and each replicated-in change increments the local USN and stamps the affected attribute with the value. USNs are strictly local — DC-A’s USN 50,000 has nothing to do with DC-B’s USN 50,000. The USN is the currency of “how far along am I,” and everything about replication convergence is bookkeeping over USNs.

The high-watermark tracks per-partner progress. When DC-A replicates a partition from DC-B, it remembers the highest USN it has seen from DC-B for that partition — the high-watermark vector (HWMV). On the next cycle DC-A sends that watermark, and DC-B only ships changes with a USN higher than it. This is what makes replication incremental instead of a full re-sync every fifteen seconds.

The up-to-dateness vector prevents redundant transfers. The high-watermark alone is not enough in a mesh, because DC-A might already have a change indirectly via DC-C. So each DC also keeps an up-to-dateness vector (UTDV): for every DC that has ever originated a change to a partition (keyed by that DC’s invocation ID), the highest originating USN this DC has received, from any path. DC-A sends its UTDV, and DC-B uses it to skip changes DC-A already has by another route. The HWMV answers “where did you and I leave off”; the UTDV answers “what do I already have regardless of source.” Together they give propagation dampening — no loops, no redundant transfers — in an arbitrary mesh.

The invocation ID identifies the database instance, not the DC. Each writable copy of the NTDS.dit database has an invocation ID (a GUID). It is not the DC’s GUID — it identifies this specific instance of the database. When a DC is restored properly (from a system-state backup, or on a VM-GenerationID-aware host after a snapshot revert), AD resets the invocation ID so partners treat it as a “new” source and re-send anything it might have lost. The invocation ID is the safety mechanism that makes UTDV bookkeeping survive a restore. USN rollback is what happens when the database moves backward but the invocation ID does not change — partners think they already have those USNs, dampen the “new” changes, and the rolled-back DC silently stops originating updates. That is the single most dangerous failure in this article.

The KCC and ISTG build the topology you replicate over. You do not hand-wire who replicates from whom; the Knowledge Consistency Checker (KCC), running on every DC every fifteen minutes, computes the intra-site connection objects to keep replication within a two-hop diameter. For inter-site replication, one DC per site is elected the Inter-Site Topology Generator (ISTG) and builds the connections across site links you define. Sites model network locality (a set of subnets), site links model the WAN paths between them (with a cost, a schedule, and a replication interval, default 180 minutes), and bridgehead servers are the DCs that actually carry inter-site traffic. Get the site/subnet mapping wrong and DCs replicate over expensive or nonexistent paths — or a new DC never gets a connection object at all.

Tombstones, deletion, and the two lifetimes. When you delete an object, AD does not remove it immediately; it converts it to a tombstone (stripped of most attributes, marked deleted) so the deletion can replicate. The tombstone persists for the tombstone lifetime — 180 days on any forest first built at Server 2003 SP1 or later — after which garbage collection physically removes it. If a DC is offline longer than the tombstone lifetime, it never learns of deletions that garbage-collected elsewhere; when it returns it still holds those objects as live, and offering them to partners produces the lingering object class of failure (error 8606). (Modern forests with the AD Recycle Bin enabled keep a recoverable, attribute-complete “deleted” state before the tombstone stage, but the lifetimes and the lingering-object risk are unchanged.)

The vocabulary in one table

Before the deep sections, pin down every moving part. The glossary repeats these for lookup; this is the mental model side by side:

Concept One-line definition Where it lives Why it matters to troubleshooting
USN Local 64-bit change counter Per DC, in NTDS.dit The unit of “how far along”; rollback = disaster
High-watermark (HWMV) Highest USN seen from a specific partner Per partner, per partition Drives incremental “give me changes since X”
Up-to-dateness vector (UTDV) Highest originating USN per source DB (invocation ID) Per partition Propagation dampening; skips redundant changes
Invocation ID GUID for a database instance Per NTDS.dit copy Must change on restore; unchanged + rewound = USN rollback
KCC Builds intra-site connection objects On every DC (15 min) Broken KCC → no inbound partners → no replication
ISTG Elects/builds inter-site connections One DC per site Broken ISTG → sites stop replicating to each other
Site / site link Network locality / WAN path model Configuration NC Wrong subnet-to-site map → bad or missing topology
Bridgehead DC that carries inter-site traffic Per site Overloaded/failed bridgehead → inter-site backlog
Tombstone A deleted object awaiting garbage collection Every partition Object outlives it on an isolated DC → lingering object
Tombstone lifetime Days a tombstone survives (default 180) Configuration NC attribute The threshold past which a stale DC is dangerous
Lingering object A deleted object surviving on an isolated DC The stale DC Offered to partners → error 8606
FSMO role One of five single-master operations Specific role-holder DCs Loss blocks schema/RID/PDC-dependent operations
Connection object “Replicate inbound from partner X” Under a DC’s NTDS Settings Missing/orphaned → a link never runs

How multimaster replication actually works

You cannot diagnose what you cannot model, so this section walks a single change from origination to convergence, then names the places it can stall. Suppose an administrator resets a user’s password on DC-A.

  1. DC-A performs an originating write: it updates unicodePwd and related attributes, increments its local USN (say to 50,120), and stamps each changed attribute with (originating DSA = DC-A's invocation ID, originating USN = 50,120, version = n+1, timestamp). The local USN and per-attribute version number are the two counters that later decide conflicts.
  2. DC-A’s change is now in its copy of the Domain NC. Nothing has left the box yet. Intra-site, a change notification is queued: DC-A will notify its replication partners after a short delay (default 15 seconds, historically 5 minutes on older builds) so bursts coalesce.
  3. DC-B, a notified partner, calls back to DC-A over RPC asking for changes to the Domain NC, presenting its high-watermark for DC-A and its full UTDV. DC-A replies with every change past DC-B’s high-watermark that DC-B does not already have per the UTDV — here, the password reset.
  4. DC-B applies the change. If DC-B’s current version for unicodePwd is lower, DC-A’s wins and DC-B takes it, incrementing DC-B’s own local USN and updating its UTDV entry for DC-A’s invocation ID to 50,120. If the versions tie, the higher timestamp wins; if those tie too, the higher originating invocation-ID GUID wins — deterministic, so every DC resolves the conflict identically without coordination.
  5. DC-B, having changed, now notifies its partners, and the change fans out across the mesh, each hop dampened by UTDV so nobody re-applies it and no loop forms. Inter-site, there is no notification by default (to conserve WAN): the destination bridgehead polls on the site-link schedule/interval.

That is the happy path. Here is where each step can stall, which is your diagnostic map:

Step that stalls Symptom you observe Underlying cause Confirm with
DC-B can’t resolve DC-A Link fails, error 8524 DNS: missing/stale CNAME or A record dcdiag /test:DNS, nslookup <guid>._msdcs.<forest>
DC-B can’t RPC to DC-A Link fails, error 1722 / 1256 Firewall/dynamic-port block, dead partner repadmin /bind DC-A, portqry -n DC-A -e 135
DC-A offers a reference DC-B lacks Link fails, error 8606 Lingering object on DC-A repadmin /removelingeringobjects ... /advisory_mode
No connection object exists DC-B has no inbound partner for the NC KCC/ISTG not building links (site config, KCC error) repadmin /showrepl, dcdiag /test:KccEvent
Notifications don’t fire Changes converge only every poll interval Notification disabled or DC not in a site repadmin /showconn, check Site membership
Change never applied Object differs across DCs indefinitely ESE/database error on destination repadmin /showobjmeta, Directory Service log
Rolled-back DC dampens changes It stops originating; partners look “fine” USN rollback (invocation ID unchanged) Event 2095, Dsa Not Writable registry flag

Notification, polling, and the numbers that matter

The two knobs that shape when a change lands are notification (push) intra-site and polling (pull) inter-site. Know the defaults so “it hasn’t replicated yet” versus “it’s stuck” is a decision, not a hope:

Parameter Scope Default Where set Troubleshooting relevance
Change notification delay (first) Intra-site 15 s (modern) Registry / forest functional level Sub-minute intra-site convergence is normal
Change notification delay (subsequent) Intra-site 3 s Same Bursts coalesce, then fan out fast
Inter-site replication interval Site link 180 min Site link object “Not replicated for 2 h” inter-site can be normal
Inter-site notification Site link Off (poll-based) Enable per link if needed Enable for low-latency inter-site (WAN cost trade-off)
KCC run interval Per DC 15 min Registry Topology repairs itself within ~15 min
Garbage collection interval Per DC 12 h Configuration NC Tombstones/lingering candidates cleared on this cadence
Tombstone lifetime Forest 180 days Configuration NC attribute The isolation threshold for lingering objects

Reading replication health with repadmin

Start wide, then drill in. repadmin /replsummary is the one-screen forest health check and the correct first command in almost every incident.

repadmin /replsummary

It returns a source-side table and a destination-side table, each listing every DC with its largest delta (time since the oldest successful replication), fails/total counts, and an error percentage. Any non-zero fails column, or a largest delta measured in hours-to-days, is your starting thread. A DC missing from the list entirely is often the sick one — it could not even be contacted to report on.

Next, get the full per-partition, per-partner state from the DC you suspect:

repadmin /showrepl DC01 /verbose

Read it partition by partition — Schema, Configuration, the Domain NC, and each application partition (DomainDnsZones, ForestDnsZones). For each inbound neighbor you want Last attempt @ <time> was successful. A failing line is the smoking gun and names the error:

CORP\DC02 via RPC
    DSA object GUID: 8f4c2a91-...-a1b2c3d4e5f6
    Last attempt @ 2026-06-07 02:14:31 failed, result 8606 (0x219e):
        Insufficient attributes were given to create an object.
    142 consecutive failure(s).
    Last success @ 2026-05-19 23:51:07.

Two numbers matter here: the consecutive failure count (how long it’s been broken) and the last success (whether it ever worked — a link that never succeeded is a topology/DNS problem, one that stopped is a data or connectivity problem). To sweep the whole forest and dump parseable CSV for triage:

repadmin /showrepl * /csv > C:\Temp\showrepl.csv

The commands I reach for constantly, and exactly what each tells you:

Command What it reports When to run it
repadmin /replsummary One-line health per DC: largest delta, fails/total, error % First, every incident
repadmin /showrepl <DC> /verbose Every inbound partner, per partition, last success/failure + error To localise which link/partition is broken
repadmin /showrepl * /csv The above for all DCs, as CSV Forest-wide triage, sorting/filtering failures
repadmin /queue <DC> Pending inbound replication work items A growing queue means it’s stuck, not just slow
repadmin /showutdvec <DC> <NC-DN> The UTDV for a partition — who this DC trusts and to what USN Diagnosing dampening / “why won’t it re-send”
repadmin /showobjmeta <DC> "<object-DN>" Per-attribute version/originating-DC/USN for one object One object disagrees across DCs (a user, a GPO)
repadmin /bind <DC> Confirms an RPC bind to the AD replication interface Rule connectivity in or out (1722 vs directory error)
repadmin /showconn <DC> The connection objects (who this DC replicates from) Missing/orphaned connections; KCC problems
repadmin /showreps <DC> Legacy view of neighbours (older syntax, still useful) Quick partner list without full verbosity
repadmin /kcc <DC> Forces the KCC to recompute the topology now After fixing sites/subnets, to rebuild connections
repadmin /replicate <dest> <src> <NC> Force one specific inbound replication now Reproduce a single failing link on demand
repadmin /syncall <DC> /AdeP Sync all partitions, push+pull, cross site links Force convergence after a fix; verify

/queue — is it stuck or just busy?

repadmin /queue <DC> lists work items the replication engine has queued but not yet processed. A queue that drains over seconds is a healthy, busy DC. A queue that only grows, with the same items pinned at the top, is a stuck DC — often blocked on a single failing source or an ESE problem.

repadmin /queue DC01
Queue contains 0 items.

An empty queue with failing links means the failures are being reported (the engine tried and got an error), not stuck in a backlog. A large, non-draining queue means the engine is jammed and you should look at CPU, disk, and the Directory Service event log on that DC.

/showobjmeta — when exactly one object disagrees

The most surgical command in the set. When a single user, group, or GPO differs between DCs (a password that “didn’t take,” a group membership that reverted), /showobjmeta shows the per-attribute version, the originating DC, the originating USN, and the timestamp for the winning value of each attribute:

repadmin /showobjmeta DC01 "CN=jsmith,OU=Users,DC=corp,DC=example,DC=com"
Loc.USN   Originating DSA     Org.USN  Org.Time/Date        Ver Attribute
=======   ===============     =======  =============        === =========
 50120    CORP\DC02            50118   2026-06-07 02:10:44    7  unicodePwd
 41003    CORP\DC01            41003   2026-05-30 09:12:01    3  memberOf

Run it on two DCs and compare. If DC-A shows version 7 of unicodePwd originated on DC-B, and DC-C shows version 6 originated elsewhere, DC-C is behind — and now you know which link into DC-C to chase. This is how you resolve “the reset worked for some users but not others” without guessing.

Confirming with dcdiag

repadmin reports the replication engine’s mechanics; dcdiag runs correctness tests against a DC’s broader responsibilities as a directory server, DNS resolver, and Kerberos endpoint. In practice you run repadmin to localise and dcdiag to characterise — especially to rule DNS in or out, which is the single highest-value test.

Run the replication-focused tests first:

dcdiag /test:Replications /test:Intersite /v

Then the DNS suite, because the overwhelming majority of “replication” problems are name-resolution problems. A DC cannot replicate from a partner it cannot resolve, and inter-site topology building fails if the <guid>._msdcs.<forest> CNAME records are missing:

dcdiag /test:DNS /v /e

/e runs the tests against every DC in the enterprise; /s:<DC> targets a single DC (useful when /e itself hangs on an unreachable DC). For a fast, broad smoke test of one DC, the connectivity/advertising/role tests cover most ground:

dcdiag /test:Connectivity /test:Advertising /test:KnowsOfRoleHolders /test:FSMOCheck /v

KnowsOfRoleHolders and FSMOCheck verify this DC can locate and bind to every FSMO role holder — critical before you decide whether a role needs transferring or seizing. The full test catalogue you should know, and what each proves:

dcdiag test What it verifies When it’s the right test Failure points to
Connectivity DNS-resolvable + LDAP/RPC reachable Always (it’s implicit before others) DNS or network (8524/1722)
Replications Inbound replication succeeded recently, no errors Every replication incident The specific link error (8606, 8451…)
Intersite Inter-site topology and bridgehead health Sites not converging ISTG/site-link/bridgehead problems
KccEvent KCC ran without logging errors “No inbound partners” / topology gaps KCC can’t build the topology
DNS (/DnsAll) A/CNAME/SRV records, forwarders, delegation Suspected DNS root cause (usually) Missing SRV/CNAME, broken delegation
KnowsOfRoleHolders This DC can locate all five FSMO holders Before any FSMO decision A role holder is unreachable/dead
FSMOCheck This DC can bind to the FSMO holders Before transfer/seize The holder is down or unreachable
RidManager RID Master reachable, pool allocatable “Can’t create accounts”, RID warnings RID Master down / replication to it broken
Advertising The DC advertises itself as a DC (Netlogon) DC “invisible” to clients Netlogon/SYSVOL not ready, not advertising
NetLogons Correct Netlogon/SYSVOL share permissions Logon/GPO problems on one DC SYSVOL not shared/permissioned
MachineAccount The DC’s own computer account is correct Secure-channel / trust problems Broken machine account / secure channel
Services Required AD services are running DC misbehaving broadly A stopped service (NTDS, DNS, Netlogon, KDC)
SysVolCheck SYSVOL is ready and advertised GPO/script divergence DFSR/FRS SYSVOL not healthy
VerifyReferences FRS/DFSR/Netlogon reference attributes intact Post-cleanup validation Orphaned metadata after a bad demotion

A reading habit that saves time: dcdiag prints passed / failed per test, but the reason is in the verbose (/v) body above the summary line. Never act on the one-word summary alone — read the error text, which usually contains the same Win32 code repadmin gave you, plus context (which SRV record was missing, which partner it couldn’t bind to).

Decoding the common errors

The same handful of codes account for most cases. Memorise the meaning and the layer, not just the number — because the layer tells you which tool fixes it. The cardinal rule: 8524 and 1722 are network problems wearing an AD error code; do not reach for directory surgery until you have ruled out DNS and RPC.

Code Text (abbreviated) Layer Likely cause How to confirm First fix
8524 The DSA operation could not proceed because of a DNS lookup failure DNS Can’t resolve the source DC’s CNAME/A record dcdiag /test:DNS; nslookup <guid>._msdcs.<forest> Fix DNS; register records (ipconfig /registerdns, restart Netlogon)
1722 The RPC server is unavailable Network/RPC Firewall blocking 135 or dynamic RPC ports; dead partner repadmin /bind <src>; portqry -n <src> -e 135 Open RPC endpoint mapper + dynamic range; revive/verify partner
1256 The remote system is not available Network Partner unreachable/offline; routing ping/Test-NetConnection; is the DC up? Restore connectivity or remove the dead DC (metadata cleanup)
8606 Insufficient attributes were given to create an object Directory Source offered a reference to an object the dest deleted (lingering) repadmin /removelingeringobjects ... /advisory_mode Authoritative lingering-object removal, then re-verify
8451 The replication operation encountered a database error Database (ESE) NTDS.dit / Jet error on the destination Directory Service event log for the ESE error If transient, retry; if persistent, restore from backup
8456 / 8457 Source/destination is currently rejecting replication requests Engine DC quarantined after USN rollback, or Dsa Not Writable set Event 2095; reg query ...NTDS\Parameters /v "Dsa Not Writable" Do NOT clear the flag; force-demote + rebuild (USN rollback)
8453 Replication access was denied Security Missing replication rights / broken secure channel dcdiag /test:MachineAccount; check Get/Replicate ACEs Reset secure channel; restore replication permissions
8452 The naming context is in the process of being removed / not replicated Engine Partition being removed, or not yet instantiated repadmin /showrepl partition state Wait for instantiation; verify the NC should exist here
1908 Could not find the domain controller for this domain DNS/Locator DC locator can’t find a DC (SRV records) nltest /dsgetdc:<domain>; dcdiag /test:DNS Fix _ldap/_kerberos SRV records under _msdcs
1396 The target account name is incorrect Kerberos/SPN SPN mismatch / duplicate SPN / stale DNS→wrong host setspn -X (duplicates); check DNS points at the right DC Fix DNS or remove the duplicate SPN
5 Access is denied (during an op) Security Rights/UAC/secure channel on the operation Run elevated; nltest /sc_verify:<domain> Elevate; repair secure channel
1753 There are no more endpoints available from the endpoint mapper RPC RPC dynamic port range exhausted/blocked portqry/netstat; firewall rules Fix the RPC port range / firewall; check for port exhaustion

Three reading traps that waste the most hours:

Trap Why it misleads How to avoid it
Treating 8524/1722 as AD problems The error says “DSA”/“replication,” so people edit AD Always run dcdiag /test:DNS and repadmin /bind first — rule out the network layer before touching the directory
Chasing 8606 by “just deleting” the object Deleting live objects if you point at a stale reference DC Advisory mode first; verify the reference DC is authoritative and current before any real removal
Clearing Dsa Not Writable to “fix” 8456 It re-injects the rolled-back database and corrupts the forest That flag is AD protecting you; the fix is force-demote + rebuild, never clearing the flag

The five FSMO roles: what they do and how they fail

Most operations in AD are multimaster, but five are single-master because concurrent multimaster changes would corrupt them. These are the FSMO roles. Two are forest-wide (one holder per forest); three are domain-wide (one holder per domain). Losing a role is not usually an immediate outage — AD tolerates a missing FSMO holder for a while — but each has a specific set of operations that stop working while it’s gone.

Role Scope What it does What breaks if it’s down Urgency
Schema Master Forest Only DC that can write schema changes Can’t extend the schema (e.g. install Exchange, raise functional level) Low — schema changes are rare
Domain Naming Master Forest Authorises adding/removing domains and app partitions Can’t add/remove a domain or an application partition Low — infrequent operation
RID Master Domain Hands out pools of RIDs to every DC DCs eventually can’t create new security principals (users/groups/computers) once their pool runs low Medium — bites when a DC’s pool empties
PDC Emulator Domain Time source, password-change hub, account-lockout authority, GPO editing target, legacy PDC Time skew, worse password/lockout behaviour, GPO edit conflicts High — most user-visible role
Infrastructure Master Domain Updates cross-domain object references (phantom cleanup) Stale cross-domain group memberships/names Low (and moot if all DCs are GCs)

Two facts that resolve most FSMO confusion:

Confirm who holds the roles two ways (they should agree):

netdom query fsmo
Get-ADForest | Select-Object SchemaMaster, DomainNamingMaster
Get-ADDomain  | Select-Object PDCEmulator, RIDMaster, InfrastructureMaster

And verify from the directory’s perspective that every DC agrees on the holders — a disagreement is itself a symptom (partial replication of the Configuration NC where the role is stamped):

dcdiag /test:KnowsOfRoleHolders /v

RID Master mechanics, because RID exhaustion is a real outage

The RID Master allocates RID pools — blocks of ~500 relative IDs — to each DC on request. A DC uses its pool to mint the SID of each new principal (domain SID + RID). When a DC has used ~50% of its pool, it asks the RID Master for the next block. If the RID Master is down and a DC exhausts its current pool, that DC can no longer create users, groups, or computers until the RID Master returns or the role is seized. Check pool status:

dcdiag /test:RidManager /v
* Available RID Pool for the Domain is 21500 to 1073741823
* DC01.corp.example.com is the RID Master
* DC02 has SID Pool 15500 to 16499
* rIDPreviousAllocationPool is 15000 to 15499
* rIDNextRID: 15087

The domain-wide RID space is huge (2^30 ≈ 1.07 billion), so global exhaustion is rare, but local pool exhaustion on one DC while the RID Master is unreachable is a concrete “can’t onboard anyone” outage. This is why RID Master reachability is a first-class check in any FSMO incident.

Transferring vs. seizing FSMO roles

The decision between transfer and seize is the single most consequential FSMO judgement, and it has exactly one deciding question: is the current holder alive and reachable, and will it ever come back?

Situation Old holder state Action Reversible? The trap
Planned move / decommission Alive, reachable Transfer Yes None — the clean path
Holder briefly offline (reboot, patch) Temporarily down Wait n/a Seizing prematurely then the DC returns = split-brain
Holder permanently dead (hardware, USN rollback) Dead, will not return Seize No Ever powering the old holder back on with the role
Holder isolated by network only Alive but unreachable Fix network, then transfer Yes Seizing when the DC is actually fine, just partitioned

Transfer with the AD module (the modern way — you can move all five at once):

Move-ADDirectoryServerOperationMasterRole -Identity "DC02" `
  -OperationMasterRole PDCEmulator,RIDMaster,InfrastructureMaster,SchemaMaster,DomainNamingMaster

Seize is the same cmdlet with -Force, used only against a holder you have retired for good:

# Seize from an unrecoverable holder — commit to never bringing it back
Move-ADDirectoryServerOperationMasterRole -Identity "DC02" `
  -OperationMasterRole RIDMaster,PDCEmulator -Force

The classic ntdsutil seize path is fully supported and worth knowing when the AD module isn’t available (Server Core without RSAT, an emergency shell):

ntdsutil
  roles
    connections
      connect to server DC02
      quit
    seize RID master
    seize PDC
    seize infrastructure master
    seize schema master
    seize naming master
    quit
  quit

A note on the mapping between friendly names and ntdsutil verbs, because they differ and it matters under pressure:

Role AD module -OperationMasterRole value ntdsutil verb Post-seize must-do
Schema Master SchemaMaster seize schema master Ensure old holder never returns with the role
Domain Naming Master DomainNamingMaster seize naming master Same
RID Master RIDMaster seize RID master Critical: old holder must be destroyed (duplicate RIDs)
PDC Emulator PDCEmulator seize PDC Re-point time hierarchy; verify with w32tm /query /status
Infrastructure Master InfrastructureMaster seize infrastructure master Re-check the GC-vs-Infra rule on the new holder

After any transfer or seize, confirm with netdom query fsmo and dcdiag /test:KnowsOfRoleHolders, and — if you seized the PDC Emulator — reconfigure the time hierarchy (the forest-root PDCe should sync from an external NTP source; see the time-sync article) and validate with w32tm /query /status.

Detecting and removing lingering objects safely

A lingering object is one that was deleted (tombstoned, then garbage-collected) on most DCs but survives on a DC that was offline longer than the tombstone lifetime. When that isolated DC comes back and replicates, its partners reject the reference to the “revived” object with 8606 — because from their perspective, the source is offering a reference to an object that no longer exists. Lingering objects are dangerous beyond the error noise: a re-animated user or group is a security problem (a disabled account back in existence, a deleted admin group re-populated), not just a replication annoyance.

The cardinal safety rule: detect first, delete never on the first pass. Run removelingeringobjects in advisory mode against the suspect DC, using a known-good reference DC as the source of truth. Advisory mode deletes nothing; it logs every object it would remove to the Directory Service event log so you can review them.

# Advisory only — logs candidates (event 1946), deletes NOTHING
repadmin /removelingeringobjects DC02 <reference-DC-GUID> "DC=corp,DC=example,DC=com" /advisory_mode

The three arguments, precisely, because getting them backward is how people delete live data:

Argument Meaning Common mistake
First DC name The DC to clean (the one with stale/lingering objects) Swapping it with the reference DC → cleans the wrong box
Reference DC GUID The authoritative, current source of truth (its DSA object GUID) Using a stale reference DC → deletes live objects everywhere
NC distinguished name The partition to check Forgetting to repeat for Configuration/Schema/DNS partitions

Get the reference DC’s DSA GUID (the first argument to point at the good copy):

repadmin /showrepl DC01 | Select-String "DSA object GUID"
# or
(Get-ADDomainController -Identity DC01).InvocationId  # note: use the DSA GUID from showrepl for repadmin

Advisory mode writes event 1946 (and 1942 summaries) listing every lingering object it would remove. Review that list object by object. Confirm the reference DC genuinely holds the authoritative, current copy of that partition — pointing at a DC that is itself behind will delete objects that are actually live. Once you trust the list, remove for real by dropping /advisory_mode:

repadmin /removelingeringobjects DC02 <reference-DC-GUID> "DC=corp,DC=example,DC=com"

Repeat for every partition that showed 8606 — do not forget the Configuration and Schema NCs and the DomainDnsZones/ForestDnsZones application partitions. After cleanup, re-run repadmin /showrepl DC02 /verbose and confirm the 8606s are gone. The event IDs you’ll see during this process:

Event ID Log Meaning
1938 Directory Service Lingering-object removal starting on an NC
1939 Directory Service Lingering-object removal completed
1946 Directory Service (Advisory) a specific lingering object that would be removed
1942 Directory Service (Advisory) count summary of candidates found
1988 Directory Service Strict replication blocked a lingering object (the guardrail firing)
2042 Directory Service Replication has been stopped because a DC has not replicated in the tombstone lifetime

Strict replication consistency — the permanent guardrail

There is a defense-in-depth setting that should be enabled fleet-wide so a single isolated DC can never inject lingering objects in the first place: strict replication consistency. With it on, a DC that receives a reference to an object it lacks halts that replication and demands attention (logging event 1988) rather than silently accepting the reference. It converts a silent forest-poisoning into a loud, contained, single-link failure.

# Enable strict replication consistency on every DC
repadmin /regkey * +strict
# Verify it took (per DC): the "Strict Replication Consistency" registry value = 1
reg query "HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Parameters" /v "Strict Replication Consistency"

Strict is the default on forests built from clean 2003 SP1+ media, but upgraded forests may have it off. Confirm and enforce it — it is the cheapest insurance in this entire article. The behaviour difference:

Mode On receiving a reference to an unknown object Consequence Recommended?
Strict (+strict, value 1) Halt that inbound replication, log 1988, wait for admin One link stops; forest stays clean; you get a loud signal Yes — everywhere
Loose (-strict, value 0) Accept the reference and reanimate the object Lingering objects spread silently across the forest No — legacy default only

Recognising and recovering from USN rollback

This is the failure that turns a bad afternoon into a forest rebuild if you mishandle it, and it deserves its own discipline. USN rollback happens when a DC’s database moves backward in USN space without its invocation ID changing — so partners, tracking it by invocation ID, believe they already have those USNs and dampen the “new” changes. The rolled-back DC keeps accepting local writes that never propagate; the divergence is invisible until something downstream breaks.

The causes are almost always improper “recovery” of a virtualised DC:

Trigger Why it rolls USNs back The safe alternative
VM snapshot/checkpoint revert on a non-GenID-aware host Restores an older NTDS.dit with an older USN, invocation ID unchanged Use a GenID-aware host (2012+) OR restore via system-state backup
P2V of a running DC Captures a moving database; the copy is stale on boot Never P2V a live DC; build a fresh VM and Install-ADDSDomainController
Cloning/imaging a running DC Same as P2V; two DCs with the same DB state/invocation ID Use supported cloning (DCCloneConfig.xml) which resets identity
Restoring a copied VMDK/VHD as a “backup” Not an AD-aware restore; invocation ID doesn’t reset Only restore from Windows Server Backup system state
SAN rollback / storage-array snapshot revert Storage-level rewind bypasses AD’s safety net Coordinate storage recovery with AD; treat as USN rollback

The signature is unmistakable once you’ve seen it:

Check whether a DC has quarantined itself:

# A non-zero value here means the DC detected USN rollback and quarantined itself
reg query "HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Parameters" /v "Dsa Not Writable"

There is exactly one correct recovery, and it is not clearing that flag. That flag is AD protecting the forest from you; clearing it re-injects the rolled-back state permanently.

  1. Isolate and force-demote the affected DC — dcpromo /forceremoval (or the modern Uninstall-ADDSDomainController -ForceRemoval on 2019+), removing it from the domain. Do this first so it can never originate more divergent writes.
  2. Metadata cleanup for it from a healthy DC (next section), removing its NTDS Settings, server object, computer account, and DNS records.
  3. Garbage-collect / converge, verify no traces of it remain in the topology.
  4. Rebuild: promote a clean OS as a new DC (Install-ADDSDomainController against a fresh install), or restore the role properly from a supported, AD-aware backup (Windows Server Backup system state, or a hypervisor exposing VM-GenerationID — 2012+ DCs on GenID-aware hosts survive a snapshot revert because the changed GenID triggers an invocation-ID reset and a re-sync).

The root-cause prevention is policy, not a command: never revert a DC from a VM snapshot on a host that does not expose VM-GenerationID, never image/clone a running DC by hand, and never P2V a live DC. Use system-state backups or Install-ADDSDomainController against a fresh OS. The decision table for a DC showing 2095:

Situation Do this Do NOT do this
Single DC, no other writable copy Restore system state from a pre-rollback backup; if none, this DC is the forest — treat as forest recovery Clear Dsa Not Writable; run it forward diverged
Multiple DCs, this one rolled back Force-demote, metadata cleanup, rebuild clean Clear the flag; try to “merge” the divergence
Host is GenID-aware, snapshot reverted Let AD’s GenID reset re-sync it (it may self-heal) Panic-demote before checking if GenID fired
You cleared the flag already (mistake) Force-demote and rebuild immediately; assess damage Assume it’s fine because replication “resumed”

Metadata cleanup after a DC is gone

After a DC is gone for good — USN-rollback demotion, dead hardware, a botched promotion, a forced removal — its objects linger in the Configuration partition: the NTDS Settings object, the server object, the computer account, and DNS records (A/CNAME and the _ldap/_kerberos SRV records). Left behind, they cause other DCs to attempt replication with a ghost (producing 1722/1256 forever) and confuse the DC locator. Metadata cleanup removes them authoritatively.

Modern ntdsutil (and the AD module) does most of the cleanup automatically when you Remove-ADDomainController or remove the server object, but the canonical manual sequence — the one that works even when the DC is unreachable — is:

ntdsutil
  metadata cleanup
    connections
      connect to server HEALTHY-DC
      quit
    select operation target
      list domains
      select domain 0
      list sites
      select site 0
      list servers in site
      select server <number-of-dead-DC>
      quit
    remove selected server
    quit
  quit

The modern equivalent, when the server object still shows in AD Sites and Services, is simply to delete the DC’s server node there (which triggers the same cleanup) or:

# If the DC's metadata still exists, this removes the failed DC's objects
Remove-ADDomainController -Identity "DC03" -ForceRemoval -Force
# When the DC is already gone, remove the leftover NTDS/server object via Sites and Services,
# or ntdsutil metadata cleanup as above.

Then clean up what ntdsutil does not always remove. This checklist is the difference between a truly-gone DC and a haunted topology:

Leftover Where it lives How to remove it Symptom if left
NTDS Settings object AD Sites and Services → Site → Server → NTDS Settings Deleted by metadata cleanup Partners keep trying to replicate (1722/1256)
Server object AD Sites and Services → Site → Server Delete the server node Empty server shell in the topology
Computer account AD Users and Computers → Domain Controllers OU Delete the computer object Stale DC account; auth confusion
A / AAAA record Forward DNS zone Delete in DNS Manager Clients/DCs resolve to a dead host
CNAME (<guid>._msdcs) _msdcs.<forest> zone Delete in DNS Manager Replication targets a dead alias (8524 elsewhere)
_ldap / _kerberos SRV _msdcs, _sites, _tcp, _udp Delete stale SRV records DC locator hands clients a dead DC
FRS/DFSR member object Configuration NC Removed by cleanup / delete manually SYSVOL replication references a ghost member
FSMO role ownership On the dead DC (if it held any) Seize the roles first, then clean up Roles stuck on a nonexistent DC

The ordering matters: if the dead DC held any FSMO roles, seize those roles first (previous section), then run metadata cleanup — cleaning up a DC that still “owns” a role leaves the role orphaned.

SYSVOL replication: DFSR, FRS, and the migration trap

A subtlety that catches people: SYSVOL (the share holding group policy objects and logon scripts) replicates through a separate engine from the directory itself. On any forest at 2008 functional level or higher that completed migration, SYSVOL uses DFS Replication (DFSR); older forests used the legacy File Replication Service (FRS). A directory that replicates perfectly can still have divergent GPOs if SYSVOL replication is broken — GPO edits made on one DC never reach the others, so users in different sites get different policy.

Check which engine SYSVOL uses and its migration state:

dfsrmig /getglobalstate
Current DFSR global state: 'Eliminated'

Eliminated (state 3) means migration to DFSR is complete and FRS is gone — the correct end state. States Prepared (1) or Redirected (2) mean a migration was started but never finished, which is its own class of fragility. Check DFSR health and backlog:

# Backlog of files waiting to replicate between two DCs' SYSVOL
Get-DfsrBacklog -GroupName "Domain System Volume" `
  -SourceComputerName DC01 -DestinationComputerName DC02 -FolderName "SYSVOL Share"

# DFSR state and any errors
Get-DfsrState -ComputerName DC02
Get-WinEvent -LogName "DFS Replication" -MaxEvents 50 -ComputerName DC02

The failure modes and how to tell them apart:

SYSVOL symptom Engine/cause Confirm with Fix
GPOs differ across DCs DFSR backlog or stopped Get-DfsrBacklog; DFSR event log Clear the blocking file; resume DFSR; check disk/quota
DFSR event 2213 (dirty shutdown) DFSR paused after unclean stop DFSR event log 2213 Resume via the documented ResumeReplication WMI method
SYSVOL not shared on a DC DFSR/FRS not initialised dcdiag /test:SysVolCheck, net share Non-authoritative sync (D2) of SYSVOL on that DC
Migration stuck at Prepared/Redirected Incomplete FRS→DFSR migration dfsrmig /getglobalstate Complete the migration to Eliminated
Journal wrap (legacy FRS) FRS lost its change journal (NTFS USN journal overflow) FRS event log (13568) Non-authoritative restore (BurFlags D2) of FRS

Journal wrap deserves a note because it echoes across both engines’ history: it happens when the volume’s NTFS change journal overflows (too many changes during an outage, or a journal too small) and the replication engine loses its place. Legacy FRS recovers via a non-authoritative restore (BurFlags D2), pulling a fresh copy from a good partner; DFSR handles the equivalent more gracefully but a dirty shutdown (event 2213) requires an explicit resume. In both cases the fix is “re-seed from a known-good copy,” never “delete SYSVOL and hope.”

Architecture at a glance

Picture the replication system as three concentric layers, because that ordering is the diagnostic method — you work from the outside in, and most failures live in the outer two layers, not the directory itself.

The outermost layer is the network fabric: DNS and RPC. Every replication attempt begins with the destination DC resolving the source’s host record and its <invocation-guid>._msdcs.<forest-root> CNAME, then binding to the source over RPC — the endpoint mapper on 135/TCP hands back a dynamic high port, and the actual replication rides that. When a link fails with 8524, resolution failed; when it fails with 1722/1256, the RPC bind failed. This layer is where the majority of “replication is broken” tickets actually resolve, which is why dcdiag /test:DNS and repadmin /bind come before anything directory-related.

The middle layer is the replication engine and topology: the KCC computing intra-site connection objects, the ISTG building inter-site connections across the site links you defined, and the bridgeheads carrying that inter-site traffic on a poll schedule. Each DC holds a high-watermark per partner and an up-to-dateness vector per partition, and the whole mesh converges through change notification (intra-site push) and polling (inter-site pull), dampened so nothing loops. Failures here look like missing inbound partners, stuck queues (repadmin /queue), or sites not converging (dcdiag /test:Intersite) — the plumbing is up but the topology or the engine is wrong.

The innermost layer is the directory data and the ESE database: the actual objects, their per-attribute versions and originating stamps, the tombstones awaiting garbage collection, and the invocation ID that identifies this database instance. This is where the dangerous failures live — 8606 (a lingering object being offered), 8451 (an ESE/Jet error), and USN rollback / event 2095 (the database rewound without its invocation ID resetting, so partners silently dampen its changes). Reaching this layer means the network and topology are healthy and the problem is genuinely in the data — and it is exactly here that a wrong move (deleting live objects, clearing Dsa Not Writable) turns a link failure into a forest failure.

Overlaid on all three layers are the five FSMO roles, single-master operations pinned to specific DCs: Schema and Domain Naming (forest-wide), RID/PDC/Infrastructure (per domain). They are not a layer so much as a set of responsibilities that must remain reachable — and the moment a role holder is unreachable or dead, the question flips from “why won’t this link replicate” to “who holds this role, is it coming back, and do I transfer or seize.” The whole method is: confirm the network layer, then the topology layer, then the data layer, and in parallel confirm the FSMO holders are alive — localise the failure to exactly one layer before you act, because the tool that fixes a DNS problem must never be pointed at the directory, and vice versa.

Real-world scenario

Meridian Logistics runs a single-forest, four-site Active Directory estate: roughly 30,000 objects, six DCs (two in the primary datacentre, two in a DR site, one each in two regional offices over MPLS), all Windows Server 2022, forest at the 2016 functional level. The identity team is three engineers; the forest also feeds Entra Connect for Microsoft 365. Their monthly cloud spend is not the point — the point is that six DCs and 30,000 objects is small enough that one bad decision touches everything.

The incident began on a Friday afternoon during an unrelated storage migration. A vSphere administrator “recovered” DC04 (a DR-site DC) by reverting it to a three-week-old VM snapshot, to roll back a driver change. The host template predated VM-GenerationID exposure for that VM, so the GenID safety net never fired. DC04 booted, logged event 2095, set Dsa Not Writable, and its partners began rejecting its outbound changes with 8456. Worse: deletions that had garbage-collected across the forest during those three weeks were still live on DC04’s rolled-back database, so as partners pulled the Configuration and Domain partitions, 8606 storms erupted across two sites — a re-animated service account and a deleted distribution group among the lingering objects.

The constraint made it a real incident: DC04 held the RID Master and PDC Emulator for the domain. It was a Friday, the business would not approve a weekend rebuild window, and — critically — one engineer’s first instinct was to “clear that registry flag to get replication going.” That would have re-injected three weeks of divergence permanently. The senior on the bridge stopped it: Dsa Not Writable is the platform protecting the forest, and the only correct outcome for a genuine USN rollback is demote-and-rebuild.

The fix followed the playbook exactly. First, triage: repadmin /replsummary showed DC04 failing every link and two other DCs failing inbound from it; repadmin /showrepl DC02 /verbose confirmed 8606 on the Domain NC; the reg query confirmed Dsa Not Writable = 1 on DC04 and event 2095 in its log. Diagnosis was unambiguous: USN rollback on DC04, lingering objects on its partners. They isolated DC04 from replication immediately (disabled its NIC), then seized the two FSMO roles onto the healthy DC02 rather than wait:

# Seize from the unrecoverable rolled-back holder, run on DC02
Move-ADDirectoryServerOperationMasterRole -Identity "DC02" `
  -OperationMasterRole RIDMaster,PDCEmulator -Force

They confirmed the seizure with netdom query fsmo, re-pointed the domain time hierarchy to DC02’s new PDCe (validated with w32tm /query /status), then force-demoted DC04 with Uninstall-ADDSDomainController -ForceRemoval and ran metadata cleanup from DC02, scrubbing DC04’s NTDS Settings, server object, computer account, and stale DNS/SRV records. On each surviving partner they ran repadmin /removelingeringobjects DC0x <DC02-GUID> "<NC>" /advisory_mode for every partition, using DC02’s DSA GUID as the authoritative reference, reviewed the event 1946 candidate lists object by object (confirming the re-animated service account and group were genuinely deleted), and only then removed them for real. They enabled repadmin /regkey * +strict fleet-wide so the same class of incident would halt a future DC (event 1988) instead of poisoning the topology. A clean Server 2022 VM was promoted into DC04’s slot the following week.

The proof: repadmin /replsummary returned zero failures, dcdiag /e /test:DNS /test:FSMOCheck passed enterprise-wide, and a throwaway test object created on DC01 converged to the DR site inside two minutes. User-facing impact: none — PDC and RID were live on DC02 within the hour, so authentication, time, and account creation never stopped. Entra Connect, which had been about to sync the re-animated objects into Microsoft 365, was paused during the cleanup and resumed clean. The lesson written on the runbook afterward: “A rolled-back DC is not a replication problem to un-stick — it is a database to destroy. The flag is your friend.”

The incident as a timeline, because the order of moves is the lesson:

Time Symptom / event Action taken Effect What it should have been
14:32 vSphere admin reverts DC04 snapshot (unrelated to AD, done for a driver) Seeds the rollback Never revert a DC without GenID
14:40 Event 2095 on DC04; 8456 on partners (alert fires) Recognise USN rollback immediately
14:45 8606 storm across two sites Engineer proposes clearing the flag Would corrupt the forest Stop — the flag is protection
14:50 Triage replsummary + showrepl + reg query Confirms rollback + lingering objects Correct first moves
15:00 Isolate Disable DC04 NIC Stops further divergence Correct
15:10 FSMO at risk on a dead DC Seize RID + PDC to DC02 Roles safe; users unaffected Correct — seize before rebuild
15:30 DC04 removed Force-demote + metadata cleanup DC04 gone cleanly Correct
16:00–17:30 Lingering objects Advisory mode → review 1946 → remove Forest converges clean Never remove without advisory review
17:45 Guardrail repadmin /regkey * +strict Future rollbacks halt loudly Should have been on already
+1 week Rebuild Fresh Server 2022 DC into DC04 slot Full six-DC estate restored Correct end state

Advantages and disadvantages

Multimaster replication is what makes Active Directory resilient and available — and the same properties are what make its failures silent and self-propagating. Weigh the model honestly:

Advantages (why multimaster helps you) Disadvantages (why it bites)
Any writable DC accepts changes — no central write bottleneck, survives losing any single DC No single source of truth: when DCs diverge, the platform tells you that they differ, not which is right
Incremental replication (HWMV/UTDV) is efficient — only deltas cross the wire, dampened against loops The same dampening lets a USN-rolled-back DC silently stop originating — the failure is invisible until downstream breakage
Deterministic conflict resolution (version → timestamp → GUID) converges every DC identically without coordination A “resolved” conflict can silently pick the wrong value if clocks are skewed (why time sync is load-bearing)
Tombstones let deletions replicate reliably across an unreliable WAN A DC offline past the tombstone lifetime returns with lingering objects — a security problem, not just noise
The KCC/ISTG auto-build and self-heal the topology every 15 min — you don’t hand-wire connections A wrong subnet-to-site map makes the KCC build bad or missing links, and it “self-heals” back to the wrong topology
FSMO isolates the few operations that can’t be multimaster, keeping them consistent A dead FSMO holder blocks a specific class of operation, and seizing wrong (RID/Schema) is catastrophic and irreversible
Rich, specific diagnostics (repadmin/dcdiag) expose the engine’s exact state The tooling is old-school and terse; the error codes (8524 vs 8606) demand you know which layer each belongs to

The model is right — there is no better design for a globally-distributed, highly-available directory. But its failure modes reward discipline over speed: the wrong fast action (clear the flag, delete the object, seize the role) is worse than doing nothing while you confirm which DC is authoritative. Every disadvantage above is manageable — strict replication consistency, GenID-aware hosts, correct site design, and the transfer-vs-seize discipline neutralise each one — but only if you know it exists, which is the entire point of this article.

Hands-on lab

This lab establishes a health baseline and safely exercises the diagnostic tools on a live (lab) forest, then simulates a recoverable link failure and fixes it — no destructive operations against a production forest. Run it in a two-DC lab (DC01, DC02 in corp.example.com); everything is read-only except the deliberately-created test object and the firewall rule you add and remove. Run from an elevated PowerShell prompt on DC01.

Step 1 — Baseline the forest health. Capture the “good” state so you can recognise “bad” later.

repadmin /replsummary
repadmin /showrepl * /csv > C:\Temp\baseline-showrepl.csv
dcdiag /test:Replications /test:FSMOCheck /test:KnowsOfRoleHolders /v > C:\Temp\baseline-dcdiag.txt

Expected: /replsummary shows both DCs with 0 in the fails column and a small largest-delta (minutes). dcdiag reports passed on Replications, FSMOCheck, and KnowsOfRoleHolders.

Step 2 — Confirm FSMO placement and the GC/Infra rule.

netdom query fsmo
Get-ADDomainController -Filter * | Select-Object Name, Site, IsGlobalCatalog, OperationMasterRoles

Expected: five roles listed against their holders; note whether the Infrastructure Master is a GC (in a single-domain lab this is fine).

Step 3 — Inspect a partition’s up-to-dateness vector. See who DC01 trusts, and to what USN.

repadmin /showutdvec DC01 "DC=corp,DC=example,DC=com"

Expected: one line per DC (by invocation ID) with the highest originating USN DC01 has from it, and a timestamp. This is the UTDV made concrete.

Step 4 — Force a full convergence and confirm it’s clean.

repadmin /syncall DC01 /AdeP
repadmin /replsummary

Expected: /syncall reports SyncAll terminated with no errors; /replsummary still shows zero fails.

Step 5 — Simulate a link failure (block RPC) and observe 1722. Add a temporary firewall rule on DC02 blocking the RPC endpoint mapper from DC01, then force replication and watch it fail.

# On DC02 (elevated): block inbound TCP 135 from DC01 only — REMEMBER to remove this in Step 7
New-NetFirewallRule -DisplayName "LAB-block-rpc-from-DC01" -Direction Inbound `
  -Protocol TCP -LocalPort 135 -RemoteAddress <DC01-IP> -Action Block

# On DC01: try to replicate from DC02 and watch it fail
repadmin /replicate DC01 DC02 "DC=corp,DC=example,DC=com"

Expected: the /replicate fails with 1722 (The RPC server is unavailable). Confirm the layer with a bind test:

repadmin /bind DC02

Expected: the bind fails too — proving this is a network/RPC problem, not a directory one. This is the exact signal that tells you to check firewalls, not AD.

Step 6 — Confirm it’s not DNS (rule out the other network cause).

dcdiag /s:DC01 /test:DNS /v
nslookup DC02.corp.example.com

Expected: DNS resolves fine and dcdiag /test:DNS passes — so with 1722 present but DNS healthy, you’ve correctly isolated it to RPC/firewall.

Step 7 — Remove the block and prove recovery.

# On DC02: remove the lab firewall rule
Remove-NetFirewallRule -DisplayName "LAB-block-rpc-from-DC01"

# On DC01: replicate again — now it succeeds
repadmin /replicate DC01 DC02 "DC=corp,DC=example,DC=com"
repadmin /showrepl DC01 /verbose | Select-String "was successful","failed"

Expected: the /replicate succeeds; /showrepl shows the DC02 neighbour with was successful.

Step 8 — End-to-end origination proof. Create a tagged test object on DC01, force a sync, confirm it lands on DC02, then remove it.

# On DC01: originate a throwaway contact object
$name = "repltest-$(Get-Date -f yyyyMMddHHmmss)"
New-ADObject -Type contact -Name $name -Path "CN=Users,DC=corp,DC=example,DC=com" `
  -OtherAttributes @{ description = "repltest" }
repadmin /syncall DC01 /AdeP

# On DC02 (or targeting it): confirm it exists, then clean up
Get-ADObject -Server DC02 -Filter "description -eq 'repltest'" -SearchBase "CN=Users,DC=corp,DC=example,DC=com" |
  Tee-Object -Variable o | Format-Table Name, ObjectGUID
$o | Remove-ADObject -Confirm:$false

Expected: the object created on DC01 is returned by the query against DC02 (convergence proven), then is removed.

Validation checklist — the lab steps mapped to what each proves:

Step What you did What it proves Real-incident analogue
1–2 Baseline /replsummary, FSMO, GC rule You have a “good” reference to compare against The first thing to capture before touching anything
3 /showutdvec The UTDV is real and inspectable Diagnosing “why won’t it re-send”
4 /syncall /AdeP You can force and confirm convergence Post-fix verification
5 Block RPC → 1722; /bind fails 1722 is a network error, provable by bind The 90-second “is it network or directory?” call
6 dcdiag /test:DNS passes Isolating RPC vs DNS within the network layer Ruling out the #1 false lead
7 Remove block → success The fix was network, and it converged Confirming the real cause was outside AD
8 Originate + converge a test object End-to-end replication genuinely works The final proof any recovery is truly done

Teardown. The lab leaves nothing persistent if you completed Steps 7 and 8 (firewall rule removed, test object deleted). Verify:

Get-NetFirewallRule -DisplayName "LAB-block-rpc-from-DC01" -ErrorAction SilentlyContinue  # should return nothing
Get-ADObject -Filter "description -eq 'repltest'" -SearchBase "CN=Users,DC=corp,DC=example,DC=com"  # should return nothing
Remove-Item C:\Temp\baseline-*.csv, C:\Temp\baseline-*.txt -ErrorAction SilentlyContinue

Common mistakes & troubleshooting

This is the playbook — the part you bookmark and open at 02:14. First the scannable symptom→cause→confirm→fix table, then the expanded reasoning for the entries that bite hardest. Read the prose once; keep the table open during the incident.

# Symptom Root cause Confirm (exact command / path) Fix
1 Link fails with 8524 on one or many partners DNS: can’t resolve the source DC’s CNAME/A record dcdiag /test:DNS /v; nslookup <guid>._msdcs.<forest> Register records (ipconfig /registerdns; restart Netlogon); fix the _msdcs zone/delegation
2 Link fails with 1722 (RPC server unavailable) Firewall blocking 135 or the dynamic RPC port range; or a dead partner repadmin /bind <src>; portqry -n <src> -e 135; is the DC up? Open RPC endpoint mapper + dynamic range; if the DC is dead, metadata-cleanup it
3 Link fails with 1256 (remote system not available) Partner offline / unreachable (routing, powered off) Test-NetConnection <src> -Port 135; ping Restore connectivity, or remove the dead DC via metadata cleanup
4 8606 storm; “insufficient attributes to create an object” Lingering objects on a DC offline past the tombstone lifetime repadmin /removelingeringobjects <staleDC> <goodGUID> "<NC>" /advisory_mode; review event 1946 Advisory review, then remove for real per NC; enable +strict fleet-wide
5 A DC won’t originate; partners reject it with 8456/8457 USN rollback — DB rewound, invocation ID unchanged Event 2095; reg query ...NTDS\Parameters /v "Dsa Not Writable" (=1) Never clear the flag. Force-demote, metadata-cleanup, rebuild clean
6 dcdiag shows a DC with no inbound partners for an NC KCC/ISTG not building connection objects (site/subnet or KCC error) repadmin /showconn <DC>; dcdiag /test:KccEvent /v Fix subnet-to-site mapping; repadmin /kcc <DC> to rebuild; check ISTG
7 Can’t create users/groups/computers on a DC Local RID pool exhausted while the RID Master is unreachable dcdiag /test:RidManager /v; netdom query fsmo Restore/seize the RID Master; the DC then refills its pool
8 Schema change / functional-level raise fails Schema Master unreachable or down dcdiag /test:KnowsOfRoleHolders /v; netdom query fsmo Bring the holder online, or transfer/seize the Schema Master
9 Widespread time skew; Kerberos “clock skew” (KRB_AP_ERR_SKEW) PDC Emulator down/misconfigured as the time root w32tm /query /status; netdom query fsmo Restore/seize PDCe; re-point the time hierarchy to external NTP
10 Replication fails with 8451 (database error) ESE/Jet error or corruption in NTDS.dit on the destination Directory Service event log for the ESE error code If transient, retry; if persistent, restore that DC from system-state backup
11 Link fails with 8453 (replication access denied) Missing replication rights or a broken secure channel dcdiag /test:MachineAccount /v; check ACEs on the NC head Reset the secure channel (netdom resetpwd); restore replication permissions
12 Objects converge only every few hours (inter-site) Normal poll interval, or a broken bridgehead/site link repadmin /showrepl inter-site neighbours; dcdiag /test:Intersite If truly stuck, fix the bridgehead/site link; else it’s the 180-min interval
13 GPOs/logon scripts differ across DCs SYSVOL (DFSR) backlog or a stalled DFSR after dirty shutdown Get-DfsrBacklog; DFSR event log (2213); dfsrmig /getglobalstate Resume DFSR; clear the blocking file; complete any stuck migration
14 /replsummary fails against a DC that’s actually up Stale metadata for a removed DC still in the topology repadmin /showrepl referencing a ghost DSA GUID Metadata cleanup for the removed DC; delete stale Sites-and-Services/DNS entries
15 Deleted/disabled account is authenticating in one site Re-animated lingering object (a live copy on a stale DC) repadmin /showobjmeta on the object across DCs Lingering-object removal (advisory first); investigate as a security event
16 repadmin reports 1908 (“can’t find the DC for this domain”) DC locator can’t resolve a DC — missing SRV records nltest /dsgetdc:<domain>; dcdiag /test:DNS Re-register SRV records (restart Netlogon); fix the _msdcs SRV set

The expanded form, for the entries where the reasoning is the whole game:

1. Link fails with 8524 (DNS lookup failure). This is the single most common “replication” ticket and it is not a directory problem. Replication resolves the source DC by its <invocation-guid>._msdcs.<forest-root> CNAME and its A record; if either is missing or stale, the destination can’t even find the source. Confirm: dcdiag /test:DNS /v names the missing record; nslookup <guid>._msdcs.<forest-root> fails. Fix: on the source DC, ipconfig /registerdns and Restart-Service Netlogon to re-register the records; ensure the _msdcs.<forest> zone exists, is AD-integrated, and its delegation from the parent zone is intact. Do not touch the directory — this is DNS, top to bottom.

2. Link fails with 1722 (RPC server unavailable). Replication rides RPC: the destination hits the endpoint mapper on 135/TCP, gets back a dynamic high port, and replicates over it. A firewall that blocks 135 or the dynamic range (or a genuinely dead partner) produces 1722. Confirm: repadmin /bind <src> fails (proving it’s connectivity, not data); portqry -n <src> -e 135 shows the endpoint mapper unreachable or the dynamic port filtered. Fix: open the RPC endpoint mapper and the dynamic port range between DCs (or pin AD replication to a static port via the TCP/IP Port registry value and open just that); if the partner is actually dead, this becomes a metadata-cleanup job, not a firewall one.

4. 8606 storm — lingering objects. A DC offline past the tombstone lifetime returns holding objects everyone else deleted; offering references to them triggers 8606 on partners (with strict replication) or silently reanimates them (without it). Confirm: run repadmin /removelingeringobjects <staleDC> <good-DC-GUID> "<NC>" /advisory_mode and read event 1946 for the candidate list. Fix: verify the reference DC is authoritative and current, remove per partition (Config, Schema, Domain, DNS app partitions), then enable repadmin /regkey * +strict everywhere. The failure mode to avoid is deleting live objects by pointing at a stale reference DC — advisory mode exists precisely to make you look before you delete.

5. USN rollback — event 2095, Dsa Not Writable. The DC’s database moved backward without its invocation ID changing, so partners dampen its “new” changes and it silently diverges; it quarantines itself and rejects outbound replication with 8456. Confirm: event 2095 in the Directory Service log; reg query "HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Parameters" /v "Dsa Not Writable" returns a non-zero value. Fix — the only correct one: force-demote the DC (Uninstall-ADDSDomainController -ForceRemoval), metadata-cleanup its remnants from a healthy DC, and rebuild a clean OS as a new DC (or restore from a supported system-state backup). Clearing the flag is the fatal mistake — it re-injects the rolled-back state and corrupts the forest permanently.

6. No inbound partners — KCC/ISTG. If a DC has no connection object for a partition, no replication can happen — the plumbing exists but there’s no pipe. This usually traces to a wrong subnet-to-site mapping (the DC or its partners are in the wrong site, so the KCC builds nonsensical or no links) or a KCC that’s erroring. Confirm: repadmin /showconn <DC> shows missing inbound connections; dcdiag /test:KccEvent /v surfaces KCC errors; check the subnet-to-site associations in Sites and Services. Fix: correct the subnet objects and their site assignment, then repadmin /kcc <DC> to force an immediate topology recompute; confirm the ISTG is healthy for inter-site links.

9. Time skew and Kerberos. Kerberos rejects tickets when the clock skew between client and DC exceeds the tolerance (default 5 minutes). If the PDC Emulator (the domain’s time root) is down or misconfigured to sync from a bad source, the whole domain’s time can drift and authentication breaks with KRB_AP_ERR_SKEW. Confirm: w32tm /query /status on DCs and the PDCe; netdom query fsmo to find the PDCe. Fix: restore or seize the PDCe, and configure the (forest-root) PDCe to sync from a reliable external NTP source with all other DCs following the domain hierarchy — see the hybrid time-sync article. This is why time and FSMO are entangled: the PDCe is the time authority.

13. SYSVOL divergence (DFSR). The directory can replicate perfectly while SYSVOL — a separate DFSR engine — is stalled, so GPO edits made on one DC never reach others and users in different sites get different policy. Confirm: Get-DfsrBacklog shows a growing backlog; the DFSR event log shows event 2213 (paused after a dirty shutdown) or another error; dfsrmig /getglobalstate should read Eliminated. Fix: resume DFSR (the documented ResumeReplication method for a 2213), clear whatever file is blocking, and complete any migration stuck at Prepared/Redirected. Never “just delete SYSVOL” — re-seed non-authoritatively from a good DC.

Best practices

Security notes

Cost & sizing

Active Directory itself has no license SKU beyond the Windows Server licenses on your DCs, so “cost” here is about sizing DCs and site topology for reliable replication, plus the operational cost of getting it wrong.

A rough sizing picture for a mid-size single-forest estate:

Item Guidance Rough cost signal What it buys you
DCs per critical site ≥ 2 2× Windows Server license + small VM each Survives one DC failing; patching without outage
DC vCPU / RAM 2–4 vCPU / 8–16 GB Small VM tier NTDS.dit cached; fast LDAP + replication
DC disk SSD for NTDS.dit + logs Modest premium over HDD ESE performance; fast recovery/reboot
GenID-aware virtualisation host 2012+ hypervisor Usually already have it Snapshot reverts self-heal, not USN-rollback
Monitoring (replsummary/dcdiag) Scheduled + alerting Time to set up Catch divergence in minutes, not weeks
System-state backups Retention < tombstone lifetime Backup storage Restorable DCs without a rollback risk

Interview & exam questions

1. Explain how AD decides which change wins when two DCs modify the same attribute concurrently. Conflict resolution is deterministic and needs no coordination: the higher per-attribute version number wins; if versions tie, the later timestamp wins; if those tie, the higher originating invocation-ID GUID wins. Because the rule is identical on every DC, all replicas converge to the same value. This is also why time sync matters — a skewed clock can make the “wrong” write win the timestamp tiebreak.

2. What is the difference between the high-watermark vector and the up-to-dateness vector? The high-watermark (HWMV) is per-partner-per-partition: the highest USN a DC has seen from a specific source, so that source only sends changes past it (incremental pull). The up-to-dateness vector (UTDV) is per-partition: for every DC that ever originated a change (by invocation ID), the highest originating USN this DC has from any path, so the source can skip changes the destination already has indirectly (propagation dampening). HWMV = “where you and I left off”; UTDV = “what I already have regardless of source.”

3. What is USN rollback, why is it so dangerous, and how do you recover? USN rollback is when a DC’s database moves backward in USN space without its invocation ID changing — usually from a VM snapshot revert, P2V, or clone of a running DC. Partners track it by invocation ID, so they believe they already have those USNs and dampen its new changes; it silently stops originating and diverges. AD detects it (event 2095) and sets Dsa Not Writable. The only correct recovery is to force-demote the DC, metadata-clean it, and rebuild — never clear the flag, which re-injects the rolled-back state permanently.

4. When do you transfer a FSMO role versus seize it? Transfer when the current holder is alive and reachable — it’s a clean, reversible handoff (Move-ADDirectoryServerOperationMasterRole). Seize (-Force) only when the holder is permanently dead and you’ve committed it will never come back online with that role, because a seizure is unilateral and an old holder returning with the same role causes split-brain — catastrophic for the RID Master (duplicate RID pools → duplicate SIDs) and Schema Master. If unsure whether the holder is truly dead, it isn’t; fix connectivity and transfer.

5. A DC is failing replication with error 8524. What layer is the problem in and what do you check? 8524 is a DNS problem, not a directory one — the destination can’t resolve the source DC’s _msdcs CNAME or A record. Confirm with dcdiag /test:DNS /v and nslookup <guid>._msdcs.<forest>. Fix DNS: re-register records on the source (ipconfig /registerdns, restart Netlogon), verify the _msdcs zone is AD-integrated and its delegation is intact. Do not touch the directory.

6. What is a lingering object, how does it arise, and how do you remove it safely? A lingering object was deleted (tombstoned and garbage-collected) on most DCs but survives on a DC that was offline longer than the tombstone lifetime (default 180 days); when it returns, offering references to the object produces 8606 on partners. Remove it with repadmin /removelingeringobjects <staleDC> <good-DC-GUID> "<NC>" /advisory_mode first (logs candidates as event 1946, deletes nothing), verify the reference DC is authoritative and current, then rerun without /advisory_mode. Enable strict replication consistency (+strict) to prevent recurrence.

7. Why can the Infrastructure Master conflict with a global catalog, and when doesn’t it matter? The Infrastructure Master updates references to objects in other domains. If its DC is also a global catalog, the GC already knows every object so nothing appears stale, and cross-domain reference updates silently stop. So in a multi-domain forest the Infrastructure Master should not be a GC — unless every DC in the domain is a GC (then there are no non-GC DCs to have stale references, so it’s moot). Single-domain forests are unaffected.

8. Error 1722 vs 8524 — how do you tell them apart and why does it matter? 1722 (RPC server unavailable) is a network/RPC problem — a blocked 135/TCP or dynamic RPC port, or a dead partner — confirmed by repadmin /bind <src> failing and portqry -n <src> -e 135. 8524 is a DNS resolution failure, confirmed by dcdiag /test:DNS. It matters because the fixes are entirely different (firewall/RPC vs DNS records), and both are network-layer — neither is a reason to edit the directory. Ruling out the network layer first is the core discipline.

9. What does the PDC Emulator do, and what breaks if it’s down? The PDC Emulator is the domain’s authoritative time source (the forest-root PDCe roots the whole hierarchy), the DC other DCs forward password changes to for immediate effect, the account-lockout authority, the default target for GPO edits (avoiding edit conflicts), and the legacy NT PDC. If it’s down you get time skew (Kerberos KRB_AP_ERR_SKEW), degraded password/lockout behaviour, and GPO edit conflicts — the most user-visible FSMO loss, so it’s the one to protect and restore first.

10. How do you prove that replication has fully recovered after a fix? Force convergence with repadmin /syncall /AdeP (all partitions, push and pull, across site links), then confirm repadmin /replsummary shows zero failures and no multi-day deltas, and dcdiag /e /test:Replications /test:DNS /test:FSMOCheck passes enterprise-wide. The definitive test is an end-to-end origination proof: create a tagged throwaway object on one DC, sync, and confirm it appears on a distant DC — then remove it. Recovery isn’t done until an originating write demonstrably propagates.

11. What is strict replication consistency and why should it be on? With strict replication consistency (repadmin /regkey * +strict), a DC that receives a reference to an object it doesn’t have halts that inbound replication and logs event 1988 instead of silently reanimating the object. It turns a silent, forest-wide lingering-object spread into a loud, contained, single-link failure — the difference between an alert and a forest cleanup. It’s the default on clean 2003 SP1+ forests but may be off on upgraded ones, so verify and enforce it everywhere.

12. SYSVOL and the directory replicate through different engines — why does that matter? The directory (NTDS.dit) replicates via the AD replication engine; SYSVOL (GPOs and scripts) replicates via DFSR (or legacy FRS). A directory that replicates perfectly can still have divergent GPOs if DFSR is stalled — GPO edits on one DC never reach others, and users in different sites get different policy. Diagnose SYSVOL separately (Get-DfsrBacklog, DFSR event log, dfsrmig /getglobalstate); a healthy repadmin /replsummary does not prove SYSVOL is healthy.

These map primarily to AZ-800 / AZ-801 (Windows Server Hybrid Administrator)manage Active Directory Domain Services, troubleshoot on-premises and hybrid AD DS — and to the legacy AD DS knowledge assessed across Windows Server certifications. The hybrid-identity angle (Entra Connect, DCSync/replication rights) touches SC-300 (Identity and Access Administrator). A compact cert-mapping for revision:

Question theme Primary cert Objective area
Replication model (USN/HWMV/UTDV, conflict) AZ-800 Manage/ troubleshoot AD DS
FSMO roles, transfer vs seize AZ-800/AZ-801 Manage AD DS; disaster recovery
USN rollback, metadata cleanup, recovery AZ-801 Implement AD DS disaster recovery
repadmin/dcdiag diagnostics, error codes AZ-800 Troubleshoot AD DS
Lingering objects, strict replication, DCSync rights AZ-801 / SC-300 Secure & recover AD; hybrid identity
Sites, site links, KCC/ISTG topology AZ-800 Manage AD DS sites and replication

Quick check

  1. A DC fails replication from one partner with error 1722, but dcdiag /test:DNS passes and nslookup resolves the partner fine. What layer is the problem in, and what single command confirms it?
  2. True or false: if a domain controller shows event 2095 and Dsa Not Writable, the fastest safe fix is to clear the registry flag so replication resumes.
  3. Your on-call peer wants to seize the RID Master because its holder rebooted for a monthly patch and is offline for ten minutes. What do you tell them, and why?
  4. A previously-disabled user account is suddenly able to authenticate against one branch-office DC only. Name the most likely cause and the first (non-destructive) command you run.
  5. You’ve fixed a broken link and repadmin /replsummary now shows zero failures. Name the one additional test that proves originating writes actually propagate end to end.

Answers

  1. It’s a network/RPC problem (not DNS, since DNS passed) — a blocked RPC endpoint mapper/dynamic port or a firewall between the DCs. The confirming command is repadmin /bind <partner>: if the bind fails while DNS resolves, the failure is RPC connectivity, so you check firewalls/ports, not the directory.
  2. False. Dsa Not Writable is AD protecting the forest from a USN rollback; clearing it re-injects the rolled-back database and corrupts the forest permanently. The only correct fix is to force-demote the DC, run metadata cleanup, and rebuild it clean (or restore from a supported system-state backup).
  3. Do not seize — wait. A ten-minute patch reboot is a temporary outage, not a dead holder. Seizing the RID Master and then having the original holder come back online produces two DCs allocating overlapping RID pools (duplicate SIDs) — a catastrophic split-brain. Seize only when the holder is permanently gone and will never return with the role.
  4. Most likely a lingering object — a re-animated (deleted) account surviving on a DC that was offline past the tombstone lifetime. First run repadmin /showobjmeta <that-DC> "<account-DN>" (and compare to a healthy DC) to confirm the object exists there; then use removelingeringobjects in advisory mode before removing it — and treat it as a security event, since a re-animated account is exactly what an attacker or mistake hides behind.
  5. An end-to-end origination proof: create a tagged throwaway object on one DC, run repadmin /syncall /AdeP, and confirm it appears on a distant DC (then remove it). Zero failures in /replsummary means links report success; a converged test object proves an originating write genuinely reaches the far side.

Glossary

Next steps

You can now triage any replication or FSMO failure top-down — network, then topology, then data — and act with the tool that respects the invariants. Build outward:

windows-serveractive-directoryreplicationfsmorepadmindcdiagtroubleshootingkerberos
Need this built for real?

Vinod is a Senior Cloud Architect (22+ yrs) — available for Azure / AWS / GCP architecture, landing zones, and migrations.

Work with me

Comments

Keep Reading