Skip to content
7.8 Constraints, Errors, and Troubleshooting

7.8 Constraints, Errors, and Troubleshooting

Repeating the same failed SQL can leave the cause unchanged while making the state harder to understand. First distinguish unsupported operations from invalid input or object-state issues. This section narrows down checks by symptom.

Feature Support

RequestLOG supportAlternative
General UPDATEUnsupportedDesign correction events or choose a mutable table
DELETE WHERE with arbitrary predicatesUnsupportedBEFORE, OLDEST, EXCEPT, or a different model
PRIMARY KEY/UNIQUE constraintsUnsupportedHandle duplicates during collection or choose another table
Value/range indexesLSM supportedChoose according to type and predicate
Word searchKEYWORD supportedCreate on VARCHAR/TEXT, then use SEARCH/ESEARCH
BITMAP analytical indexesSubject to supported conditionsCheck type, encoding, and value distribution
ORDER BY/GROUP BY on TEXT itselfUnsupportedUse separate code, severity, or time columns

Diagnosis by Symptom

SymptomFirst checkAction
Stored arrival time differs from the explicit valuePrevious timestamp and TIME_INVERSION_MODECheck adjustment; retain event time separately
SEARCH reports an index errorKEYWORD index on the columnCheck type, table, and index name
A word exists but is not foundSEARCH tokens versus LIKE substringsCompare both results on one raw row
Query remains slow after index creationPlan, build state, and time rangeCheck indexing progress, then measure representative load
Column length change failsExisting type and new lengthUse VARCHAR expansion only; check the maximum
MINMAX change failsWhether the type is variable-lengthTarget only supported fixed-length LOG columns
NOT NULL change failsExisting NULL rowsDistinguish existing-data checks from NOCHECK semantics
An event appears multiple timesSource ID, retries, and file reprocessingReview retransmission policy; arbitrary row deletion is unavailable
DDL reports a resource-in-use errorConflicts with ingestion or queriesReschedule operations and check again

Check server settings and the index list as follows.

SELECT NAME, VALUE FROM V$PROPERTY
 WHERE NAME IN ('DISK_COLUMNAR_TABLE_TIME_INVERSION_MODE', 'TABLE_SCAN_DIRECTION');
SHOW INDEXES;

Checking a setting and changing it are separate operations. Do not change production-wide settings before identifying the cause.

Reproducing and Resolving Errors

CREATE LOG TABLE ch7_error (event_id INTEGER, message TEXT);
INSERT INTO ch7_error VALUES (1, 'connection timeout');
SELECT event_id, message FROM ch7_error;

The query returns one row. Each statement below intentionally fails. Run only the statement you want to verify, separately from the normal exercise.

-- No KEYWORD index exists.
SELECT event_id FROM ch7_error WHERE message SEARCH 'timeout';

-- Sorting and grouping TEXT itself are unsupported.
SELECT message FROM ch7_error ORDER BY message;
SELECT message, COUNT(*) FROM ch7_error GROUP BY message;

-- LOG does not support general UPDATE or predicate-based DELETE.
UPDATE ch7_error SET message = 'fixed' WHERE event_id = 1;
DELETE FROM ch7_error WHERE event_id = 1;

-- This statement does not convert TEXT to VARCHAR.
ALTER TABLE ch7_error MODIFY COLUMN (message VARCHAR(4096));

Now create the index and check the supported search path.

CREATE INDEX ch7_error_msg ON ch7_error(message) INDEX_TYPE KEYWORD;
EXEC TABLE_FLUSH(ch7_error);
EXEC INDEX_FLUSH(ch7_error);

SELECT event_id, message FROM ch7_error
 WHERE message SEARCH 'timeout'
 ORDER BY event_id;

DROP TABLE ch7_error;

Row 1 should be returned. Adding an index does not enable TEXT sorting or LOG UPDATE.

Diagnosing Retention Policies

If expired rows remain, check the assigned policy, execution interval, LAST_DELETED_TIME, and actual _arrival_time together. Do not conclude deletion failed based only on event_time. For exercises, see Operations and Data Lifecycle.

If the issue persists, collect the server version and Edition, table DDL, failing SQL, complete error message, and representative input values. Redact passwords and sensitive logs before sharing. A small reproducer is more useful for diagnosis than sending the entire dataset.

Last updated on