簡體   English   中英

Java Oracle 本地主機連接錯誤 (ORA-12505)

[英]Java Oracle localhost connection error (ORA-12505)

我正在嘗試當前連接到我當前計算機上的數據庫。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Main {
    public static void main(String[] argv) throws Exception {

        Connection connection = null;
        try {
            // Load the JDBC driver
            String driverName = "oracle.jdbc.driver.OracleDriver";
            Class.forName(driverName);

            // Create a connection to the database
            String serverName = "localhost";
            String portNumber = "1521";
            String sid = "xe";
            String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid;
            String username = "scott";
            String password = "tiger";
            connection = DriverManager.getConnection(url, username, password);
            System.out.println("Success");
        } catch (ClassNotFoundException e) {
            System.out.println("Class Not Found Error");
        } 
    }
}

我一直收到這個錯誤,我不知道為什么......

Exception in thread "main" java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
The Connection descriptor used by the client was:
localhost:1521:xe

at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70)
at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:110)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:171)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:496)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:411)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:490)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:202)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:33)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:465)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at Main.main(Main.java:21)

在我的服務器中,我使用了命令(以 sys 登錄) SQL> select instance from v$thread; (它返回)實例--> xe

我可能做錯了什么?

謝謝!

PS 我也試過 127.0.0.1 而不是 localhost

而不是 String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid;

用這個:

String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + "/" + sid;

檢查<ORACLE_HOME>\\admin\\NETWORK目錄下的listener.ora文件是否有如下值:

XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

將 xe 替換為您在安裝時設置的數據庫名稱,您一定會成功

如果您忘記了 dbname,可以從 oracle 目錄中的文件 tnsnames.ora 中檢索它

我在連接到 oracle rac 時遇到了同樣的問題。 我將 url 從port:servicename更改為port/servicename ,它對我port/servicename

我將猜測 TNS 偵聽器已啟動,但數據庫實例在偵聽器啟動之前啟動。

當數據庫實例啟動時,它會向 TNS 監聽器注冊自己。 但是,如果沒有要注冊的偵聽器,則無法執行此操作。 當偵聽器啟動時,它不會檢查它知道的實例是否已啟動。

我可以提供演示。 我在 Windows 7 上使用 Oracle 11g XE Beta。最初,OracleServiceXE 服務正在運行,但 OracleXETNSListener 服務未運行。

我運行了您的數據庫連接代碼,但出現以下錯誤:

線程“main”中的異常 java.sql.SQLRecoverableException:IO 錯誤:網絡適配器無法建立連接

如果您收到 ORA-12505 錯誤,那么顯然您的 TNS 偵聽器正在運行。

然后我啟動了 TNS 偵聽器並重新運行您的數據庫連接代碼。 這次我得到了以下輸出:(我重命名了您的類並更改了其中的用戶名和密碼,但除此之外,其中的代碼是相同的):

C:\Users\Luke\stuff>java DbConnTest
Exception in thread "main" java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
[stacktrace snipped]

(此錯誤與您的不同:我沒有得到The Connection descriptor used by the client was:部分。我不是 100% 確定為什么。)

在上述情況下,修復方法是以SYS身份連接到 SQL*Plus 並運行ALTER SYSTEM REGISTER 這將向偵聽器注冊實例:

C:\Users\Luke\stuff>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.2.0 Beta on Sun Jul 24 11:13:57 2011

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


Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - Beta

SQL> alter system register;

System altered.

SQL> exit
Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - Beta

完成此操作后,我能夠連接到數據庫:

C:\Users\Luke\stuff>java DbConnTest
Success

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM