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 completionAssistantRequest

View on GitHub (pinned to c0390bff16)

Solutions

  1. Issue connect (and confirm it succeeds) before validate_connection.
  2. After a disconnection, reconnect first; pingDB only works on a live *sql.DB.
  3. 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

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.