2013年2月21日木曜日

Windows8(64bit)のAccessからOracleにODBCで接続ができない

以外にはまったのでメモ。


現象
Oracle 9iが稼働しているサーバに対してWindows8(64bit)端末からAccess2007経由で
ODBC接続が行えない。


エラー内容
ODBC--呼び出しが失敗しました。
[Oracle][ODBC][Ora]ORA-12154: TNS: 指定された接続識別子を解決できませんでした。
(#12154)[Microsoft][ODBC Driver Manager] ドライバーのSQLSetConnectAttrは失敗しました。(#0)[Microsoft][ODBC Driver Manager] ドライバーのSQLSetConnectAttrは失敗しました。(#0)


試行錯誤
・根本的にODBCの設定がまちがってるんじゃね?
 ⇒64bitの場合、ODBCデータソースの作成は32bit、64bitで別になります。
  Windows8の場合だと、コントロールパネルの管理ツールに2種類あります。
  今回使用するのは32bit版です。
  ここから設定を行いましたが、ODBCの設定、テストは問題なく行えました。
  Access2007からは、上記のODBC設定を呼び出しているので、設定ミスはありません。

・OracleのODBCドライバ最新じゃないからじゃね?
 ⇒最新を入れても駄目でした。

・Oracleを複数インストールしてわけがわからなくなったんじゃね?
 ⇒たしかにOracle9i、10g、11gのクライアントをすべて突っ込んでました。
  9iのクライアントはインストールに失敗(途中で処理が止まる)してました。
  しかし、9iはレジストリ、ファイルはしっかり削除を行い、10gと11gはしっかり
  住み分けできてるようなので原因ではなさそうでした。

と、ここまではおかしいところは見つかりませんでした。
何より、ODBC単体だと動作し、Access2007を通すと動かない、というのが腑に落ちませんでした。
次に試したのが結果的に原因、対策でした。


原因・対策
ODBC接続の設定には「括弧」などの記号が入ってはいけない、みたいのをどこかで
見たことがあります。
Windowsの64bitは、32bitのアプリケーションをインストールすると、「Program Files(x86)」に
入ります。正式に64bit版が存在しないOffice 2007も例外ではありません。
この括弧があやしいんじゃないか、と思い、試しにシンボリックリンクを作成、そこから実行
してみました。

シンボリックリンクの作成(コマンドプロンプトから管理者として実行)
mklink /d "C:\Program Files x86\Microsoft Office\Office12" "C:\Program Files(x86)\Microsoft Office\Office12"

正常に動作しました。原因は「括弧」のようです。

64bitWindoiwsの32bitアプリケーションのインストール先は、有無を言わさず上述している
フォルダになります。Officeのインストール時にインストール先を変更しても、
やはり仕様上、上述フォルダにいくようです。
もしかするともっとうまい解決策があるかもしれませんが、私はこの方法で回避できました。


まとめ
32bitのOffice(バージョン問わず)を64bitWindowsにインストールし、
ODBC接続でAccessからOracleに接続するとエラーとなる。
原因はOfficeのインストールパスであり、シンボリックリンクにより、
パスに記号が含まれないパスからAccessを実行することで回避可能。

やっぱりWindows8と64bitをまとめてテストするとどこに原因があるか判断しづらい……


※今回はこれが原因だったというだけで、すべてのエラーの解決を保証するものではありません。








5 件のコメント:

  1. シンボリックリンクの情報、助かりました。ありがとうございます!!
    当方はOracle8、access2013、windows7 64bitです。

    返信削除
  2. 当方、ORACLE10G ACESS2007 windows8.1 64bitです。シンボリックリンクの作成(コマンドプロンプトから管理者として実行)を行うと、「指定されたパスが見つかりません」となってしまいます。
    対処方法が分かりましたらご教授下さい

    返信削除
  3. コマンドの意味を理解されてないようですので、1度調べてみることをお勧めします。
    AccessがDドライブなど、デフォルト以外の場所にインストールされていると発生するエラーかと思いますので、インストール先に合わせて変更してみてください。

    返信削除
  4. Oracle10g Access2007 Windows7 64bit環境
    ODBC? Oracle Client? 途方にくれていたところ、シンボリックで解決しました。
    ありがとうございました。

    返信削除
  5. Oracle9+Windows7 64bit、Oracle11+Windows7 64bit環境にて
    VBAでのADO接続(OraOLEDB,MSDADO)でも同様の現象でエラー有りました。
    Program Files(x86)下のExcel.exeがあるパスに対してシンボリックでショートカットを作り、そこからExcelを起動すれば解決しました。大変助かりました。素晴らしい。

    返信削除