Oracle Client 32bit / 64bit 共存環境の構築
こんにちは、サポート部の明石です。
私は日本コンピュータシステム(NCS)に転職というかたちで入社しましたが、前職では PowerBuilder を利用したアプリケーションの開発をしてきました。その際に良く使用していたデータベース、というよりもすべてのアプリケーションで Oracle データベースを使用していました。
そのような経緯があり NCS へ入社後も Oracle に関する問い合わせが来ると何となく気になってしまう私が 2019 年最後にご紹介するテクニカルブログは、PowerBuilder 2017 へマイグレーションを検討されているユーザー様から Oracle に関するちょっと気になる問い合わせがあり、検証も兼ねて確認しましたのでその内容を記事にしたいと思います。
2021/1/8 追記
ここにきて DB 移行でデータを簡単に移せる方法はないか?という問い合わせが増えています。気になる方はこちらの記事も併せてご確認ください! (PowerBuilder はこういった使い方もできるんですね)
データベースマイグレーション !? 異なる DB へのデータ転送
問い合わせ内容は ?
今回、ユーザー様からいただいた問い合わせは以下の内容になります。
データベースのバージョンアップに伴い旧バージョンで作成した PowerBuilder アプリケーションについてもマイグレーションを行う計画があります。 データベースは、Oracle 12C 64bit を利用する予定となっており PowerBuilder アプリケーションも順次 32bit から 64bit アプリケーションへと切り替える予定です。 ただし一度に全アプリケーションをマイグレーションすることができないので、マイグレーションが完了する間は同一端末内に 32bit と 64bit のアプリケーションが混在する時期が発生すると想定されます。その場合、Oracle Client も 32bit と 64bit の共存が必要となるが、PowerBuilder アプリケーションを共存させ各 Client を利用することは可能か。
確かに。32bit と 64bit PowerBuilder アプリケーションを共存させてそれぞれの Oracle Client を利用することは可能なのでしょうか ?
Oracle Client のインストール
まずはじめに、クライアント端末内に 32bit と 64bit の Oracle Client をインストールしてみましょう。
「そもそも Oracle Client が共存できるのか ?」という疑問があった私でしたが、Web で『 Oracle 32bit 64bit 共存 』といったワードで検索すると、インストールに関する情報が結構な数でヒットしますね。(いやいや、ホントに便利な時代になりました。
PowerBuilder アプリケーション以外でも、共存させたいユーザーは多いようですね。
注意点としては、Web にも記載がありますが 32bit と 64bit の共存にはインストール先を分ける必要がある みたいなのでその点は考慮が必要ですね。ちなみに、私は下記のような設定でインストールを行いました。
Oracle 12C の 32bit と 64bit をインストール後、tnsnames.ora を設定します。設定は、下記の通り 32bit と 64bit 両方とも同じ内容にしてみました。(上が 32bit、下が 64bit)
# tnsnames.ora Network Configuration File: C:\app\client\windows-x86\product\12.2.0\client_1\network\admin\tnsnames.ora # Generated by Oracle configuration tools. SUPPORT = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = NCS)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ) )
# tnsnames.ora Network Configuration File: C:\app\client\windows-x64\product\12.2.0\client_1\network\admin\tnsnames.ora # Generated by Oracle configuration tools. SUPPORT = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = NCS)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ) )
加えて、名前解決のため Windows フォルダ内にある hosts の設定もしてあります。
PowerBuilder サンプルアプリの作成
次に PowerBuilder のサンプルアプリを作成してみましょう。
内容はシンプルに。アプリケーションの Open 時に Oracle データベースに接続して Window を開きます。
// Profile support SQLCA.DBMS = "ORA Oracle" SQLCA.ServerName = "SUPPORT" SQLCA.LogId = "akashi" SQLCA.LogPass = "akashi" connect ; // 画面オープン Open(w_oracle)
オープンした Window のボタン押下時に sqlcode を返すプログラムとします。
Environment env // 環境を取得 GetEnvironment( env ) // SQLコードを表示 MessageBox(String(env.ProcessBitness) + "ビット",SQLCA.sqlcode)
早速、32bit、64bit 両方の Exe を作成して実行してみましょう。
うん、32bit、64bit どちらも動作して sqlcode も 0 なので正常に接続できたことが確認できました !
もちろんどちらか一方の Oracle Client のみがインストールされている場合は、インストールされていないアプリの sqlcode は -1 が返ってきて接続が行えません。
ここでもう一つ注意点。
32bit、64bit のランタイムファイルをランタイムインストーラーを使ってデフォルトのインストール先、すなわち [ C:\Program Files (x86)\Appeon\Shared\PowerBuilder\ ] にインストールすると dll が上書きされてしまうので、Oracle Client 同様にこちらもインストール先を分ける必要があります。
また、例えば 64bit ランタイムのインストール先を [ C:\Program Files\Appeon\Shared\PowerBuilder\ ] といった 64bit の Program Files に設定した場合も、 自動的に [ C:\Program Files (x86)\Appeon\Shared\PowerBuilder\ ] へインストールされてしまう のでこの点についても注意してください。
※ PowerBuilder 12.6 から同様の挙動となっています。
最後に
来年 2020 年になるとすぐに Windows 7 と Windows Server 2008 のサポートが終了します。ビジネスシーンでは、Windows 10 64bit 端末への切り替えに伴い、今回お問い合わせをいただいたユーザー様のように 32bit アプリケーションから 64bit アプリケーションへの移行も検討されることも増えるかと思います。
また、PowerServer Web アプリ開発時の環境として PowerBuilder IDE と PowerServer (PB Edition を含む) を 64bit OS の同一環境で共存させる場合、PowerBuilder IDE は 32bit の Oracle Client、PowerServer はデフォルトでは OS に併せて動作しますので 64bit の Oracle Client が使用されるので、両方の Client がインストールしてあればそのまま開発や検証も可能なので便利ですね。
今後、PowerBuilder ユーザー様の中で同様の疑問が発生した場合の参考となれば幸いです。
以上、明石でした。