Windows10からOracle接続 | エド金融道 (息子が「めしが食える大人になる」編)

Windows10からOracle接続

Windows10(64Bit)環境からのOracleDBへの接続の手順の備忘

Oracleクライアントのインストールだけでも、めっちゃハマる・・・【POINT】がハマりポイントを示す。

 

色々な概念の理解が必要。

Oracleはご存知の通りデータベース。

 

【オラクルデータベース(サーバー)】 ― 通信 ― 

 ― 【オラクル クライアント】 ― SQL問合せ ― 

   ― 【アプリ(AccessとかPHPとか)】

 

簡単に描くと上記のようなDB本体があるサーバーに対して、クライアントが、問合せ(通信)をしている。

多くの会社では、この本体のサーバーはシステム部門が管理していて、そこに通信をするための情報が開示されており、その情報を使ってクライアントからDBサーバーへ接続する。さらに、Accessとか、PHPなどのプログラムやアプリは、このオラクルクライアントを使って、DB問合せ言語SQLで、問合せをする。

 

このクライアントには、2つある。

 

①Oracle Client

②Oracle Instant Client

上記の2は大きく違う。①はインストールするが、②は圧縮ファイルをダウンロードして解凍してそのまま使う。

①の方が、自動でいろいろ設定してくれるようだが・・・問題点がある。

【POINT】ダウンロード先が分かりづらい

このページはDB本体。自分のパソコン環境のところでノートの「See All」からリンクした先ページにクライアントが置いてある。

・過去のバージョンは簡単にダウンロードできない。

上記ページの一番したに注意書きがあるが、OracleDBのライセンスを持っている人がサポートページから手順を踏むと入手できるらしい。

【POINT】インストールが進まない。

検索すると出てくるが、Windows10とかでインストールが「マウスがぐるぐる」の状態で進まない。一見、考え中のようだが、どんだけ待ってもインストールは進まないので注意が必要。

【POINT】インストールファイルには、xxx_home.zipとxxx.zipの2つがある。

この2つの違いは良くわからない・・・

【POINT】そのまま解凍するとエラーがでる。

ダウンロードできる圧縮ファイル名が長いので、デフォルトでそのまま解凍する解凍フォルダ名が長すぎて、解凍の途中でエラーになる。適当に「ora」とか短いファイル名にする必要がある。

 

以上のように、色々調べたが、①のインストールは相当難しい・・・私は諦めた。

なぜなら・・・①と②の違いとしては、①では、いろいろな開発ツールも入ってくる。純粋にOracleデータベースにクライアントから接続すれば良いのであれば、②のinstant clientで十分なようだ。

②のダウンロードは以下。

こちらは、過去のバージョンも使える。使うアプリケーションとかにより、安定稼働するバージョンも選べる。

【POINT】

32bit版なのか64bit版なのかだが・・・クライアントをインストールする端末なのか、相手のサーバーなのか良くわからない。

クライアント側が64Bit Windows10だが、32Bit版を今回入れた。どうやら、サーバー側が32Bitなのか?システム担当者が先に入れた別の端末が32版だったので、その事例に習った。64Bitで良いきがするが・・・

 

▼以下②Oracle Instant Client の設定

ここから環境を選択して、必要なバージョンのOracle Instant Clientをダウンロードして、適当なフォルダに解凍。

【POINT】さらに、同じバージョンのInstant Client ODBCパッケージをダウンロードして、それを、上記のoracle instant clientのフォルダの中に入れる。その上で、odbc_install.exeを実行。ウィンドが出るが、「互換・・・」の方を選んで無理やりインストール。

このインストールの説明は上記。

 

【環境変数の設定】

環境変数の設定方法はググって。

システム環境変数側の新規追加で

NLS_LANG = Japanese_Japan.JA16EUCTILDE

OCI_LIB64 = 【oracle instant clientの場所 例:c:\instantclient12_2 とか】

ORACLE_HOME = 【適当にフォルダを作り、その場所を指定する。】

TNS_ADMIN = 【TNSNAMES.ORAのファイルを置いたフォルダ】

 

【POINT】

ORACLEサーバーへの接続は

①IPアドレスとポートを指定して接続

②TNS_NAMEというのを定義。それが、TNS_NAMES.ORAというファイルに記載する。その名前を使って接続。

の2つの方法がある。②の場合は、環境変数のTNS_ADMINの設定が必須

ここにその説明がある。

 

▼ODBC Data Source でWindowsアプリ用のドライバーを登録する。

Windows 10のスタートメニューの検索で「odbc」と入れると表示される、ODBC Data Sourceを起動。

32Bitと64Bitがある。インストールした方を選ぶ。

「システムDSN」を選んで、「追加」のボタン。

ODBCパッケージのインストールがうまくいっていれば、この中に「Oracle Instant Client XX」※XXはバージョンが、表示されるのでそれを選択する。そしたら、接続設定になるので、TNS_NAMEとかログインIDとか入れたら、TestConnectionして、パスワード入れる。

Successとなったら、見事にサーバー接続完了!

これで、このODBC接続を使って、ACCESSで、OracleDBへの接続はできるはず。

 

Windwos環境でのPHPからのOracle接続にはさらにひと手間。

【POINT】

WINDOWSアプリ(ACCESS)からOracle Instant Clientを利用する場合は、上記のフォルダのDLL(ダイナミックリンクライブラリー)が使われる。一方で、PHPの場合は違うようだ。

環境変数のパスの設定で優先されて、順番(Path設定の上にある。その上で、設定されたPathのサブフォルダという順?)で、DLLを探すみたいだ。問題は・・・

このDLLと、PHPが、32BITなのか、64BITなのかで一致している必要がある。

PHPの32OR64に調べ方は

<?php
echo PHP_INT_SIZE;
?>
のPHPスクリプトで分かる。これが4なら、32Bit、8なら64Bitとなる。
64BitのPHPなら、Oracle Instant Clientも64の方を使う。上記の例では、Windows10環境には、32Bit版のOracleInstantClientを入れた。
下記、前の記事のPHPでのOracle PDO接続の方法は正しいが、今回のWindowsに入れたOracleInstantClientを使うとハマる。
PHPでUnable to load dynamic library 'oci8_12c' ApacheのErrorログに出ていれば、PHPとDLLのバージョンの不一致によると考えられる。

 

解決方法は、

①PHPのバージョンを調べる

②PHPと同じバージョン(32 OR 64)のOracle Instant Clientをダウンロードして適当に解凍。

③PHPフォルダの直下(ここが一番優先されるみたい)に、上記のフォルダで、.dllとなっているものをすべて打ち込む。

④php.iniのファイルを修正(下記、記事を参考)

⑤Apacheの再起動

⑥phpinfo()で確認して、「PDO_OCI」と言う項目ができて、enableとなっていれば完璧。

 

 

上記を参考に。

 

うーん・・・なかなか、大変だった。