最近のお仕事は、WindowsXP+IE6.0で動作している既存システムをWindows7+IE9.0の動作確認とそれに伴う不具合修正です。
OracleDBに接続している「既存システム」のテストをしていて、DBエラー?が一度発生すると2度目以降は動作しなくなってしまう現象があり、プログラムをデバッグしようとすると、昨日までは普通に繋がっていたORACLEへの接続にてエラーが出るようになってしまいました。
同僚に相談したところ、汎用データ リンク (.udl) ファイルをデスクトップ画面に作成(メモ帳で何も書かずに拡張子をudlで保存)してくれました。仮に「hoge.udl」とします。
これを使って、幾つかのOracleへの接続を試みたのですが、下記のエラーが出ました。
・Oracle Provider for OLE DB
プロバイダーの初期化中にエラーが発生したため、接続のテストに失敗しました。
・Microsoft OLE DB Provider for Oracle
プロバイダーの初期化中にエラーが発生したため、接続のテストに失敗しました。
ORA-01019:ユーザー側のメモリを割り当てできません。
・Microsoft OLE DB Provider for ODBC Drivers (Oracle ODBC ドライバ構成での接続テストは正常接続なのに下記エラー)
プロバイダーの初期化中にエラーが発生したため、接続のテストに失敗しました。
[Microsoft][ODBC Driver Manager] SQL_HANDLE_ENV でのドライバーの SQLAllocHandle は失敗しました。
このエラー情報を基に、グーグル先生に問い合わせみたわけです。
持った湯飲みをバッタと落とし小膝叩いてにっこりバグ取り
Oracleのエラー ORA-01019 が表示されるときの対応
おお、これはと思い、早速記事の内容を実行してみました。
記事の通り、ユーザーの切り替えでAdministratorでログインし直して、汎用データ リンク (.udl)でOracleへの接続を試みると繋がります。
再度、ユーザーでログインし直して、記事にあるように下記のポリシーの変更を行いました。
・gpedit.mscを実行して
コンピュータの構成→Windowsの設定→セキュリティの設定→ローカルポリシー→ユーザー権利の割り当て→「グローバルオブジェクトの作成」でエラーとなったユーザー(グループ)を追加します。
ところが、これでは解決しなかったのです。
SQL*Plusでも通常では繋がらず落ちてしまうようになり、SQL*Plusを右クリックしで[管理者として実行]する上では接続が正常に出来ます。他のDB接続ツールでも同様に管理者として実行すれば接続できました。
今度は、「ORA-01019 Windows7」でグーグル先生に問い合わせてみると、下記のサイトを見つけました。
Windows7 - Excel VBA - "ORA-01019 unable to allocate memory in the user side"
http://prasanth4microsoft.blogspot.jp/2010/11/windows7-excel-vba-ora-01019-unable-to.html
記事の1番目の方法「Change User Settings」を行いました。
コントロール パネル→すべてのコントロール パネル項目→ユーザー アカウント
ユーザー アカウントの制御の設定 「通知しない」に設定して再起動。
すると接続できるようになりました。
念のため、先ほどポリシーの変更で追加したユーザーを削除したのですが、それでも正常に接続できました。
ただ、セキュリティ的には推奨できないんだよね。
一応、下記サイトにコメントを追加しておきました。
Windows7にしたら開発環境があれこれつながらない件のまとめ
http://matome.naver.jp/odai/2134967785727223001