mem0ai/mem0 · error · Error
Oracle DB client driver version ${this.oracledb.oracleClient
Error message
Oracle DB client driver version ${this.oracledb.oracleClientVersionString} not supported, must be >=23.4 for vector support What it means
Vector search requires Oracle client 23.4 or newer. This check applies only to the node-oracledb thick mode (this.oracledb.thin === false): the adapter decodes oracleClientVersion as major*100000000 + minor*100000 and throws if the installed thick client library is older than 23.4. Thin mode (pure JS, the default in recent drivers) skips this check.
Source
Thrown at mem0-ts/src/oss/src/vector_stores/oracledb.ts:487
const result = await fn(connection);
if (commit) await connection.commit();
return result;
} catch (err) {
await connection.rollback();
throw err;
} finally {
await connection.close();
}
}
private async assertVectorSupport(): Promise<void> {
if (!this.oracledb.thin) {
const [major, minor] = [
Math.floor(this.oracledb.oracleClientVersion / 100000000),
Math.floor(this.oracledb.oracleClientVersion / 100000) % 100,
];
if (major < 23 || (major === 23 && minor < 4)) {
throw new Error(
`Oracle DB client driver version ${this.oracledb.oracleClientVersionString} ` +
"not supported, must be >=23.4 for vector support",
);
}
}
const version = await this.withConnection(
async (connection) => connection.oracleServerVersionString,
);
const [major, minor] = version.split(".").map(Number);
if (major < 23 || (major === 23 && minor < 4)) {
throw new Error(
`Oracle DB version ${version} not supported, must be >=23.4 for vector support`,
);
}
}
private createIndexDdl(): string {View on GitHub (pinned to 001c235229)
Solutions
- Upgrade the Oracle Instant Client / client libraries to 23.4+ (23ai client) on the machine running Node.
- Switch to thin mode (default) — remove oracledb.initOracleClient() so the pure-JS driver is used and this check no longer applies (verify server is still 23.4+).
- In Dockerfiles, replace FROM images with oraclelinux:9 + instantclient 23 or the official 23ai images.
- Print oracledb.oracleClientVersionString at startup to confirm which client thick mode loaded.
Example fix
# before (Dockerfile) FROM node:20 RUN apt-get install -y libaio1 && curl -o instantclient.zip https://.../instantclient-2113000.zip # after FROM node:20 RUN curl -o instantclient.zip https://.../instantclient-2340000.zip && unzip ...
Defensive patterns
Strategy: fallback
Validate before calling
function checkThickClient(oracledb: any): void {
if (oracledb.thin) return; // thin mode, no client library needed
const major = Math.floor(oracledb.oracleClientVersion / 100000000);
const minor = Math.floor(oracledb.oracleClientVersion / 100000) % 100;
if (major < 23 || (major === 23 && minor < 4)) {
throw new Error(`Thick client ${oracledb.oracleClientVersionString} < 23.4; upgrade Instant Client or stay in thin mode`);
}
} Try / catch
try { await store.initialize(); } catch (e) { if (e instanceof Error && e.message.includes('client driver version')) { /* rebuild image with Instant Client 23ai, or drop initOracleClient() to use thin mode */ } else throw e; } Prevention
- Prefer thin mode (no initOracleClient) unless you need thick-only features.
- Pin Instant Client 23ai in Dockerfiles and CI images.
- Log oracledb.oracleClientVersionString during startup diagnostics.
When it happens
Trigger: Initializing OracleDB with oracledb.initOracleClient() pointing at an Instant Client < 23.4 (e.g. 19c or 21c client); CI images bundling an older Instant Client; a host with an old ORACLE_HOME picked up by thick-mode initialization.
Common situations: Enterprise hosts standardized on Oracle Client 19c/21c for legacy apps; Docker images based on older Instant Client packages; switching from thin to thick mode for features like advanced authentication and inheriting an old client.
Related errors
- Unsupported Oracle filter operator(s) for field '${metadataK
- Oracle filter operator '${operator}' requires a scalar value
- Oracle filter operator '${operator}' does not support null
- Oracle filter operator '${operator}' requires a non-empty ar
- Oracle filter operator '${operator}' requires scalar values
AI-assisted analysis of mem0ai/mem0@001c235229 (2026-08-15).
Data as JSON: /api/errors/d56b40ebc6b1f0a0.
Report an issue: GitHub.