无法使用 squirrel-sql 连接到 docker 中的 oracle db

Posted

技术标签:

【中文标题】无法使用 squirrel-sql 连接到 docker 中的 oracle db【英文标题】:Cant connect to oracle db in docker with squirrel-sql 【发布时间】:2018-12-18 13:26:07 【问题描述】:

我尝试在 docker (https://hub.docker.com/r/sath89/oracle-xe-11g/) 中连接到 oracle db 11。

使用命令启动docker:

docker run -d -p 8080:8080 -p 1521:1521 -e DEFAULT_SYS_PASS=sYs-p@ssw0rd sath89/oracle-xe-11g

从这个描述: 主机名:本地主机 端口:1521 sid: xe 用户名:系统 密码:甲骨文

做了一个网址 - jdbc:oracle:thin:@192.168.99.100:1521:xe

使用 squirrel-sql 有错误: 类 java.sql.SQLException: ORA-00604: 递归 SQL 级别 1 发生错误 ORA-12705: 无法访问 NLS 数据文件或指定的环境无效

但如果我尝试连接 SQLplus 就可以了:

docker exec -ti oracle_id sqlplus bash

sqlplus

【问题讨论】:

dba-oracle.com/t_ora_12705_error.htm 可能会有所帮助。您可能需要导出一些环境变量。 【参考方案1】:

SquirrelSQL 需要在登录前设置一些 NLS 变量。对于 Docker 连接,请注意命令末尾有“bash”。这不仅告诉连接您将使用 bash shell,它还设置环境以使用 bash_rc 进行连接(也可能是配置文件)。您来自本地计算机而不是 SSH,因此使用本地计算机而不是 SSH。

我相信有一个 squirrel-sql.bat 文件可以取消设置然后设置环境,或者更好,让我们在注册表中取消设置,让本地连接顺其自然: 在您的 Windows 机器上:

在注册表中搜索 NLS_LANG 子项:\HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE,重命名,保存更改,重新启动并重试。

【讨论】:

感谢您的回复。我无法在注册表中搜索 NLS_LANG 子项:\HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE。 NLS_LANG 仅在 Session Manager\Environment 中,我无法重命名。【参考方案2】:

我不熟悉 Squirrel SQL,但您也可能缺少正确设置 jar 文件。看看你的 jar 文件是否配置正确,取决于你的版本,它看起来像这样:

%Oracle_\jdbc\lib\ojdbc.jar

【讨论】:

以上是关于无法使用 squirrel-sql 连接到 docker 中的 oracle db的主要内容,如果未能解决你的问题,请参考以下文章

无法连接到 aws redshift

无法将集群连接到 opscenter

iPhone模拟器无法连接到互联网

无法连接到 ECS 中链接的 docker 容器

无法连接到在 C# 程序中使用 Docker 启动的 RabbitMQ(使用 RabbitMQ.Client)

无法连接到 Hasura PostGreSQL docker 容器的 Web 套接字