為什麼我無法從預建構的 oracle 虛擬機中建立到本地 oracle 數據庫的連接?
我從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
。這會引起很多混亂。當您連接 as
sqlplus hr
時, 的值TWO_TASK
會自動附加到連接字元串,並且您連接到SERVICE_NAME=ORCL
and notSID=ORCL12
orSERVICE_NAME=ORCL12
。使用者hr
是在ORCL
可插拔數據庫中創建的。使用SID=ORCL12
orSERVICE_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
那應該可以。