1
import java.sql.SQLException;
import oracle.jdbc.pool.OracleDataSource;
import java.sql.Statement;
import java.util.Properties;
import oracle.jdbc.OracleConnection;

public class Test {

static final String url2= "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP 

(HOST=192.168.1.171)(PORT=5521))"+"(CONNECT_DATA =(SERVICE_NAME = rdbms)))";

public static void main(String[] args) throws SQLException {

            OracleDataSource ds = new OracleDataSource();
           Properties prop = new Properties();
           prop.setProperty("user","system");
           prop.setProperty("password","manager");
           prop.setProperty("internal_logon","sysdba");
           prop.setProperty("prelim_auth","true");
           ds.setConnectionProperties(prop);
           ds.setURL(url2);
           OracleConnection conn = (OracleConnection)ds.getConnection();
           conn.startup(OracleConnection.DatabaseStartupMode.NO_RESTRICTION);
           conn.close();
    }
}

取得

Exception in thread "main" java.sql.SQLException: Listener refused the connection with the following error:
ORA-12514, TNS:listener does not currently know of service requested in connect descriptor

誰でもこれを手伝ってもらえますか?

4

2 に答える 2

1

原因:
リスナーは、データベースまたは他のサービスへの接続を確立するリクエストを受け取りました。リスナーが受け取った接続記述子は、まだリスナーに動的に登録されていないか、静的に構成されていないサービス (通常はデータベース サービス) のサービス名を指定しました。これは、リスナーの開始後などの一時的な状態である可能性がありますが、データベース インスタンスがリスナーに登録される前です。

処置: - しばらく待ってから、もう一度接続を試みてください。

  • lsnrctl services を実行して、リスナーが現在認識しているサービスを確認します。

  • 使用されているネット・サービス名の接続記述子の SERVICE_NAME パラメータが、リスナーが認識しているサービスを指定していることを確認してください。

  • 簡易接続ネーミング接続 ID が使用された場合は、指定されたサービス名がリスナーによって認識されるサービスであることを確認してください。

  • listener.log ファイルでイベントを確認します。

于 2012-11-06T14:41:25.520 に答える
0

例外に関しては、多くの場合、JDBC は単に DB 側で発生するエラーのラッパーとして機能する
か、ドライバー固有 (つまり、postgresql jdbc ドライバー、oracle jdbc ドライバー) 固有のエラーを伝播することを理解する必要があります。
エラーをグーグルで検索すると、私が信じている明確な説明が見つかります:
http://ora-12514.ora-code.com/
提案のいずれかが表示された場合は、数秒後に再試行し、再接続してください。

于 2012-11-06T14:41:06.473 に答える