2

JDBC接続のホストとポートをOracleDBServerに接続する方法はありますか?

私は知っています、私はURLを解析することができました。しかし、フェイルオーバーを使用しているので、実際に接続しているサーバーを知りたいです。URLの解析は静的であり、フォーマットが異なるためエラーが発生しやすくなります。

接続メタデータで見つかりませんでした。

'select * from global_name'を使用すると、サービス名を取得できます。しかし、ホストとポートを取得する方法が見つかりませんでした。接続されています。

何か案が?

4

4 に答える 4

3

Connection から取得できる情報は次のとおりです。

            Connection dbConnection = null;
        try {
            dbConnection = dataSource.getConnection();
            DatabaseMetaData dbMetaData = dbConnection.getMetaData();
            getLogger().debug("DB Product Name   = " + dbMetaData.getDatabaseProductName());
            getLogger().debug("DB Product Version= " + dbMetaData.getDatabaseProductVersion());
            getLogger().debug("DB Driver Name    = " + dbMetaData.getDriverName());
            getLogger().debug("DB Driver Version = " + dbMetaData.getDriverVersion());
            getLogger().debug("DB Username         = " + dbMetaData.getUserName());
            getLogger().debug("DB URL            = " + dbMetaData.getURL());
        } catch (Exception e) {
            getLogger().debug("Failed to recover DatabaseMetaData: "+e.getMessage(), e);
        } finally {
            if (dbConnection != null) {
                try {
                    dbConnection.close();
                } catch (Exception ex) {
                    getLogger().error("Failed to close the DB connection: "+ex.getMessage(), ex);
                }
            }
        }

Check the DatabaseMetaData if you need more/different info. Example of output:

DB Product Name   = Oracle
DB Product Version= Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options
DB Driver Name    = Oracle JDBC driver
DB Driver Version = 11.2.0.2.0
DB Schema         = XXXXX
DB URL            = jdbc:oracle:thin:@XXX.XXX.XXX.XXX:11010:MYSID
于 2012-06-01T12:21:25.333 に答える
2

ポート(実際にはリスナーのポート)についてはわかりませんが、ホストの場合は次を試してください:

select utl_inaddr.get_host_name, utl_inaddr.get_host_address from dual;

データベース側には他のオプションがあります (v$instance のクエリなど) 。こちらを参照してください。たとえば、次の SID を使用できます。

select sys_context('userenv','instance_name') from dual;

それが役立つことを願っています。また、utl_inaddr を使用していることにも注意してください。これは、ログ記録と電子メール/アラートの目的のみです。

編集:

また、Oracle セッション情報のスプーフィングにはいくつかの懸念があることにも注意してください。これは、アラートとログにコンテキストを追加するためだけに使用することに注意した理由の 1 つです。私はすべての内外を知っているふりをしているわけではありませんが、基本的にこの問題は、他の誰か (またはどこかから) になりすましたクライアントに関係しています。Java アプリ経由で接続を制御しているため、問題になることはありませんが、気になる場合はこちらを参照してください。

于 2012-06-01T12:51:53.133 に答える
1

これにより、実行元のインスタンスのホスト名がわかります。

select host_name from v$instance

于 2012-06-04T17:17:50.973 に答える