Oracle Provider for OLE DB

Oracle Provider for OLE DB (8.1.7.3.0) を使用すると、Oracle データベースのデータに分散クエリを実行できます。Oracle Provider for OLE DB のサポート状況は次のとおりです。

Oracle 32 ビット

アウト プロセスのみ

Oracle 64 ビット

なし

Oracle データベース インスタンスにアクセスするリンク サーバーを作成するには

  1. Microsoft SQL Server を実行しているサーバー上の Oracle クライアント ソフトウェアが、プロバイダから要求されるレベルを満たしていることを確認します。Oracle Provider for OLE DB (8.1.7.3.0) には Oracle Client 8.1.7.0 が必要です。

  2. SQL Server を実行しているサーバーで Oracle データベース インスタンスを指す別名を作成します。詳細については、Oracle のマニュアルを参照してください。

  3. sp_addlinkedserver を実行してリンク サーバーを作成します。このとき、provider_name に OraOLEDB.Oracle を指定し、data_source に Oracle データベースの別名を指定します。

    次の例では、DQORA8 という別名が定義されていることを前提としています。

    exec sp_addlinkedserver @server='OrclDB', 
        @srvproduct='Oracle',
        @provider='OraOLEDB.Oracle', 
        @datasrc='DQORA8'
    
    セキュリティに関する注意セキュリティに関する注意

    この例では、Windows 認証は使用されていません。したがって、パスワードは暗号化されずに送信されます。パスワードは、ディスク、バックアップ、およびログファイルに保存されたデータ ソース定義やスクリプトで参照できます。この種類の接続では、システム管理者のパスワードを使用しないでください。特定のユーザー環境のセキュリティについては、ネットワーク管理者に相談してください。

  4. sp_addlinkedsrvlogin を使用して、SQL Server ログインから Oracle ログインへのログイン マッピングを作成します。

    次の例では、Oracle ログイン OrclUsr と Oracle パスワード OrclPwd を使用して、SQL Server ログイン Joe を手順 3. で定義したリンク サーバーにマップしています。

    sp_addlinkedsrvlogin @rmtsrvname = 'OrclDB', 
       @useself = 'false', 
       @locallogin = 'Joe', 
       @rmtuser = 'OrclUsr', 
       @rmtpassword = 'OrclPwd'
    

Oracle リンク サーバー内のテーブルを参照するときは、次の規則を使用します。

  • 引用符で囲んだ識別子を使用せずにテーブル名と列名を Oracle に作成した場合、その名前はすべて大文字のみで指定します。

  • 引用符で囲んだ識別子を使用してテーブル名と列名を Oracle に作成した場合は、Oracle でそれらの名前を作成したときと同じ大文字と小文字の組み合わせで指定します。

  • INSERT ステートメントでは、テーブル内の特定の列に NULL または既定値を指定できる場合でも、テーブル内のすべての列に値を指定します。

  • このプロバイダでは、datetime リテラルの引数を次の形式で直接渡すことはサポートされません。

    EXEC 'string' '<datetime-literal>' AT <oraclelinkedserver>
    

    たとえば、datetime リテラル '14-sep-94' を次のように使用することはサポートされていません。

    EXEC('INSERT INTO DYNORCL.SALES(ID, ORD_NO, ORD_DATE, QTY) 
       VALUES (?, ?, ?, ?)', '6380', '6871', '14-sep-94', 5) AT OrclDB
    

    代わりに、datetime 変数を作成し、リテラル値を代入して、その変数を引数として指定し EXEC を呼び出します。

    DECLARE @v1 datetime
    SET @v1 = CONVERT(datetime,'14-sep-94')
    EXEC('INSERT INTO DYNORCL.SALES(ID, ORD_NO, ORD_DATE, QTY) 
       VALUES (?, ?, ?, ?)', '6380', '6871', @v1, 5) AT OrclDB
    

制限事項

SQL Server では、AVG 集計関数を Oracle のテーブルに対して使用することはサポートされていません。これは、Oracle プロバイダが OLE DB 型の DBTYPE_VARNUMERIC を返すためです。SQL Server では、DBTYPE_VARNUMERIC はサポートされていません。たとえば、次のコードではエラーが返されます。

SELECT AVG(QTY)
FROM ORA..RPUBS.SALES

エラーを回避するには OPENQUERY を使用します。次に例を示します。

SELECT *
FROM OPENQUERY(ORA,
   'SELECT CAST (AVG(QTY) AS numeric)
   FROM ORA..RPUBS.SALES')

レジストリ エントリ

Oracle クライアント ソフトウェアで OLE DB Provider for Oracle が機能するようにするには、コマンド ラインからレジストリ ファイルを実行してクライアントのレジストリを変更する必要があります。クライアント ソフトウェアの複数のインスタンスを同時に実行しないでください。次の表に、レジストリ ファイルを示します。これらのファイルは、MDAC (Microsoft Data Access Component) のインストールを含むディレクトリ構造と同じディレクトリ構造内にあります。通常、このディレクトリ構造は C:\Program Files\Common Files\System Files\OLE DB にあります。

Oracle クライアント

Windows NT または 9x

Windows 2000

7.x

mtxoci7x_winnt.reg

mtxoci7x_win2k.reg

8.0

mtxoci80_winnt.reg

mtxoci80_win2k.reg

8.1

mtxoci81_winnt.reg

mtxoci81_win2k.reg