Informix Error -312
-312 Cannot update system catalog table-name.
The database server cannot record a change in the system-catalog table. Check the accompanying ISAM error code for more detailed information. Insufficient disk space is a common cause of this error.
Oninit® Troubleshooting Guidance
Reasons / Common Causes
-312 is the write-side sibling of -311: the server successfully opened the system catalog table
but couldn't record a change to it (a new row from CREATE TABLE, a metadata update from ALTER TABLE, and similar DDL operations all write to system catalog tables like systables,
syscolumns). The official text calls out insufficient disk space as the most common actual
cause.
- Insufficient disk space in the dbspace/chunk holding the system catalog — the single most common cause, per the official guidance.
- The dbspace/chunk backing the system catalog is full or has hit an extent limit, even if other disk space on the system looks fine.
- A lock conflict on the catalog table from concurrent DDL activity, surfacing as an update failure rather than a clean lock-wait error.
- Underlying filesystem or permissions problems preventing the write, similar in kind to
-311but on the write path specifically.
Solutions / Resolution
- Check disk space on the dbspace/chunk holding the system catalog first, per the official guidance — this resolves the majority of occurrences.
- Check the accompanying ISAM error code for the specific underlying condition if disk space looks fine.
- Check for extent limits on the catalog table or its dbspace (
onstat -d, catalog table extent counts) if space appears available but the write still fails. - If concurrent DDL is suspected, check for other sessions holding locks on system catalog tables at the same time.
Examples
Checking dbspace free space
onstat -d
-- look at the dbspace backing the database's system catalog;
-- confirm free chunk space is actually available, not just
-- overall disk space on the host
Checking for catalog-table lock contention
SELECT l.tabname, l.owner, s.username FROM sysmaster:syslocks l, sysmaster:syssessions s
WHERE l.owner = s.sid AND l.tabname IN ('systables', 'syscolumns', 'sysindexes');
Diagnostic Checks
- Check dbspace/chunk free space for the system catalog — the most common actual cause.
- Read the accompanying ISAM error code for the specific failure reason.
- Check for concurrent DDL activity or lock contention on system catalog tables.
Related Errors / Related Topics
- -311 — "Cannot open system catalog table-name." The read-side sibling of this error — both point to infrastructure-level problems with the system catalog rather than an application-level query mistake.
Check dbspace free space for the system catalog first — it's the most common cause by a wide margin, per the official guidance.