<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Aggregation on IAMDevBox</title><link>https://www.iamdevbox.com/tags/aggregation/</link><description>Recent content in Aggregation on IAMDevBox</description><image><title>IAMDevBox</title><url>https://www.iamdevbox.com/IAMDevBox.com.jpg</url><link>https://www.iamdevbox.com/IAMDevBox.com.jpg</link></image><generator>Hugo -- 0.146.0</generator><language>en-us</language><lastBuildDate>Thu, 03 Sep 2026 19:48:21 -0400</lastBuildDate><atom:link href="https://www.iamdevbox.com/tags/aggregation/index.xml" rel="self" type="application/rss+xml"/><item><title>SailPoint IdentityIQ Aggregation Troubleshooting: Complete Error Guide</title><link>https://www.iamdevbox.com/posts/sailpoint-identityiq-aggregation-troubleshooting-complete-error-guide/</link><pubDate>Thu, 03 Sep 2026 10:00:00 +0000</pubDate><guid>https://www.iamdevbox.com/posts/sailpoint-identityiq-aggregation-troubleshooting-complete-error-guide/</guid><description>Fix IdentityIQ aggregation failures: connector exceptions, correlation errors, terminated tasks, and hung runs — with exact iiq console commands and root causes.</description><content:encoded><![CDATA[<p>Account Aggregation is the task type every SailPoint IdentityIQ deployment runs the most and debugs the least confidently, because a failure can originate in three different layers — the source system, the connector, or IdentityIQ&rsquo;s own correlation logic — and the TaskResult error message rarely tells you which one. This guide walks through the failure modes in the order you should actually check them, with the exact <code>iiq console</code> commands to isolate the cause.</p>
<p>If you&rsquo;re new to IdentityIQ&rsquo;s rule and workflow model, start with our <a href="/posts/sailpoint-identityiq-beanshell-rules-workflows-tasks-developer-guide/">BeanShell Rules, Workflows, and Tasks guide</a> — Correlation Rules and provisioning rules both come up repeatedly below. For the database and scripting side of diagnosing a stuck task from outside the UI, see <a href="/posts/sailpoint-identityiq-java-mysql-shell-scripting-guide/">Java, MySQL, and Shell Scripting for IdentityIQ</a>.</p>
<blockquote>
<p><strong>Clone the companion repo</strong>: The diagnostic <code>iiq console</code> command sequences, the read-only <code>spt_</code> health-check queries, and the correlation-rule debug template covered below are all in <a href="https://github.com/IAMDevBox/sailpoint-iiq-devtools">IAMDevBox/sailpoint-iiq-devtools</a>.</p></blockquote>
<h2 id="how-account-aggregation-actually-works">How Account Aggregation Actually Works</h2>
<p>Before debugging a failure, it helps to know what the task is doing under the hood. Account Aggregation scans a configured Application, calls the connector to iterate every account (and optionally every group) on that source, and for each account either:</p>
<ol>
<li>Matches it to an existing <code>Link</code> and updates that Link&rsquo;s attributes if anything changed</li>
<li>Runs the Correlation Rule to try to match the account to an existing <code>Identity</code> and creates a new <code>Link</code></li>
<li>Creates a brand-new <code>Identity</code> cube, if &ldquo;Create new identity&rdquo; processing is enabled</li>
<li>Marks the account for one of eight TaskResult actions: Correlate Manual, Maintain, New Account, Reassign, Create New Identity, Ignore, or Remove Account</li>
</ol>
<p>Each of those actions gets logged per-account in the TaskResult, which is why the first place to look after any aggregation failure is the TaskResult detail screen, not the application server log. The task-level error (&ldquo;Aggregation failed&rdquo;) is a summary; the per-account errors underneath it are the actual diagnosis.</p>
<h2 id="failure-mode-1-connector-exceptions">Failure Mode 1: Connector Exceptions</h2>
<p>The most common failure is a <code>ConnectorException</code> thrown while IdentityIQ is trying to iterate accounts or groups from the source. This is a source-system problem, not an IdentityIQ problem, and the fix lives outside IdentityIQ almost every time:</p>
<table>
  <thead>
      <tr>
          <th>Connector Type</th>
          <th>Common Root Cause</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>LDAP / Active Directory</td>
          <td>Bind DN credentials expired or account locked out; search base DN typo; paging cookie exhausted on very large OUs</td>
      </tr>
      <tr>
          <td>JDBC / Database</td>
          <td>Connection pool exhausted (too many concurrent aggregations against the same source); driver JAR missing after an IdentityIQ upgrade; SQL query in the schema map referencing a column that was renamed</td>
      </tr>
      <tr>
          <td>Delimited File</td>
          <td>File not present at the configured path at scheduled run time (a nightly export job that hasn&rsquo;t finished yet); encoding mismatch producing malformed rows</td>
      </tr>
      <tr>
          <td>Web Services / REST</td>
          <td>API rate limiting mid-aggregation on large account populations; OAuth token expired mid-run on a long aggregation with no refresh logic in the connector config</td>
      </tr>
  </tbody>
</table>
<p>Isolate the connector as the cause before touching anything inside IdentityIQ. From the <code>iiq console</code>:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 392 25"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='232' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='240' y='4' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='248' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='264' y='4' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='272' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='280' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='288' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='296' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='304' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='312' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='320' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='328' y='4' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='336' y='4' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='352' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='360' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='368' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='376' y='4' fill='currentColor' style='font-size:1em'>t</text>
</g>

    </svg>
  
</div>
<p>This runs the connector&rsquo;s own connection-test method — the same one the &ldquo;Test Connection&rdquo; button in the Application configuration UI calls — without running a full aggregation. If <code>test</code> fails, you have your answer immediately and can stop looking at IdentityIQ configuration entirely. If <code>test</code> passes but the full aggregation still fails, move to <code>iterate</code>:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 416 25"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='232' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='240' y='4' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='248' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='264' y='4' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='272' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='280' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='288' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='296' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='304' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='312' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='320' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='328' y='4' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='336' y='4' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='352' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='360' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='368' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='376' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='384' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='392' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='400' y='4' fill='currentColor' style='font-size:1em'>e</text>
</g>

    </svg>
  
</div>
<p><code>iterate</code> walks the account list the same way aggregation does, which will surface a failure on a specific malformed record (a group membership DN that no longer resolves, an account with a null value in a required schema attribute) that a simple connection test won&rsquo;t catch.</p>
<h2 id="failure-mode-2-correlation-failures">Failure Mode 2: Correlation Failures</h2>
<p>If the connector is healthy and accounts are coming through, the next most common failure is correlation: the account exists, IdentityIQ read it successfully, but it can&rsquo;t be attached to an Identity.</p>
<p><strong>&ldquo;Unable to correlate account to identity&rdquo;</strong> happens when the Correlation Rule for the Application evaluates to no match. Two root causes account for nearly all of these:</p>
<ul>
<li><strong>Attribute format mismatch.</strong> The most frequent case is an <code>employeeId</code> or similar join key that&rsquo;s formatted differently between the authoritative HR source and the target application — leading zeros stripped, a prefix added, case sensitivity in a string comparison. Check the actual attribute values on both sides, not just the rule logic.</li>
<li><strong>Aggregation ordering.</strong> If this is a new application and the accounts belong to people who don&rsquo;t have Identity cubes yet, correlation will fail on every account because there&rsquo;s nothing to correlate against. Authoritative sources (typically HR/HRIS) must aggregate first to create the Identity cubes; downstream application aggregations correlate against those cubes afterward.</li>
</ul>
<p>If accounts are correlating to the <em>wrong</em> identity rather than failing outright, that&rsquo;s a Correlation Rule precision problem, not a failure — but it&rsquo;s worth checking the rule&rsquo;s match logic for anything doing a broad <code>LIKE</code> or a first-name/last-name match without a unique secondary key, since those produce false-positive correlations that are far more damaging than an aggregation that simply stops.</p>
<h2 id="failure-mode-3-terminated-and-orphaned-tasks">Failure Mode 3: Terminated and Orphaned Tasks</h2>
<p>A task that shows <strong>Terminated</strong> rather than an error usually means one of two things:</p>
<ol>
<li>Someone (or a scheduled job overlap) explicitly stopped it — check for a <code>terminate &lt;TaskResultName&gt;</code> call in the audit log or scheduler history.</li>
<li>The <strong>&ldquo;Terminate when maximum number of errors is exceeded&rdquo;</strong> threshold was hit. This is a deliberate circuit breaker: rather than aggregating 50,000 accounts and burying one root cause under 4,000 nearly-identical connector errors, IdentityIQ stops after the configured &ldquo;Maximum errors before termination&rdquo; count. Read the accumulated errors in the TaskResult before raising the threshold — in the overwhelming majority of cases, all of them trace back to the same upstream problem from Failure Mode 1.</li>
</ol>
<p><strong>Orphaned task results</strong> are a different, purely operational problem: an application server restart, forced shutdown, or crash during a running aggregation leaves the TaskResult stuck in a non-terminal state, even though nothing is actually still running. IdentityIQ won&rsquo;t let you cleanly restart a task while its previous TaskResult still looks &ldquo;in progress.&rdquo; Clear it from the <code>iiq console</code>:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 192 25"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>e</text>
</g>

    </svg>
  
</div>
<p>The <code>please</code> argument isn&rsquo;t decorative — this command force-completes every pending TaskResult it finds as Terminated, so it&rsquo;s built to resist being run accidentally. Only run it when you&rsquo;ve confirmed (via the app server process list, not just the UI) that nothing is actually executing.</p>
<p>Once the orphaned result is cleared, restart the task itself:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 200 25"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>&gt;</text>
</g>

    </svg>
  
</div>
<h2 id="failure-mode-4-hung-tasks">Failure Mode 4: Hung Tasks</h2>
<p>A task that neither completes nor errors — it just sits at &ldquo;running&rdquo; indefinitely — is the hardest of the four to diagnose because there&rsquo;s no error message to read. Work through it in this order:</p>
<ol>
<li><strong>Confirm it&rsquo;s actually hung, not just slow.</strong> Large LDAP OUs and JDBC sources with millions of rows can legitimately take hours. Check the account-processed counter in the TaskResult; if it&rsquo;s climbing, even slowly, it isn&rsquo;t hung.</li>
<li><strong>Rule out a connector-level block.</strong> Run <code>connectorDebug &lt;applicationName&gt; test</code> in a separate console session while the task is still running. If the test hangs too, the source system itself is unresponsive — a TCP-level connection that was accepted but is never answering (common with an LDAP server behind a load balancer with a stale health check), not an IdentityIQ problem.</li>
<li><strong>For partitioned aggregations</strong>, one partition thread can silently die while others continue, making the overall task look alive but permanently incomplete. Use:</li>
</ol>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 280 25"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='232' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='240' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='248' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='256' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='264' y='4' fill='currentColor' style='font-size:1em'>k</text>
</g>

    </svg>
  
</div>
<p>This dumps a thread stack trace for the running task into the server log, letting you see exactly which method each partition thread is blocked in — a JDBC <code>Statement.executeQuery</code> call with no timeout is the single most common culprit here.</p>
<ol start="4">
<li>If a partition or the whole task is confirmed dead with no way to recover it cleanly, <code>terminate &lt;TaskResultName&gt;</code> stops it, then follow the orphaned-task cleanup above before rerunning.</li>
</ol>
<h2 id="reading-the-taskresult-systematically">Reading the TaskResult Systematically</h2>
<p>When triaging an aggregation failure, pull the TaskResult in this order rather than scrolling the raw log top to bottom:</p>
<ol>
<li><strong>Summary counts</strong> — accounts scanned vs. accounts with errors vs. accounts correlated. A 2% error rate against one connector points to bad data on specific records; a 100% error rate from the first account onward points to a connection or credential problem.</li>
<li><strong>The first error, not the last.</strong> Cascading failures (a connection pool exhausted by account 40 will throw the same exception for every subsequent account) mean the last error in a long list is rarely the root cause — it&rsquo;s a symptom of the first one.</li>
<li><strong>Per-account action distribution</strong> — a spike in &ldquo;Create New Identity&rdquo; when you expected &ldquo;Maintain&rdquo; usually means a Correlation Rule regression, not an aggregation bug.</li>
</ol>
<h2 id="verified-console-commands-reference">Verified Console Commands Reference</h2>
<p>Every command below is confirmed against the official IdentityIQ Console documentation, not inferred from behavior:</p>
<table>
  <thead>
      <tr>
          <th>Command</th>
          <th>Purpose</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>run &lt;taskName&gt; [trace] [profile] [sync]</code></td>
          <td>Runs a task with no arguments; <code>trace</code> prints console output, <code>profile</code> adds timing stats, <code>sync</code> runs in the foreground</td>
      </tr>
      <tr>
          <td><code>runTaskWithArguments &lt;taskName&gt; [arg1=val1,arg2=val2,...]</code></td>
          <td>Runs a task that requires arguments; always executes synchronously</td>
      </tr>
      <tr>
          <td><code>restart &lt;TaskResultName&gt;</code></td>
          <td>Relaunches a previously failed task, in background mode where possible</td>
      </tr>
      <tr>
          <td><code>terminate &lt;TaskResultName&gt;</code></td>
          <td>Stops a running background task; the result shows Cancelled</td>
      </tr>
      <tr>
          <td><code>terminateOrphans please</code></td>
          <td>Force-completes all pending/stuck TaskResults as Terminated</td>
      </tr>
      <tr>
          <td><code>sendCommand &lt;TaskResultName&gt; &lt;command&gt;</code></td>
          <td>Sends an out-of-band command (<code>terminate</code>, <code>reanimate</code>, <code>stack</code>, or connector-specific) to a running or crashed partitioned task</td>
      </tr>
      <tr>
          <td><code>connectorDebug &lt;applicationName&gt; test</code></td>
          <td>Runs the connector&rsquo;s connection test in isolation, without a full aggregation</td>
      </tr>
      <tr>
          <td><code>connectorDebug &lt;applicationName&gt; iterate</code></td>
          <td>Walks the account/group iterator the same way aggregation does, surfacing malformed-record errors</td>
      </tr>
      <tr>
          <td><code>tasks</code></td>
          <td>Lists Name, State, Next Execution, and Cron String for every scheduled task</td>
      </tr>
  </tbody>
</table>
<h2 id="enabling-debug-logging-for-a-specific-aggregation">Enabling Debug Logging for a Specific Aggregation</h2>
<p>Rather than raising the global log level (which floods the log with unrelated noise), scope debug logging to the aggregation executor class in <code>log4j2.properties</code> under <code>WEB-INF/classes/</code>:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 408 41"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='120' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='136' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='144' y='20' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='160' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='176' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='184' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='200' y='20' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='216' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='224' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='232' y='20' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='240' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='240' y='20' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='248' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='248' y='20' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='256' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='264' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='272' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='280' y='4' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='288' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='296' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='304' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='312' y='4' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='320' y='4' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='328' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='336' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='344' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='352' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='360' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='368' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='376' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='384' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='392' y='4' fill='currentColor' style='font-size:1em'>r</text>
</g>

    </svg>
  
</div>
<p>IdentityIQ picks up <code>log4j2.properties</code> changes automatically within about a minute — no application server restart required. Remove or comment out the logger once you&rsquo;ve captured what you need; aggregation debug logging at scale on a large source is verbose enough to fill a log partition on a multi-hour run.</p>
<h2 id="preventing-repeat-failures">Preventing Repeat Failures</h2>
<p>Once you&rsquo;ve fixed the immediate cause, two configuration changes reduce how often you have to do this again:</p>
<ul>
<li><strong>Enable Delta Aggregation</strong> where the connector supports it. Scanning only changed accounts instead of the full population shrinks both the blast radius and the runtime of any future connector hiccup.</li>
<li><strong>Set &ldquo;Disable optimization of unchanged accounts&rdquo; deliberately, not by default.</strong> It forces a full re-read of every account on every run, which is useful for a one-time data integrity check after a bad aggregation, but leaving it on permanently multiplies connector load and increases the odds of hitting exactly the timeout and rate-limit failures described above.</li>
</ul>
<p>For the underlying rule and workflow mechanics referenced throughout this guide — Correlation Rules, custom TaskExecutors, and the <code>SailPointContext</code> API — see the <a href="/posts/sailpoint-identityiq-beanshell-rules-workflows-tasks-developer-guide/">BeanShell Rules, Workflows, and Tasks guide</a>. For automating the console commands above into a scheduled health check rather than running them manually after every failure, see <a href="/posts/sailpoint-identityiq-java-mysql-shell-scripting-guide/">Java, MySQL, and Shell Scripting for IdentityIQ</a>.</p>
]]></content:encoded></item></channel></rss>