【问题标题】:Oracle container database 12c, connecting using JDBCOracle 容器数据库 12c,使用 JDBC 连接
【发布时间】:2021-07-11 13:37:09
【问题描述】:

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

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

根据数据表设置了一个名为 ORCLCDB 的 CDB 数据库和一个名为 ORCLPDB1 的 PDB 数据库。

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

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

使用用户名 sys,密码 Oradoc_db1,并将特殊的 internal_logon jdbc 参数设置为等于“sysdba”以避免错误“local oracle CDB: ORA-28009: connection as SYS should be as SYSDBA or SYSOPER”

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

ALTER SESSION SET CONTAINER=ORCLPDB1

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

创建由 MYPASSWORD1 标识的用户 MYUSER

但后来我被困住了。我认为应该有某种方法可以使用 JDBC 连接字符串直接连接到 PDB。每次我在谷歌上搜索这个,它都会谈论 tnsnames blah blah,但是使用 JDBC 连接的人通常在服务器上使用 Tomcat,或者没有安装 Oracle 客户端。他们希望只安装瘦驱动程序就能够连接到 Oracle。

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

jdbc:oracle:thin:@localhost:1555:ORCLPDB1 使用用户名 myuser 或 sys,但我总是得到:

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

此时我被卡住了。

【问题讨论】:

    标签: database oracle jdbc oracle12c


    【解决方案1】:

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

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

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

    注意!默认监听端口是 1521,不知道为什么你特别想要一个不同的端口。

    祝你好运!

    【讨论】:

    • 我试过了,它会导致稍微不同的错误:“ORA-12514,TNS:listener 目前不知道连接描述符中请求的服务”
    • 端口非标准的原因是因为它是docker,我暴露了一个不同的端口。我想我可以保持端口不变,但我选择使用不同的端口。
    【解决方案2】:

    显然正确的答案是这样的……

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

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

    向 myuser 授予创建会话;

    然后,关闭 internal_logon jdbc 参数。

    【讨论】:

      猜你喜欢
      • 2022-12-11
      • 2014-11-11
      • 2018-08-08
      • 2014-06-12
      • 1970-01-01
      • 1970-01-01
      • 2021-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多