如何解决调用Oracle .NET存储过程报ORA-02019远程数据库连接描述未找到错误
ORA-02019 Oracle CLR存储过程调用错误解决方案
问题根因
该错误是Oracle调用.NET CLR存储过程时,无法找到DBMS_CLR依赖的专用数据库链接导致,按以下步骤逐一排查修复:
修复步骤
- 步骤1:开启Oracle CLR集成权限
首先用SYS用户登录数据库,执行以下命令开启CLR功能,并且给部署存储过程的schema授权:EXEC DBMS_CLR.ENABLE; GRANT EXECUTE ON SYS.DBMS_CLR TO *你的存储过程所属SCHEMA名*; - 步骤2:创建CLR专用数据库链接
DBMS_CLR默认使用名为CLRExtProc的数据库链接调用外部CLR程序,执行以下命令创建该链接:
若不需要公共访问权限,也可以创建当前schema私有的数据库链接。CREATE PUBLIC DATABASE LINK CLRExtProc CONNECT TO *你的存储过程所属SCHEMA名* IDENTIFIED BY *该SCHEMA的密码* USING 'ORACLR_CONNECTION_DATA'; - 步骤3:确认TNS配置路径正确
你当前的TNS配置内容没有问题,但需要确认ORACLR_CONNECTION_DATA条目是保存在Oracle数据库服务读取的配置文件中,路径为:
不要放到第三方Oracle客户端、ODAC的tnsnames.ora文件中,否则数据库服务无法读取。C:\app\Administrator\product\18.0.0\dbhomeXE\NETWORK\ADMIN\tnsnames.ora - 步骤4:验证数据库链接可用性
执行以下测试语句,确认数据库链接可以正常访问:
正常执行会返回结果SELECT * FROM dual@CLRExtProc;X,说明链接配置生效。 - 步骤5:重启关联服务
所有配置修改完成后,按顺序重启服务:- 停止
OraClrAgnt服务 - 执行
lsnrctl stop停止监听 - 执行
lsnrctl start启动监听 - 启动
OraClrAgnt服务
- 停止
- 步骤6:重新调用存储过程
执行你的调用语句验证修复效果:select STOREDPROCEDURE1 from dual;
额外排查点
如果以上步骤执行后仍然报错,可以检查:
- Listener配置中
CLRExtProc对应的ORACLE_HOME路径是否与实际安装路径一致,oraclr18.dll是否存在于%ORACLE_HOME%\bin目录下 - 部署的.NET程序集目标框架是否与Oracle 18c支持的CLR版本兼容,Oracle 18c仅支持.NET Framework 4.x版本,不要使用.NET Core/.NET 5+
内容的提问来源于stack exchange,提问作者Thomas Carlton
相关产品推荐
相关产品推荐

