Overview

In rare cases, the WebAFIS service may fail during startup with the following Oracle error visible in the application logs:


ORA-00001: unique constraint (%s.%s) violated


Although ORA-00001 normally indicates a duplicate insert/update in the database, this specific variant is misleading in the WebAFIS context.

The error:

  • occurs during service startup

  • is triggered while establishing the Oracle connection pool

  • does not contain a real constraint name (%s.%s is displayed)

This behavior is related to Oracle client/driver handling during login.


Example log output:

FAST_CONN creating Oracle pool ! Unable to load application: OCIError: ORA-00001: unique constraint (%s.%s) violated rake aborted! OCIError: ORA-00001: unique constraint (%s.%s) violated connection_pool.c:144:in oci8lib_260.so


Root Cause

Although the error looks like a database uniqueness violation, in this startup scenario it is most commonly caused by:

Oracle Password Expiration Grace Period Warning

If the Oracle database account used by WebAFIS is approaching password expiration, Oracle generates a login warning:

  • ORA-28002: password will expire soon

Certain OCI/OCCI client versions may incorrectly handle this warning when connection pooling is enabled, resulting in the misleading startup failure:

ORA-00001: unique constraint (%s.%s) violated 

This is therefore not an application-level unique constraint issue, but an Oracle account/password policy condition.


How to Confirm

Check Oracle Account Expiry Status (SYSDBA)

SELECT username, account_status, expiry_date FROM dba_users WHERE username = 'USER'; 

If the account is in EXPIRED(GRACE) or near expiration, this issue may occur during WebAFIS startup.


Resolution

Immediate Fix

Reset or change the password for the Oracle service account used by WebAFIS:

ALTER USER your_user IDENTIFIED BY "new_password"; 

Update the DB configuration for other services accordingly and restart the services.


Permanent Fix (Recommended for Service Accounts)

To prevent future startup failures, disable password expiration for technical/service accounts by adjusting the assigned profile:

ALTER PROFILE <profile_name> LIMIT PASSWORD_LIFE_TIME UNLIMITED; This prevents Oracle expiration warnings from being raised during login.