
ORDS 在 WebLogic 环境下读取正常但插入/更新失败,典型表现为 MissingDependencyException 报错,根本原因常非权限配置,而是数据库端触发器编译异常或逻辑错误,导致 ORDS 无法获取有效的 @Named("ords") java.sql.Connection。
ords 在 weblogic 环境下读取正常但插入/更新失败,典型表现为 `missingdependencyexception` 报错,根本原因常非权限配置,而是数据库端触发器编译异常或逻辑错误,导致 ords 无法获取有效的 `@named("ords") java.sql.connection`。
当 ORDS 报出类似以下关键异常时:
oracle.dbtools.injector.impl.MissingDependencyException: No provider found for: requires java.sql.Connection with constraint: (provides @Named(ords) java.sql.Connection) ... Caused by: oracle.dbtools.plugin.api.types.TypeDependencyNotAvailableException: The type: class oracle.dbtools.oauth.OAuthProviderImpl could not be instantiated due to missing dependency: (provides @Named(ords) java.sql.Connection) java.sql.Connection
切勿第一反应修改 ORDS 配置或数据库用户权限——该错误表面是“连接注入失败”,实则是 ORDS 在执行 DML(INSERT/UPDATE)过程中,因底层数据库操作(如触发器、自治事务、PL/SQL 异常处理)引发隐式上下文中断,导致依赖注入链断裂。
? 根本原因定位要点:
- ✅ SELECT 查询成功 → 说明 ORDS 连接池、认证、基础 JDBC 配置均正常;
- ❌ INSERT/UPDATE 失败 → 表明问题发生在事务执行阶段,极可能由数据库端对象(如
BEFORE/AFTER ROW触发器、存储过程、序列访问逻辑)引发; - ⚠️ 错误堆栈中
OAuthProviderImpl初始化失败是结果而非原因——它依赖的@Named("ords") Connection因上游 DML 执行异常而未能正确传递或复用。
✅ 典型场景与修复步骤:
-
检查关联表的 DML 触发器状态:
SELECT owner, trigger_name, status, last_ddl_time FROM dba_triggers WHERE table_name IN ('YOUR_TARGET_TABLE') AND status = 'INVALID'; -
重新编译失效触发器:
ALTER TRIGGER schema_name.trigger_name COMPILE; -- 若编译报错,需修正触发器内 PL/SQL 逻辑(如:未声明变量、ORA-01422 单行子查询返回多行、自治事务 misuse 等)
-
验证触发器逻辑健壮性:
- 避免在触发器中调用含
COMMIT/ROLLBACK的自治事务(违反 ORDS 事务边界); - 确保所有
SELECT INTO语句有EXCEPTION WHEN NO_DATA_FOUND THEN ...或WHEN TOO_MANY_ROWS THEN ...处理; - 检查是否误用
DBMS_OUTPUT.PUT_LINE(虽不报错但可能干扰流); - 禁止在触发器中显式关闭/重置连接(ORDS 管理连接生命周期)。
- 避免在触发器中调用含
? 补充排查建议:
- 启用 ORDS SQL 日志(
config.dir下defaults.xml中设置<entry key="debug.printDebugToScreen">true</entry>并开启jdbc.debug=true),确认失败请求实际执行的 SQL 及绑定参数; - 在数据库侧启用
ALTER SESSION SET EVENTS '9420 TRACE NAME CONTEXT FOREVER, LEVEL 1';跟踪触发器执行路径; - 若使用 Oracle Wallet 或 TLS 连接,确保
ords.war中conf/ords/params/ords_params.properties的db.connection.type=service与数据库服务名严格匹配,避免连接复用异常。
? 总结:该问题本质是数据库层逻辑缺陷传导至 ORDS 依赖注入框架。修复核心在于保障 DML 操作的原子性与稳定性——触发器必须编译有效、无运行时异常、不破坏事务上下文。权限、连接池、WebLogic 配置通常无需调整,盲目修改反而增加故障面。


















