Windows10 ver1803にアップデートしたら.NETアプリでTNSプロトコル・アダプタ・エラーが発生する
むちゃくちゃハマったやつ書いておきます。
Windows10 ver1803にアップデートしたらWindows Server 2003上に置いてたexeを実行したときにORA-12560: TNS: プロトコル・アダプタ・エラーが出るようになった件です。
たぶん同じような状況の人いるはず。
※2019年3月現在、さらにUpdate出てきてもう発生してないかもしません。
環境
- サーバ:Windows Server 2003
- Oracle Database 10g Release 10.2.0.1.0 - Production
- クライアント:Windows 10 ver 1803 (64bit)
- Oracle Client 11.2.0.3.0 Production
Windows Serverに置いてあるexeをクライアント端末から実行して、
exeからOracle.DataAccess.dllをバインドしてOracleデータベースとやり取りという構成になっています。
exeが置いてあるサーバにOracle Databaseがインストールされています。
Table of Contents
Toggle1.起きたこと
Windows10 ver1803にアップデートしたクライアント端末から
サーバ上のexeを実行すると、ORA-12560: TNS: プロトコル・アダプタ・エラーが発生する。
2.何が原因かわからないので色々試してみる
まぁとりあえずなんやねんこれということで、「ORA-12560: TNS: プロトコル・アダプタ・エラー」でググってみると
ORA-12560: TNS: プロトコル・アダプタ・エラーが発生しました
この ORA-12560: 〜エラーは、一般的にプロトコル・アダプタ・エラーというより準備・設定エラーとした方が良いのではないかと思うくらいに多くの場合はケアレスミスによるものであることが多い。
ってさ。
いやいやいやいや、昨日までちゃんと動いてたやん、と思った。
とりあえず、いくつか試してみる。
設定が間違っていないかどうか確認
間違ってない。
SQLPlusで接続
できる。えっ!?できんのかよ。
exeをローカルにコピーして実行
エラーが出ない。混乱した。ぶっちゃけこれでもいける。けど、アプリ更新時どうするかを考えないといけない。
うーん、よくわからない。
3.結局原因はSMB1だった
なんかもうサーバ上のexeをローカルにコピーして最新のを取ってくるvbsとか作って対処しようかと思ってたけど、ついに解決策が見つかった。
[RS4:1803]Windows 10 1803 won't run ODBC SQL connected application from network
SOLUTION:
I Solved the Problem by activating SMB2 on Windows 2008 R2 Server where the netshare is located.
If SMB2 is not activated, the Clients uses SMB 1.5 and its not possible to connect the Oracle-Database and run our application when Windows Update 1803 is installed.
After activating SMB 2 on the Windows 2008 R2 Server, i check the used SMB Version on the Win 10 -client by Powershell ( get-smbconnection). It shows now SMB2.1 and our Application is running.
どうやら、SMB1.Xプロトコルで共有されているexeをWindows10 ver1803から実行すると、何かが制限されていてOracle Data Accessがうまく動かないっぽい。
SMB2以上を使うSambaサーバを立ててexeを実行
ということで、試しにCentOS6.9でSambaをインストールしたサーバを立てて、そこにexeを置いてみた。
min protocol = smb2は忘れずに。
すると、エラーでなくなった!!
なので、アプリのリリース先をこの新しいサーバにして、今回は解決できました。
4.まとめ
SMB1の何がダメでOracleのデータアクセスをブロックしてるかなど、Windows10 ver1803の仕様の詳細までは調べてないですが、
とにかくSMB1プロトコルを使ったファイル共有をされているexeに対して制限が掛けられてるのは間違いなさそう。
事前にアナウンスしろよ。
まぁ、2007年に作ったアプリケーションをいつまでも使うなってことですよね・・。
今回は以上です。