【发布时间】:2014-03-02 04:06:33
【问题描述】:
这是一个相当具体的问题。
我在一个使用数据库访问框架的 Java 项目中做一些工作,该框架最初设计用于使用 Oracle DB 9i。
要处理这个项目,我需要在我的 Mac 上运行一个 Oracle DB,运行 OSX Mountain Lion,唯一明显的解决方案是在 VM 中运行它。因此,我从 here 下载了 OTN 开发者日 VM,该 VM 随附一个 Oracle DB 12c 实例。
在经历了各种困难之后,我已经设置了我的 Eclipse/Tomcat/Servlets 以使用我从 Oracle 站点下载的 jdbc7 驱动程序与 12c 数据库通信。一切都按预期工作,并且需要注意的是,Oracle SQL Developer 可以很好地连接到它。
这是我正在使用的连接字符串:jdbc:oracle:thin:@localhost:1521/pdb1我可以以我在默认可插拔数据库中创建的本地用户身份登录,或者使用连接字符串jdbc:oracle:thin:@localhost:1521:orcl我可以以任何普通用户身份登录已经设置好了。
现在,诀窍是当我想使用 Java DB 访问框架时,该框架专为与 9i DB 一起使用而设计。我收到错误:ORA-28040: No matching authentication protocol。
根据我能找到的信息,例如this Oracle 线程,我的 12c 数据库未配置为允许 9i 样式的身份验证(由于 9i 中的安全漏洞)。所以要解决这个问题,我需要通过访问这个文件来设置我的数据库以允许这样做:
/u01/app/oracle/product/12.1.0/dbhome_1/network/admin/sqlnet.ora
并添加行:
SQLNET.ALLOWED_LOGON_VERSION=(9)
(注意我也试过(8),还有(12,11,10,9,8,7)等这样的怪事,我还是会遇到以下情况。我也见过SQLNET_ALLOWED...,下划线而不是句号,但我认为这是针对较旧的 Oracle DB 版本。)
当我这样做并重新启动 VM 时,我无法再连接到数据库。当我尝试连接到pdb1 时,我得到:
An error was encountered performing the requested operation:
IO Error: The Network Adapter could not establish the connection
Vendor code 17002
当我尝试连接到 orcl 时,我得到:
An error was encountered performing the requested operation:
Listener refused the connection with the following error:
ORA-12528, TNS:listener: all appropriate instances are blocking new connections
Vendor code 12528
当我进入 VM 中的终端并使用 lsnrctl 检查服务状态时(我在谷歌上搜索了一下),就会发生这种情况:
Services Summary...
Service "orcl" has 1 instance(s).
Instance "orcl", status BLOCKED, has 1 handler(s) for this service...
The command completed successfully
LSNRCTL>
不幸的是,总的来说,我在 Oracle 数据库和数据库管理方面相当轻量级;我宁愿简单地编写代码并让数据库工作,但我确实需要让这个数据库访问框架工作,而且我只有 Oracle 12c 的副本,而不是 9i,所以我m 在绑定中。
【问题讨论】:
标签: java sql oracle oracle9i oracle12c