none
SQL Server 2005でOracle XE 11gにリンクサーバーを貼って、データを見たいのですがやり方を教えていただけませんか。 RRS feed

  • 質問

  • クライアントPC内での話です。

    SQL Server2005とOracle XE 11gがインストールされています。

    OracleXE11gはインストールしたばかりで、SQL Developerにて接続名を「oracle_system」から「con_A」に変更し、

    1つだけテーブル「TABLE_A」を追加しました。

    SQL Plusでの確認では、connect / as sysdba でコネクトした場合は、select * from TABLE_A; でSelectできませんが、

    connect system でパスワードを入力してコネクトした場合は、select * from TABLE_A; でSelectすることができました。

    --

    この状態でSQL Server 2005からリンクサーバーでOracle XE 11gに接続し、TABLE_Aの内容をSelectするには

    どのようにしたらよいのでしょうか。

    --

    現在までにやったこととしては、Management Studioの新しいリンクサーバーの作成で、以下のようにリンクサーバーを作成しました。

    **

    リンクサーバー:ORALE_LINK

    プロバイダ:Microsoft OLE DB Provider for Oracle

    製品名:Oracle

    データソース:(空白)

    プロバイダ文字列:(空白)

    セキュリティ:このセキュリティコンテキストを使用する

    - リモートログイン:SYSTEM

    - パスワード:(SYSTEMのパスワード)

    **

    ここで、作成されたリンクサーバーのORACLE_LINKを開いてCatalogsの中身を確認しても、「con_A」は存在しておらず、

    「System Catalogs」と「default」という2つの要素があるだけです。(その中にも「con_A」はいません。)

    ゴールとしてはManagement Studioで以下のようなイメージのクエリが実行できればオッケーです。

    select * from ORACLE_LINK.con_A.TABLE_A

    --

    初歩的な質問を長々と説明して申し訳ございませんが、方法を教えていただければ幸いです。

    よろしくお願いいたします。

    2012年11月26日 3:19

回答

  • OpenQueryを使う方法を忘れていました。

    その他にもOpenRowSetを使う方法もあり、いずれもT-SQLでサポートされている使い方で、特殊というわけではありませんので、問題になることはないかと。

    • 回答の候補に設定 佐伯玲 2012年11月28日 6:28
    • 回答としてマーク 佐伯玲 2012年12月4日 4:49
    2012年11月28日 3:45

すべての返信

  • システムストアドプロシージャである、sp_addlinkedserver を使ってリンクサーバーを設定します。
    簡単にOracleの環境を作ることができないため、とりあえずサポートページのリンクを貼っておきますね。

    http://msdn.microsoft.com/ja-jp/library/ms190479(v=sql.90).aspx

    2012年11月26日 8:16
  • CatTailさんありがとうございます。

    sp_addlinkedserver コマンドからも実行してみたのですが、違いがよくわかりませんでした。。。

    知識が少なくて申し訳ございません。

    --

    進展としては、以下のコマンドを打つことで、TABLE_Aが存在するということは確認できました。sp_tables_ex  @table_server=ORACLE_LINK, @table_schema='SYSTEM'

    --

    そこで以下のようにクエリを作成したところ、エラーが発生しております。

    select * from ORACLE_LINK.con_A.SYSTEM.TABLE_A

    **

    メッセージ 7312、レベル 16、状態 1、行 1
    リンク サーバー "ORACLE_LINK" の OLE DB プロバイダ "MSDAORA" のスキーマまたはカタログを使用できません。4 部構成の名前が指定されましたが、このプロバイダではカタログまたはスキーマを使用するのに必要なインターフェイスが公開されていません。

    **

    区切りが4つがよくないのかと思い、以下のようにもクエリを指定してみました。

    select * from ORACLE_LINK.con_A.TABLE_A

    **

    メッセージ 208、レベル 16、状態 1、行 1
    オブジェクト名 'ORA_LINK.oracle_system.MST製品' が無効です。

    **

    すると上記エラーとなります。

    何か助言をいただければ幸いです。

    よろしくお願いいたします。

    2012年11月26日 10:14
  • よくわからないまま以下のクエリを実行したら、なんとなく取得できてしまいました。

    select * from OpenQuery([ORACLE_LINK], 'select * from TABLE_A')

    この取得方法は一般的なのでしょうか。

    取得結果としては問題ないのですが、特殊な方法だとすると今後に影響が出そうなので確認になります。

    2012年11月26日 10:22
  • OpenQueryを使う方法を忘れていました。

    その他にもOpenRowSetを使う方法もあり、いずれもT-SQLでサポートされている使い方で、特殊というわけではありませんので、問題になることはないかと。

    • 回答の候補に設定 佐伯玲 2012年11月28日 6:28
    • 回答としてマーク 佐伯玲 2012年12月4日 4:49
    2012年11月28日 3:45
  • こんにちは、LOAIVEYU さん
    フォーラムオペレータの佐伯 玲 です。

    その後の状況はいかがでしょうか?
    参考になりそうな情報だと思われたので勝手ながら私のほうで「回答としてマーク」とさせて頂きました。

    宜しくお願いいたします。
    __________________________
    日本マイクロソフト株式会社 フォーラム オペレータ 佐伯 玲

    2012年12月4日 4:50