Dispatch Access History Task - StackOverFlow error

I am using IIQ 8.5p1 version

Logs -

I can see this line repeated many times in log

Caused by: oracle.jdbc.OracleDatabaseException: ORA-01400: cannot insert NULL into (“IDENTITYIQAH”.“SPT_HIST_ACCOUNT_CAPTURE”.“IDENTITY_ID”)

I cannot find this id in identityiq database in spt_identity table

Thread-2306 sailpoint.request.InterceptedDeleteRequestExecutor:265 - objectJson is null or empty, no message will be dispatched for id: c6126eb69bbc

ERROR Thread-2306 sailpoint.request.InterceptedDeleteRequestExecutor:262 - Failed to process deleted object
sailpoint.tools.GeneralException: org.hibernate.exception.ConstraintViolationException: could not execute statement

ERROR Thread-2309 sailpoint.request.RequestHandler:214 - java.lang.StackOverflowError

  • I have ran aggregation Task
  • I have also tried deleting orphan Link records where IDENTITY_ID is NULL but accounts still exist.
  • After running this task, identities are still getting updated even task status is showing Failed.

Hello Ashutosh,

Went through your logs & dug into the docs on this. Here’s what I found, hope it helps narrow it down.

Read the stack top to bottom. This looks like one main blocker, with the StackOverflow as a secondary symptom. The objectJson is null or empty right before the ORA-01400 is the giveaway. During delete processing, the publisher is trying to write a capture row for a deleted Link, but OBJECT_JSON in spt_intercepted_delete is empty, so there’s no Identity reference to populate IDENTITY_ID. Per the 8.5 docs, InterceptedDelete rows retry indefinitely. That’s your loop.

Usually happens after upgrades or orphan cleanup where a Link gets deleted after its parent Identity is already gone.

Plz give a try to fix in order:

Step 1. Clean the bad rows (take backup first):

DELETE FROM spt_intercepted_delete 
WHERE OBJECT_JSON IS NULL OR DBMS_LOB.GETLENGTH(OBJECT_JSON) = 0;
COMMIT;

Step 2. Your earlier cleanup was the wrong direction. Links with IDENTITY_ID = NULL aren’t the issue (IIQ rarely allows that). What you want are dangling Links pointing to Identities that no longer exist:

SELECT l.ID FROM spt_link l
LEFT JOIN spt_identity i ON l.IDENTITY_ID = i.ID
WHERE l.IDENTITY_ID IS NOT NULL AND i.ID IS NULL;

Delete via iiq console (delete Link <id>), not DB.

Step 3. StackOverflow at JsonPatchImpl$DiffGenerator.emit is data-shape, not heap. Likely corrupt patch chain. Set maxAllowedPatches = 0, run once to force full captures, then revert.

Step 4. Re-run with maxObjectAttempts=10, maxFailuresAbsolute=2000 so failures go to NamedTimestamp instead of killing the task.

Failed status while identities update is expected. Partitions snapshot progress.

Plz give these a try & let me know if it sorts it out.

Hi Harish,

Thank you for getting back to me — I really appreciate your response. I had been stuck at the same point for quite some time, and your inputs helped me get much closer to the root cause.

I went through all the steps you suggested and validated them in our environment. For Step 1, before attempting any deletion, I ran select queries on SPT_INTERCEPTED_DELETE. I could confirm that there are no NULL or empty values for EXTRACTED_OBJECT_JSON or OBJECT_ID. The only column where I see an issue is OBJECT_NAME, which has 106 rows with NULL values. I can’t find those null values for **EXTRACTED_OBJECT_JSON or OBJECT_ID,**is it because I am looking in wrong table?

I also tried the remaining steps you suggested (Steps 2–4), but unfortunately they did not resolve the issue in our case.

Based on this, I wanted to check with you whether removing the intercepted delete rows where OBJECT_NAME is NULL would be the correct way forward, or if you would recommend any alternative approach for handling these entries.

Please let me know your thoughts.

Thanks again for your help.

@amishra4 You actually need to search for the id:c6126eb69bbc in table: spt_intercepted_delete. Possibly it’s a dead reference. Try checking this and delete the entry.

Also, you might want to increase the JVM size. Please check what is the current allocation and try increasing it to 2 times.

Note: Found a fix?Help the community by marking the comment as solution. Feel free to react(:heart:,:+1:, etc.)with an emoji to show your appreciation or message me directly if your problem requires a deeper dive.

HI Neelmadhav,
Thanks for your reply, I tried running dispatch access history task after deleting all the ID which were having error in extracted_object_json, although I cant see any more ID mentioned in logs but stack over flow error is still there.

My LOGs -

Caused by: oracle.jdbc.OracleDatabaseException: ORA-01400: cannot insert NULL into (“IDENTITYIQAH”.“SPT_HIST_ACCOUNT_CAPTURE”.“IDENTITY_ID”)

    at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:723)
    ... 45 more

2026-04-28T08:40:17,017 WARN Thread-2340 engine.jdbc.spi.SqlExceptionHelper:137 - SQL Error: 1400, SQLState: 23000
2026-04-28T08:40:17,017 ERROR Thread-2340 engine.jdbc.spi.SqlExceptionHelper:142 - ORA-01400: cannot insert NULL into (“IDENTITYIQAH”.“SPT_HIST_ACCOUNT_CAPTURE”.“IDENTITY_ID”)

2026-04-28T08:40:17,017 ERROR Thread-2340 sailpoint.request.InterceptedDeleteRequestExecutor:262 - Failed to process deleted object
sailpoint.tools.GeneralException: org.hibernate.exception.ConstraintViolationException: could not execute statement
at sailpoint.persistence.HibernatePersistenceManager.commitTransaction(HibernatePersistenceManager.java:586)
at sailpoint.persistence.ClassPersistenceManager.commitTransaction(ClassPersistenceManager.java:211)
at sailpoint.server.InternalContext.commitTransaction(InternalContext.java:608)
at sailpoint.dataextract.AccessHistoryPublisher.publish(AccessHistoryPublisher.java:45)
at sailpoint.dataextract.PublisherWrapper.publish(PublisherWrapper.java:41)
at sailpoint.request.InterceptedDeleteRequestExecutor.processDeletions(InterceptedDeleteRequestExecutor.java:252)
at sailpoint.request.InterceptedDeleteRequestExecutor.doInterceptedDelete(InterceptedDeleteRequestExecutor.java:166)
at sailpoint.request.InterceptedDeleteRequestExecutor.execute(InterceptedDeleteRequestExecutor.java:116)
at sailpoint.request.RequestHandler.run(RequestHandler.java:163)
Caused by: javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not execute statement
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188)
at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1395)
at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:482)
at org.hibernate.internal.SessionImpl.flushBeforeTransactionCompletion(SessionImpl.java:3274)
at org.hibernate.internal.SessionImpl.beforeTransactionCompletion(SessionImpl.java:2409)
at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.beforeTransactionCompletion(JdbcCoordinatorImpl.java:449)
at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.beforeCompletionCallback(JdbcResourceLocalTransactionCoordinatorImpl.java:183)
at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.access$300(JdbcResourceLocalTransactionCoordinatorImpl.java:40)
at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.commit(JdbcResourceLocalTransactionCoordinatorImpl.java:281)
at org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:101)
at sailpoint.persistence.HibernatePersistenceManager.commitTransaction(HibernatePersistenceManager.java:571)
… 8 more
Caused by: org.hibernate.exception.ConstraintViolationException: could not execute statement
at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:59)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:37)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:200)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3379)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3900)
at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:107)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:604)
at org.hibernate.engine.spi.ActionQueue.lambda$executeActions$1(ActionQueue.java:478)
at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:475)
at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:344)
at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:40)
at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:107)
at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1391)
… 17 more
Caused by: java.sql.SQLIntegrityConstraintViolationException: ORA-01400: cannot insert NULL into (“IDENTITYIQAH”.“SPT_HIST_ACCOUNT_CAPTURE”.“IDENTITY_ID”)

at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:715)
at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:615)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1372)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:975)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:237)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:524)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:298)
at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1510)
at oracle.jdbc.driver.OracleStatement.executeSQLStatement(OracleStatement.java:2020)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1633)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3973)
at oracle.jdbc.driver.OraclePreparedStatement.doExecuteLargeUpdate(OraclePreparedStatement.java:4339)
at oracle.jdbc.driver.OraclePreparedStatement.executeLargeUpdate(OraclePreparedStatement.java:4316)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:4291)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1007)
at org.apache.commons.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:136)
at org.apache.commons.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:136)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:197)
… 28 more
Caused by: oracle.jdbc.OracleDatabaseException: ORA-01400: cannot insert NULL into (“IDENTITYIQAH”.“SPT_HIST_ACCOUNT_CAPTURE”.“IDENTITY_ID”)

    at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:723)
    ... 45 more

2026-04-28T08:48:54,423 ERROR Thread-2342 sailpoint.request.RequestHandler:214 - java.lang.StackOverflowError
at org.glassfish.json.JsonPatchImpl$DiffGenerator.emit(JsonPatchImpl.java:302)
at org.glassfish.json.JsonPatchImpl$DiffGenerator.emit(JsonPatchImpl.java:302)
at org.glassfish.json.JsonPatchImpl$DiffGenerator.emit(JsonPatchImpl.java:302)

Stacktrace still says it is trying to enter null values. Could you please if it still has any null references in spt_link, spt_identity and spt_intercepted_delete?

@amishra4 - First correct the corrputed metadata -

  1. Identitfy the specific id - SELECT * FROM identityiq.spt_intercepted_delete WHERE id = ‘c6126eb69bbc’;
  2. Check links with no identity - SELECT id, native_identity, application FROM identityiq.spt_link WHERE identity_id IS NULL; and if you found delete them via IIQ Console.
  3. Fine tune the configuration of the task Dispatch Access History - set the maxObjectAttempts - 3
    maxFailuresAbsolute - 5000
    lossLimit - 1000
  4. JVM Stack size - Ensure -Xss is set to at least 1m (-Xss1024k)

-Kannan

Hi @amishra4 Make sure, aggregation task or any task if failed earlier, any swap file has created at temp folder of Webservers. Try to use configuration cache clearance. at iiq console , commands are there for clear highlevel cache