Oracle 容器数据库 12c,使用 JDBC 连接

Oracle container database 12c, connecting using JDBC

我正在尝试学习如何使用 Oracle 容器数据库,并且只是进行基本的 JDBC 连接。我安装了 Oracle 的 dockerised 版本:

https://hub.docker.com/_/oracle-database-enterprise-edition

其中根据资料sheet建立了一个名为ORCLCDB的CDB数据库和一个名为ORCLPDB1的PDB数据库。

所以我发现我可以像这样连接它:

jdbc:oracle:thin:@localhost:1555:ORCLCDB

使用用户名 sys,密码 Oradoc_db1,并将特殊的 internal_logon jdbc 参数设置为“sysdba”以避免错误“local oracle CDB: ORA-28009: connection因为 SYS 应该是 SYSDBA 或 SYSOPER"

我发现我可以通过输入以下内容来切换到 PDB:

ALTER SESSION SET CONTAINER=ORCLPDB1

然后我可以创建一个新用户:

CREATE USER MYUSER IDENTIFIED BY MYPASSWORD1

但后来我卡住了。我认为应该有一些方法可以使用 JDBC 连接字符串直接连接到 PDB。每次我 google 谈论这个时,它都会谈论 tnsnames 等等等等,但是使用 JDBC 连接的人通常在服务器上使用 Tomcat,或者没有 Oracle 客户端安装。他们希望仅通过安装瘦驱动程序就能够连接到 Oracle,没有别的。

我已经尝试了明显的使用:

jdbc:oracle:thin:@localhost:1555:ORCLPDB1 with username myuser or sys, but I always get:

ORA-12505,TNS:listener 目前不知道连接描述符中给定的 SID

此时我卡住了。

您需要使用 SERVICE_NAME 才能连接到 Oracle 容器数据库

请像这样更改您的连接字符串:

jdbc:oracle:thin:@localhost:1555/ORCLPDB1
  • A SERVICE_NAME 表示为“/”
  • SID (SystemIDentifier) 由“:”表示(不使用)

注意!默认侦听器端口是 1521,不确定您为什么特别想要一个不同的端口。

祝你好运!

显然正确答案是...

jdbc:oracle:thin:@localhost:1521/ORCLPDB1.localdomain

然后我可以使用上面的方法连接为SYS。如果我想以创建的用户身份连接,我还需要...

grant create session to myuser;

然后,关闭 internal_logon jdbc 参数。