{"record":{"id":"9f568dc2e105aabe","repo":"apache/seatunnel","slug":"failed-to-read-schema-for-table-s-9f568d","errorCode":null,"errorMessage":"Failed to read schema for table %s ","messagePattern":"Failed to read schema for table (.+?) ","errorType":"exception","errorClass":"SeaTunnelException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-cdc/connector-cdc-oracle/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/oracle/utils/OracleSchema.java","lineNumber":89,"sourceCode":"                    tableId.catalog(),\n                    tableId.schema(),\n                    connectorConfig.getTableFilters().dataCollectionFilter(),\n                    null,\n                    false);\n            for (TableId id : tables.tableIds()) {\n                TableId tableMapId = resolveTableId(id, tableId, tableMap);\n                if (tableMap.containsKey(tableMapId)) {\n                    Table table =\n                            CatalogTableUtils.mergeCatalogTableConfig(\n                                    tables.forTable(id), tableMap.get(tableMapId));\n                    TableChanges.TableChange tableChange =\n                            new TableChanges.TableChange(\n                                    TableChanges.TableChangeType.CREATE, table);\n                    schemasByTableId.put(tableMapId, tableChange);\n                }\n            }\n        } catch (SQLException e) {\n            throw new SeaTunnelException(\n                    String.format(\"Failed to read schema for table %s \", tableId), e);\n        }\n\n        if (!schemasByTableId.containsKey(tableId)) {\n            throw new SeaTunnelException(\n                    String.format(\"Can't obtain schema for table %s \", tableId));\n        }\n\n        return schemasByTableId.get(tableId);\n    }\n\n    static TableId resolveTableId(\n            TableId readTableId, TableId requestedTableId, Map<TableId, ?> tableMap) {\n        if (tableMap.containsKey(readTableId)) {\n            return readTableId;\n        }\n\n        TableId readTableIdWithRequestedCatalog =","sourceCodeStart":71,"sourceCodeEnd":107,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-cdc/connector-cdc-oracle/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/oracle/utils/OracleSchema.java#L71-L107","documentation":"Thrown by OracleSchema.readTableSchema when Debezium's schema reading for an Oracle table fails with a SQLException. The connector queries Oracle's metadata (via Debezium's OracleDatabaseSchema) to build the TableChanges.TableChange for a tableId; any JDBC failure during that read is wrapped in this SeaTunnelException with the table identifier attached.","triggerScenarios":"JDBC error while reading table schema for the given TableId, e.g. table dropped or renamed between config parsing and snapshot start, invalid credentials, network/ORA-* errors from Oracle, or unsupported data types causing the underlying schema query to fail.","commonSituations":"Table dropped after job start; missing SELECT privileges on the table or its metadata (ALL_TAB_COLUMNS etc.); Oracle listener/connection issues mid-snapshot; log mining privileges missing; case-sensitivity mistakes in 'database.schema.table' identifiers.","solutions":["Verify the table still exists and the configured database.schema.table name matches Oracle exactly (respecting case/quoting).","Grant the user SELECT on the table plus CDC-related privileges (LOGMINING, SELECT ANY TRANSACTION or equivalent for your Debezium version).","Re-run the job; if transient network/ORA errors caused it, check Oracle alert logs and connectivity.","Enable JDBC/Debezium debug logging to see the underlying SQLException cause chain for the exact ORA error.","If a datatype is unsupported, add/adjust column converters or exclude the offending column from tableList where feasible."],"exampleFix":"// before\ntableList = [\"ORCL.SCOTT.ORDERS\"] // table was renamed to ORDERS_ARCHIVE\n// after\ntableList = [\"ORCL.SCOTT.ORDERS_ARCHIVE\"] // match the real schema.table name","handlingStrategy":"validation","validationCode":"-- run before the job\nSELECT owner, table_name FROM all_tables WHERE owner='SCOTT' AND table_name='ORDERS';\n-- and check privileges\nSELECT privilege FROM all_tab_privs WHERE table_schema='SCOTT' AND table_name='ORDERS' AND grantee='CONNECTOR_USER';","typeGuard":null,"tryCatchPattern":"try {\n    TableChange change = oracleSchema.getTableSchema(tableId);\n} catch (SeaTunnelException e) {\n    LOG.error(\"schema read failed for {} cause={}\", tableId, e.getCause(), e);\n    throw e;\n}","preventionTips":["Always use fully-qualified database.schema.table in tableList matching Oracle case","Grant SELECT and CDC/log-mining privileges to the connector user","Verify the table exists before job submission","Pin connector and Debezium versions compatible with your Oracle server"],"tags":["oracle","cdc","jdbc","schema-read"],"backgroundTag":"database-query-failed","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}