Informix Error -346
-346 Could not update a row in the table.
While the database server was processing an UPDATE, it received an unexpected error. Check the accompanying ISAM error code for more detailed information on the cause. Possible causes include hardware errors and locking conflicts.
Oninit® Troubleshooting Guidance
Reasons / Common Causes
-346 is a generic UPDATE-failure error at the storage-engine level — an unexpected condition
during processing rather than an ordinary SQL-level mistake. The official guidance points to the
accompanying ISAM error code as the real diagnostic path, with hardware errors and locking
conflicts called out as the two most common underlying causes.
- A locking conflict — another session holds a conflicting lock on the row or table being updated.
- Hardware-level errors — disk I/O failures affecting the dbspace/chunk holding the table.
- Disk space exhaustion on the dbspace the update would need to write into (for example, if the update changes a variable-length column's size).
- A more specific underlying condition identified only by the accompanying ISAM error code.
Solutions / Resolution
- Check the accompanying ISAM error code first, per the official guidance, for the specific underlying reason.
- Check for lock contention on the table/row being updated:
SELECT l.tabname, l.owner, s.username FROM sysmaster:syslocks l, sysmaster:syssessions s WHERE l.owner = s.sid AND l.tabname = 'orders'; - Check for hardware/disk-level errors in the online log and OS logs around the same timestamp.
- Check available disk space on the relevant dbspace, particularly if the update grows a variable-length column.
Examples
Checking for lock contention before retrying
SELECT l.tabname, l.owner, s.username FROM sysmaster:syslocks l, sysmaster:syssessions s
WHERE l.owner = s.sid AND l.tabname = 'orders';
-- if another session holds a conflicting lock, wait for it to
-- release, or investigate why it's holding it
Diagnostic Checks
- Read the accompanying ISAM error code for the specific underlying reason.
- Check
sysmaster:syslocksfor lock contention on the table. - Check the online log / OS logs for hardware or I/O errors at the same timestamp.
- Check dbspace free space if the update involves growing a variable-length value.
Related Errors / Related Topics
- -314 — "Table table-name currently in use." A related concurrent-access condition, though at the table-locking-for-DDL level rather than a row-level update conflict.
The ISAM error code is the primary diagnostic signal here — check it first before investigating locks, disk space, or hardware separately.