oracledb_exporter通过Wallet连接ADB遇ORA-12154错误求助
解决oracledb_exporter容器连接Oracle ADB时的ORA-12154错误
1. 确认Wallet挂载与文件完整性
- 启动容器时必须将本地Wallet目录正确挂载到容器内的
/tmp/wallet,示例docker命令:docker run -v /your/local/wallet/path:/tmp/wallet ... oracledb_exporter:latest - 进入容器检查
/tmp/wallet下的文件,必须包含tnsnames.ora、sqlnet.ora、cwallet.sso、ewallet.p12这些核心文件,缺失任何一个都会导致连接失败。 - 验证
sqlnet.ora配置,确保存在以下两行:WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY=/tmp/wallet))) SQLNET.WALLET_OVERRIDE = TRUE
2. 正确配置DATA_SOURCE_NAME(DSN)
- 使用TNS别名:直接用
tnsnames.ora中定义的连接别名,比如文件里的adb_high,DSN格式为:username/password@adb_high - 使用完整连接字符串(不依赖tnsnames.ora):如果不想依赖容器内的TNS配置,直接用完整的TCPS连接字符串,示例:
username/password@(DESCRIPTION=(CONNECT_TIMEOUT=10)(RETRY_COUNT=3)(RETRY_DELAY=1)(ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCPS)(HOST=your-adb-host.oraclecloud.com)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=your-adb-service-name_high.adb.oraclecloud.com))(SECURITY=(SSL_SERVER_DN_MATCH=yes))) - 确保DSN通过环境变量正确传递给容器,比如docker run时添加:
-e DATA_SOURCE_NAME="username/password@adb_high"
3. 配置Oracle客户端环境变量
- 容器内必须设置
TNS_ADMIN=/tmp/wallet,让Oracle客户端能定位到Wallet配置文件。可以在docker run时添加环境变量:-e TNS_ADMIN=/tmp/wallet - 如果使用的是自定义镜像,确保镜像内的Oracle客户端环境变量(如
ORACLE_HOME)配置正确,避免OCI库加载失败。
4. 容器内基础连接测试
- 进入容器内部,用sqlplus或tnsping验证连接是否正常:
docker exec -it <your-container-id> bash export TNS_ADMIN=/tmp/wallet # 测试TNS别名解析 tnsping adb_high # 测试实际连接 sqlplus username/password@adb_high - 如果tnsping成功但sqlplus连接失败,检查
/tmp/wallet目录及文件的权限,确保运行oracledb_exporter的用户拥有读权限,必要时执行:chmod -R 755 /tmp/wallet
5. 检查oracledb_exporter版本兼容性
- 确保使用的是oracledb_exporter的最新稳定版本,旧版本可能存在TCPS连接或Wallet处理的bug,升级到最新版可解决部分兼容性问题。
内容的提问来源于stack exchange,提问作者vijay
相关产品推荐
相关产品推荐

