none
SSISでOracleからデータ取得 RRS feed

  • 質問

  • はじめまして。

    SQL 2005 ServerのSSISを使って、Oracle10gのサーバーからデータを取得する場合、SQL Serverをインストールされている環境にOracle Clientをインストールする必要はありますか。

    当方、Oracleを使ったことがないのですが、やむなくデータを取得する必要性が生じたため、色々調べた結果、SSISを使えば取得できそうだと思っています。

    何か勘違いしているようであればすいません。ご存知の方、ご教示いただけないでしょうか。

    2007年2月21日 12:43

回答

  • yakkenさん

    ご丁寧な回答ありがとうございます。
    ご教示いただいたとおり、レジストリに32bit用の記述をし、Oracle Instant Clientの64bit、32bit両方別々のドライバパスを設定しました。
    また、Path環境変数も、""で括るものと、括らないものを記述し、VS起動時は、「Progra~2」で起動したところ、
    見事にODBCのシステムDSNを読み込んだ上に接続も確立できました。本当にありがとうございます。
    あとはSSISを色々触ってOracleからデータ取得を試してみようと思います。助かりました。

    2007年3月14日 13:07

すべての返信

  • MS 製ミドルウェアを使おうとしても、Oracle Client が必要です。
    ODBC/OLE DB などで取得するときに。

    SSIS でもできますし、リンクサーバで直接対象の Oracle 10g に接続させることも可能です。

    2007年2月21日 13:38
  • おがわみつぎ さん

    返信ありがとうございます。
    通常、Oracle ClientをインストールするとODBCのドライバがインストールされると思っていたのですが、データソースの中にドライバとして何も入ってきません。

    これは、OSがW2K3 Std x64だからでしょうか。通常はデータソースに追加されますか。

    2007年2月22日 2:41
  • ODP.NET をダウンロードされたのでしょう。
    これは .NET Framework 用のミドルウェアです。
    ODBC はまた別にありますので、OTN からダウンロードしてください。
    ただ x64 に対応しているかはわかりません。
    2007年2月22日 3:14
  • いえ、ODP.NETはx64に対応していないので、DLしておりません。
    ODBCをDLし、OracleClientの次にインストールしてみました。

    しかし、データソースには入っていません。

    2007年2月22日 4:32
  • たぶん対応していないのでしょう。
    OTN で質問してみてはいかがでしょうか?
    #x64 って苦労しますよねぇ。。。
    2007年2月22日 4:59
  • こんにちは、当方も同様な状況に遭遇しましたが、今現在取得できておりますので、何かご参考になればと思います。

    環境:OS:Win2K3 R2 x64 Std. + SQL Server 2005 Std. x64 SP2 + Oracleクライアント10.2.0.1 x64

    1.x64対応のOracleクライアントをインストールします。x64のOracleクライアントはODBCかOLEDBのサポートしかありません。必要ならばNet managerでOracleへの接続設定(サービス名)を作成します。

    2.ODBCの場合は、データソースを作成します。1でODBCドライバをインストールしてあれば、ODBCアドミニストレータにインストール済みのドライバとして表示されると思います。

    3.システム環境変数「path」中の「SQL Serverインストール先(多分C:\Program Filesだと思います)\Microsoft SQL Server\...」等のパスを""で括ります。当方の環境では、path変数中に2箇所ありました。この設定がないと、Oracleクライアントがサービス名を解決できないとのエラーが発生します。

    4.コンピュータを再起動し、変更した環境変数を適用します。

    当方環境では、ここまでの設定で動作しております。

     

    以下補足です。

    ・3で環境変数を変更すると、ActiveXスクリプティングタスクを含むSSISパッケージが、SQL Server エージェントのジョブに設定すると実行エラーになります。この場合は、ジョブ側をSSISパッケージではなくCmdExecにして32bit版のDTExec.exeを呼んであげる必要がありました。(この件は、""で括ったパスと括らない元のパスを両方を用意すれば回避できることがわかりました)

    ・同じコンピュータ上でVS2005を使ってSSISパッケージを作成する場合には、1より前に32bit版Oracleクライアントをインストールする必要があります。またODBCのデータソースの設定は、64bit用と同じデータソース名を32bit用に別に用意する必要があります(当方は、レジストリに直接書きました)。またVS2005は32bitで動作するため、3の手順でpath環境変数中「Program Files (x86)」となっている箇所を、手順と同様に""で括る必要があります。(もう一手順足りませんでした。VS2005を起動するとき、コマンドプロンプトからC:\Program Files (x86)の部分をC:\Progra~2にして、かつ""で括って起動する必要があります。)

    2007年3月5日 9:01
  • Yakkenさん

    コメントありがとうございます。
    やはり、x64対応のOracleClientが必要ですかね・・・。

    いま、InstantClientのx64版とやらを発見したので、それを設定し、PATH環境変数の設定、ODBCドライバのインストール、データソースの定義まで完了したのですが、
    SQL ServerのSSISでそのデータソースを読み込んで接続テストを実行すると、エラーが表示されます。
     ※なぜかシステムDSNだと読み込まないので、ユーザーDSNで定義

     プロバイダの初期化中にエラーが発生したため接続テストに失敗しました。ERROR[IM002]
     [Microsoft][ODBC Driver Manager]データソース名および指定されたドライバが見つかりません。

    これさえ乗り越えられれば、何とかなりそうな気がしてます。。。
    ちなみに、OracleClientはインストールしておらず、所有しているのは32ビット版しかありません。

    関係ないと思いましたが、環境変数の"でくくるのも試してみましたが、変わりませんでした。
    どなたか情報ございませんか。

    2007年3月7日 3:09
  • x64での開発(運用ではありません)は、32bit環境と64bit環境を用意する必要があるようです。

    まずデータソースの件ですが、

    VS2005は32bitですので、32bitのOracleクライアントを用意する必要があります。ODBCでの接続の場合は、データソースを作成していると思いますが、システムデータソースの場合、ODBCアドミニストレータが64bitのため、32bit用のデータソースを作成できません。この場合は、レジストリに直接データソースを書き込む必要があります。

    64bitの場合は、「HKLM\Software\ODBC\ODBC.INI」にデータソースの設定がありますが、32bitの場合は「HKLM\Software\Wow6432Node\ODBC\ODBC.INI」になります。一旦64bitでデータソースを作成してみて、同じ内容をWow6432Node\ODBC\ODBC.INIに設定すれば、VS2005上からシステムデータソースが見えるようになります。このとき64bitと32bitでOracleHomeが違うと思うので、そこだけは書き換えてください。

    エラーが発生する件ですが、

    これはOracleのバグだそうで、パス中にスペースがあるとNG(今回はC:\Program Files (x86))という類のものです。自分の投稿で""で環境変数を括るとあったのは、これを回避することを指しています。開発時にはこれだけでは不十分で、VS2005を起動するときにも先のバグ生じるので、コマンドプロンプトから
    (""を含みます)"C:\Progra~2\Microsoft Visual Studio 8\Common7\IDE\devenv.exe"
    と打ち込んで起動すれば、回避できると思います。

    64bitのOracleクライアントですが、

    パッケージをテストするには必要です。今エラーになっている箇所は、デザイナー上でのデザイン時だけのことですので、64bit版なしでは、実行したとたんエラーになると思います。

    2007年3月8日 6:20
  • yakkenさん

    ご丁寧な回答ありがとうございます。
    ご教示いただいたとおり、レジストリに32bit用の記述をし、Oracle Instant Clientの64bit、32bit両方別々のドライバパスを設定しました。
    また、Path環境変数も、""で括るものと、括らないものを記述し、VS起動時は、「Progra~2」で起動したところ、
    見事にODBCのシステムDSNを読み込んだ上に接続も確立できました。本当にありがとうございます。
    あとはSSISを色々触ってOracleからデータ取得を試してみようと思います。助かりました。

    2007年3月14日 13:07