web-dev-qa-db-ja.com

TNS_ADMIN / TNSNAMESロケーションのフェイルオーバー

複数のtnsnames.oraの場所を定義する方法はありますか?現在、TNS_ADMIN=\\192.168.1.100\infosys\Oracle\tnsnamesのようなサーバーパスを使用していますが、今週、そのサーバーを数日間オフラインにする必要がありました。

PATH変数のような場所を積み重ねてみましたが、機能しません。

> set TNS_ADMIN=z:\Common\Oracle;\\192.168.1.100\infosys\Oracle\tnsnames
> mctnsping ora-server

McTnsping Utility by Michel Cadot: Version 2018.08.17 on 18-OCT-2018 11:16:33
Copyright (c) Michel Cadot, 2016-2018. All rights reserved.

*** TNS-03514: Failed to find tnsnames.ora file

単一の場所で結構です:

> set TNS_ADMIN=Z:\Common\Oracle
> mctnsping ora-server

Used parameter files:
Z:\Common\Oracle\tnsnames.ora
...snip...    
Attempting to contact ora-server:1521
OK (201 msec)

TNS_ADMINを変更するためにすべてのクライアントに触れることなく、別の場所を設定するにはどうすればよいですか?

1
matt wilkie
[Oracle@o71 ~]$ echo "TNS1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(Host=o71.balazs.vm)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=TNS1)))" > ~/tnsnames1.ora
[Oracle@o71 ~]$ echo "TNS1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(Host=o72.balazs.vm)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=TNS2)))" > ~/tnsnames2.ora
[Oracle@o71 ~]$ cat tnsnames1.ora
TNS1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(Host=o71.balazs.vm)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=TNS1)))
[Oracle@o71 ~]$ cat tnsnames2.ora
TNS1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(Host=o72.balazs.vm)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=TNS2)))

HostSERVICE_NAMEの値を変更して、ファイルの1つをアクセス不能にした後も名前解決がどのように機能するかを示しました。

IFILEを含めます:

[Oracle@o71 ~]$ echo -e "IFILE=/home/Oracle/tnsnames1.ora\nIFILE=/home/Oracle/tnsnames2.ora" > ~/tnsnames.ora
[Oracle@o71 ~]$ cat ~/tnsnames.ora
IFILE=/home/Oracle/tnsnames1.ora
IFILE=/home/Oracle/tnsnames2.ora
[Oracle@o71 ~]$ export TNS_ADMIN=/home/Oracle

テスト:

[Oracle@o71 ~]$ tnsping tns1

TNS Ping Utility for Linux: Version 18.0.0.0.0 - Production on 18-OCT-2018 21:37:00

Copyright (c) 1997, 2018, Oracle.  All rights reserved.

Used parameter files:


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(Host=o72.balazs.vm)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=TNS2)))
OK (10 msec)

tnspingは、同じTNSエイリアスの最後の出現をピックアップしました。次に、この2番目のファイルにアクセスできないようにします。

[Oracle@o71 ~]$ mv /home/Oracle/tnsnames2.ora /home/Oracle/tnsnames2.ora.corrupt

もう一度テストします。

[Oracle@o71 ~]$ tnsping tns1

TNS Ping Utility for Linux: Version 18.0.0.0.0 - Production on 18-OCT-2018 21:37:19

Copyright (c) 1997, 2018, Oracle.  All rights reserved.

Used parameter files:


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(Host=o71.balazs.vm)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=TNS1)))
OK (0 msec)

TNS解決は引き続き機能しますが、最初のファイル(HostSERVICE_NAME)からです。

この方法では、基本的にIFILEパラメータを使用してTNSエイリアスを含む複数のファイルを列挙しますが、これはこのために設計されたわけではありませんが、それは何かです。

3
Balazs Papp