Informix Error -399
-399 Cannot access log file.
This query refers to a table named syslog. A row in the systables catalog has syslog in the tabname column, but it is only a convenient place to store the pathname to the transaction-log file. Under IBM Informix SE, a table named syslog cannot exist in a database with logging. (In general, you should avoid table names that start with sys-, and syslog is not allowed.)
Oninit® Troubleshooting Guidance
Reasons / Common Causes
-399 is a specific naming collision on IBM Informix SE: syslog is a reserved name that
systables uses internally to store the transaction-log file's pathname for a logged database —
it isn't available as an ordinary user table name, and a query referencing a table called
syslog collides with that reserved catalog entry instead of finding a real table.
- A user table or query genuinely named
syslog— the direct, only cause, specific to Informix SE databases with logging enabled. - Assuming
sys-prefixed names are safe as long as they don't match a real system catalog table —syslogin particular is explicitly reserved regardless of whether it "looks" like a normal table name. - A schema ported from a different database or engine where
syslogwas a perfectly valid table name, now colliding with this Informix SE-specific reservation.
Solutions / Resolution
- Avoid table names beginning with
sysentirely, per the official guidance —syslogspecifically is disallowed on logged Informix SE databases, and the broadersys-prefix convention is reserved for system catalog objects generally. - Rename the conflicting table to something outside the
sys-prefix convention. - When porting a schema from another system, check for any
sys-prefixed table names before deploying to Informix SE.
Examples
Renaming a colliding table
-- Conflicts with the reserved syslog name on a logged Informix SE database:
CREATE TABLE syslog (event_id INTEGER, message VARCHAR(200));
-- Fix — use a non-reserved name:
CREATE TABLE app_event_log (event_id INTEGER, message VARCHAR(200));
Diagnostic Checks
- Check whether the table name in question is exactly
syslog, and whether the target server is Informix SE with logging enabled. - Review the schema for any other
sys-prefixed table names, as a broader precaution.
Related Errors / Related Topics
- -354 — "Incorrect database or cursor name format." A related identifier-naming restriction, though about character/length rules rather than a specific reserved name collision.
Avoid the sys prefix for table names generally, not just syslog specifically — it's reserved
for system catalog objects, and Informix SE enforces at least this one collision explicitly.