t8y2/dbx · error
not connected
Error message
not connected
What it means
The Oracle server's validate_connection handler requires an established database handle (s.db). If the server was never connected, or the connection was closed and s.db set to nil, validation cannot proceed and returns 'not connected' before attempting a ping.
Source
Thrown at agents/drivers/oracle-go/main.go:876
var cp connectParams
if err := decodeParams(params, &cp); err != nil {
return nil, false, err
}
return map[string]bool{"ok": true}, false, s.connect(cp)
case "test_connection":
var cp connectParams
if err := decodeParams(params, &cp); err != nil {
return nil, false, err
}
db, err := openAndPingDB(cp, 5*time.Second)
if err != nil {
return nil, false, err
}
defer db.Close()
return map[string]bool{"ok": true}, false, nil
case "validate_connection":
if s.db == nil {
return nil, false, errors.New("not connected")
}
return map[string]bool{"ok": true}, false, pingDB(s.db, 5*time.Second)
case "list_databases":
result, err := s.listDatabases()
return result, false, err
case "list_schemas":
result, err := s.listSchemas(stringSliceParam(params, "visible_schemas"))
return result, false, err
case "list_tables":
schema := stringParam(params, "schema")
result, err := s.listTables(schema, metadataListConstraintsFromParams(params))
return result, false, err
case "list_objects":
schema := stringParam(params, "schema")
result, err := s.listObjects(schema, metadataListConstraintsFromParams(params))
return result, false, err
case "completion_assistant_search_v1":
var request completionAssistantRequestView on GitHub (pinned to c0390bff16)
Solutions
- Issue connect (and confirm it succeeds) before validate_connection.
- After a disconnection, reconnect first; pingDB only works on a live *sql.DB.
- Track connection state in the caller and skip validation when known disconnected.
Example fix
// before
_, err := dispatch("validate_connection", nil) // never connected
// after
if _, err := dispatch("connect", connectParams); err != nil { return err }
_, err := dispatch("validate_connection", nil) Defensive patterns
Strategy: try-catch
Validate before calling
if s.db == nil {
return errors.New("oracle: not connected; call connect first")
} Type guard
func connected(s *server) bool { return s != nil && s.db != nil } Try / catch
_, err := dispatch("validate_connection", nil)
if err != nil && err.Error() == "not connected" {
if _, cerr := dispatch("connect", connectParams); cerr != nil { return cerr }
_, err = dispatch("validate_connection", nil)
}
return err Prevention
- Sequence health checks after successful connect
- Reconnect on 'not connected' rather than repeatedly validating
- Null out s.db only in close, and recreate before next use
When it happens
Trigger: validate_connection dispatched when s.db == nil: before any connect call succeeded, or after a close/disconnect that nulled s.db.
Common situations: Health probes running before app init completes, reconnect logic that cleared s.db on error without re-establishing, calling validate on a fresh server instance.
Related errors
AI-assisted analysis of t8y2/dbx@c0390bff16 (2026-09-05).
Data as JSON: /api/errors/a83f0c79bb5a8acb.
Report an issue: GitHub.