Rails アプリでリモート データベースを使用しようとしています。これを達成するために、次の指示に従って ruby-oci8 を使用しています: http://www.pixellatedvisions.com/2009/03/26/rails-on-oracle-part-2-setting-up-rails-to-connect-オラクルデータベースへ
sqlplus 経由でリモート データベースに接続するパート 1 には問題はありませんが、oci8 を使用しようとすると、次のようになります。
ruby -r oci8 -e "OCI8.new('user', 'pass', 'host_ip:port/sid').exec('SELECT * FROM table') {|r| puts ' | ' r.join}"
私は得る:
oci8.c:267:in oci8lib_191.so: ORA-06401: NETCMN: invalid driver designator (OCIError)
from -e:1:in `new'
from -e:1:in `<main>'
このエラーをグーグルで調べて、このhttp://www.dba-oracle.com/t_ora_06401_netcmn_invalid_driver_designator.htmを読みましたが、私の場合はまったく役に立ちません。また、TNSNAMES.ORAファイルが必要だと読んだのですが、そうではありません...なので、運が悪いので作成しました。
ところで、私は ruby-oci8-2.0.6-x86-mingw32.gem (私は Windows にいるため)、ruby 1.9.3 および rails 3.2.3 を使用しています。
どんな手掛かり?
編集
もう少しグーグルで見つけた:
- 問題の説明: 一部のデータベースでヘルス チェックを実行できません。エラー「ORA-06401: NETCMN: 無効なドライバー指定子」とヘルス チェックを取得すると、「接続失敗 (1)」というメモが表示されます。Toad の接続ウィンドウからこのデータベースに直接接続しても問題はありません。
- 原因: 9i クライアントで直接接続を使用し、ヘルス チェックで直接接続データベースを選択することに固有の問題です。
- 解決策: 解決策 1: 別の方法を使用して接続し、直接ではなく TNS として接続することを選択します。この場合、9i クライアントを使用できます。解決策 2: 別のクライアントを使用して接続し、直接接続を使用する必要がある場合は、10g または 11g クライアントにアップグレードします。