複数の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を変更するためにすべてのクライアントに触れることなく、別の場所を設定するにはどうすればよいですか?
[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)))
Host
とSERVICE_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解決は引き続き機能しますが、最初のファイル(Host
、SERVICE_NAME
)からです。
この方法では、基本的にIFILE
パラメータを使用してTNSエイリアスを含む複数のファイルを列挙しますが、これはこのために設計されたわけではありませんが、それは何かです。