0

Oracle の SQLLoader ユーティリティをラップする小さなプログラムがあります。SQLLoader が取るデータベース アドレス パラメータは、次のような TNS スタイルのアドレスのようです。

username/password@schemaname

また、私のプログラムは JDBC を使用してデータベースにアクセスし、負荷後の診断を実行します。残念ながら、現時点では、次のようにアドレスを指定する必要があります。

jdbc:oracle:thin:username/password@172.17.125.131:1521:EE

これらとの間で変換する方法はありますか?つまり、JDBC URL が与えられた場合、SQLLoader が取得する TNS アドレスに変換し、その逆も同様です。

4

2 に答える 2

0

あなたの SQL*Loader 接続は TNS エイリアスを使用しています (schemaname一般的には正しくありませんが、あなたにとっては正しいかもしれません)。それを JDBC 文字列のようなものに変換するには、tnsnames.oraファイルからデータを解析する必要があります。これは実行可能ですが、簡単ではありません (ただし、私よりも awk-fu が優れている人は同意しないでしょう)。そのファイルを調べると、JDBC 値に対応するアドレス値を持つエントリが表示されます。

TNS エイリアスの代わりに SQL*Loader コマンドで「easy connect」構文を使用できるため、他の方法を使用する方がはるかに簡単です。

sqlldr username/password@172.17.125.131:1521/EE control=...

ご覧のとおり、この部分を追加 (または削除) するだけでよいため、これを JDBC アドレスに (または JDBC アドレスから) 変換するのはほとんどjdbc:oracle:thin:簡単です。ただし、最後の区切り文字が から/に変わります:。それをどのように変更するかは、ラッパー プログラムによって異なります。Windows バッチ ファイル、*nix シェル スクリプト、C 実行可能ファイルなどです。それも呼んでいます。

于 2012-02-28T09:12:48.433 に答える
0

接続したら (sysadmin でなくても) データベースから必要な文字列を作成できます。

ばかげているように思えるかもしれませんが、任意のユーティリティから同じパラメーターをクエリすると、プログラミングに非常に長い時間がかかります。

SELECT
  USER
  ||'/******@'
  || sys_context('userenv','db_name') as simpleconnection
  ,'jdbc:oracle:thin:'
      ||USER
      ||'/******@'
      || sys_context('userenv', 'server_host') --host
      || ':'
      || sys_context('USERENV', 'SID') --port
      || ':'
      || sys_context('userenv','db_name') AS "Oracle Eight" --SID
  ,'jdbc:oracle:thin:'
      ||USER
      ||'/******@'
      ||sys_context('userenv', 'server_host') --host
      ||':'
      ||sys_context('USERENV', 'SID') --port
      ||'/'
      ||  sys_context('userenv','service_name') AS "host form"
  ,'jdbc:oracle:thin:'
      ||USER
      ||'/******@'
      ||sys_context('userenv', 'ip_address')  --ip
      ||':'
      ||sys_context('USERENV', 'SID') --port
      ||'/'
      ||  sys_context('userenv','service_name') AS "IP form"
  ,'jdbc:oracle:thin:'
      ||USER
      ||'/******@(description=(address=(host='
      ||sys_context('userenv', 'server_host')    --host
      ||')(protocol='
      ||sys_context('userenv', 'network_protocol')  --protocol
      ||')(port='
      ||sys_context('USERENV', 'SID')  --port
      ||'))(connect_data=(service_name='
      ||  sys_context('userenv','service_name')  --service name
      ||')(server='
      ||sys_context('userenv','host')  --name of the machine
      ||')))' AS "TNS form"
FROM dual d;

ところで、ログイン資格情報を接続文字列に入れることはお勧めできません。読みにくいため、パラメーターとして追加できます。

于 2015-11-12T19:01:05.287 に答える