今度作成するプログラムで、SQLServerにある某マスタデータを参照してOracle上の某マスタに登録・更新する機能があり、仕様設計者からOracle上からSQLServerのデータを参照することが出来るのか調査して欲しいとの依頼があり、DBLinkを使えば出来そうだと参考サイトを印刷して渡しました。
DBLINKでSQLSERVER接続
http://sqlmemo.seesaa.net/article/12208628.html
数日後、印刷したサイトなどを参考にしたが、「TNSリスナーがありません」とエラーが出て接続できなかったとのことで、私が引き継いで調査することになりました。
「ORA-12541: TNS: リスナーがありません。」
私もこれにはまりましたね、数時間格闘した結果、ふとひらめいたんです。
tnsnames.oraで、HOST名を指定しているところに、別端末のSQLServerの
IPアドレスが書かれていました。
SQLServerに接続するんだから、これでいいと思い込んでたんですね(T-T)
でも、ODBC接続でSQLServerに接続しているのだから、このHOST名はOracleのままにしておけばいいのではないかと、まさに正解でした(^-^)
やっとこさ、リスナーエラーから解放されて、接続できるかと思いきや次のエラーが発生しました(^-^;;
「ORA-28500:NT AUTHORITY\ANONYMOUS LOGINはログインできませんでした。」
ODBC接続にて、SQL ServerへはWindows認証で設定されていたので、ユーザーを作成すればいいかもと、SQL Serverでユーザーを作成して、SQLServer認証に切り替えたところ、DBLinkでSQL Serverに接続することが出来ました。
接続出来たことを報告すると、ユーザーを作成しないで出来ないかとのことで再調査しました。
SI Object Browser上でDBLinkを作成するとユーザー名の「SA」と英大文字に自動変換されてしまう。これが接続できない理由ではないかと思い、そこでソースにて、""(2重引用符)で囲むことで英小文字"sa"のままとなるとの情報をみつけ、ユーザー名とパスワードをそれぞれ""で囲んでみたところ、接続することが出来ました。(= ̄▽ ̄=)V やったね!
参考サイト
DBLINKでSQLSERVER接続
http://sqlmemo.seesaa.net/article/12208628.html
Generic Connectivity
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/
server.102/B19223-01/gencon.htm
Excel‐Oracle連携 Oracle Generic Connectivityを使用する方法
http://www.atmarkit.co.jp/fdb/rensai/excel2oracle01/excel2oracle01_3.html