Oracle

為什麼我無法從預建構的 oracle 虛擬機中建立到本地 oracle 數據庫的連接?

  • December 27, 2018

我從http://www.oracle.com/technetwork/database/enterprise-edition/databaseappdev-vm-161299.html下載了DeveloperDaysVM2016-06-02_13.ova並成功將其載入到 Virtual Box 中。

我以“oracle”使用者身份登錄,我可以看到桌面。

在虛擬機中,我打開 Firefox 並導航到:

http://localhost:8080/ords/hrrest/employees/並成功接收到 JSON 格式的員工列表。所以我知道數據庫已經啟動並正在執行。

現在我正在嘗試通過來自 Netbeans 的“ojdbc6.jar”Java 連接器/驅動程序連接到這個數據庫(見下圖)。然而,

當我進入

使用者名:hr 密碼:oracle SID:orcl12c URL:jdbc:oracle:thin:@localhost:1521:orcl12c

我收到一條錯誤消息,指示

“無法添加連接。無法使用 oracle.jdbc.OracleDriver 建立與 jdbc:oracle:thin:@localhost:1521:orcl12c 的連接(ORA-01017:使用者名/密碼無效;登錄被拒絕”

但這沒有任何意義,因為我能夠從終端成功登錄:

sqlplus hr

SQL*Plus: Release 12.1.0.2.0 Production on Thu Jul 7 17:21:07 2016

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

Enter password: oracle
Last Successful login time: Thu Jul 07 2016 16:33:31 -04:00

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> 

為什麼我不能通過 netbeans 的 java 連接器登錄?

我也查了

lsnrctl status

LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 07-JUL-2016 17:22:12

Copyright (c) 1991, 2014, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 12.1.0.2.0 - Production
Start Date                05-JUL-2016 16:48:08
Uptime                    2 days 0 hr. 34 min. 4 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Default Service           orcl12c
Listener Parameter File   /u01/app/oracle/product/12.1.0.2/db_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/vbgeneric/listener/alert/log.xml
Listening Endpoints Summary...
 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=vbgeneric)(PORT=8081))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "orcl" has 1 instance(s).
 Instance "orcl12c", status READY, has 1 handler(s) for this service...
Service "orcl12c" has 2 instance(s).
 Instance "orcl12c", status UNKNOWN, has 1 handler(s) for this service...
 Instance "orcl12c", status READY, has 1 handler(s) for this service...
Service "orcl12cXDB" has 1 instance(s).
 Instance "orcl12c", status READY, has 1 handler(s) for this service...
Service "ords" has 1 instance(s).
 Instance "orcl12c", status READY, has 1 handler(s) for this service...
The command completed successfully
[oracle@vbgeneric oracle]$ 

那麼我做錯了什麼?在這個預先建構的虛擬機中,一切似乎都正常執行。

在此處輸入圖像描述

這是一遍又一遍的同一個故事。Oracle 在此 VM 中使用多租戶架構,並設置環境變數TWO_TASK。這會引起很多混亂。

當您連接 assqlplus hr時, 的值TWO_TASK會自動附加到連接字元串,並且您連接到SERVICE_NAME=ORCLand not SID=ORCL12or SERVICE_NAME=ORCL12。使用者hr是在ORCL可插拔數據庫中創建的。使用SID=ORCL12or SERVICE_NAME=ORCL12,您連接到該使用者不存在的根容器,因此您會收到ORA-01017錯誤消息。

在此處輸入圖像描述

所以代替連接字元串:

jdbc:oracle:thin:@localhost:1521:orcl12c

使用它來連接:

jdbc:oracle:thin:@localhost:1521/orcl

請注意,/orcl而不是:orcl12c.

:指定實例連接 (SID),/指定服務連接 (SERVICE_NAME)。連接可插拔數據庫時必須指定服務名稱,因為多個可插拔數據庫共享同一個實例,服務名稱是它們的區別。

在此處輸入圖像描述

您的連接字元串還需要包含使用者名和密碼:

jdbc:oracle:thin:hr/oracle@localhost:1521:orcl12c

那應該可以。

引用自:https://dba.stackexchange.com/questions/143286