2

Oracle は、11g R2 が IPV6 をサポートしていると宣言しており、ojdbc6.jar が正しいものです。

しかし、テストすると例外が発生します。解決しましたか?

私のテストコードは次のとおりです。

import java.sql.SQLException;
import java.util.Properties;

public class Test {

final static String sDBDriver = "oracle.jdbc.driver.OracleDriver";

/**
* @param args
* @throws SQLException 
*/

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

// TODO Auto-generated method stub
java.sql.Connection conn=null; 

String url="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=
[fe80::b056:5cff:fe78:b672])(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=fnstdb1))";

try
{
Class.forName(sDBDriver);
conn = DriverManager.getConnection(url,"scott","fnst1234");
}
catch (Exception e) 
{
System.out.println("ERROR:"+e.getMessage()); 
} 
finally
{
System.out.println("连接是否关闭:"+conn.isClosed());
conn.close();
}
}

}

次のコマンドを使用します。

java -cp ojdbc6.jar -Djava.net.preferIPv6Addresses=true Test

しかし、結果は次のとおりです。ERROR:NL Exception was generated

なにが問題ですか?

4

1 に答える 1

1

私はこの問題を解決しました。以下は私が何をしたかを示しています。

手順

  1. ファイルを編集$DB_HOME\NETWORK\ADMIN\listener.oraして、OracleがIPとポートでリッスンできるようにします。例えば:(ADDRESS = (PROTOCOL = TCP)(HOST = [fe80::221:97ff:fe66:1fa9%4])(PORT= 1521))

  2. リスナーを再確認します。走る:LSNRCTL stop/start

  3. 一部のアプリケーション(javase、connection-pool、lookup)では、ojdbc6.jarを使用しますjdbc:oracle:thin:@[fe80::221:97ff:fe66:1fa9]:1521:orcl

  4. 結果は成功です!

デモ

  1. listener.oraのIPアドレスは「%4」を追加する必要があります。追加しないと失敗します。

  2. ipv6アドレスは「[」と「]」である必要があります。そうでない場合、失敗します。

  3. オラクルのドキュメントは、ipv6を使用してjvmオプションを設定する必要があると宣言しています

    java.net.preferIPv6Addresses=true

しかし、それが設定されるかどうかは関係ありません!

于 2012-05-21T09:50:52.200 に答える