田舎のパパが日常で感じた気になる話を発信するブログです。

気になるボックス

データベース

【Oracle→SQLServer】DB-LINK(データベースリンク)の作成方法

投稿日:

64BitOSだとSQLServerからOracleへのデータベースリンクで一部不具合があったので逆バージョン(Oracle→SQLServer)を試してみた。今のところ問題なく接続できているので作成方法を紹介します。

スポンサーリンク

事前準備

1.Oracle Generic Connectivity の存在確認

Universal Installerを起動してインストール済みかを確認する。

2.SYS.HS_FDS_CLASS の存在確認

下記のSQLを実行して結果が返ってきたらOK!

select * from SYS.HS_FDS_CLASS

結果が0件であれば、[%ORACLE_HOME%¥rdbms¥admincaths.sql]をSYSユーザーで実行する。

> cd %ORACLE_HOME%¥rdbms¥admin
> sqlplus /nolog
SQL> conn sys/***** as sysdba 
SQL> shutdown immediate
SQL> @catchs.sql

設定手順

1.ODBCの設定

[管理ツール]の[データソース(ODBC)]にて、データベースリンク用のシステムDSNを新規作成する。

2.inithsodbc.oraの編集

[%ORCALE_HOME%HSADMINinithsodbc.ora]を編集します。

#
# HS init parameters
#
HS_FDS_CONNECT_INFO = SQLSRV  #ODBCのデータソース名を指定
HS_FDS_TRACE_LEVEL = OFF

[note]inithsodbc.oraとは
異機種間サービス接続のためにOracleデータベースで使用される初期化ファイルのことです。ファイルの命名規則は、init[サービス名].oraとなっており、inithsodbc.ora の場合は、[hsodbc]がデータベースリンク時の接続先となります。
[/note]

3.listener.oraの編集

[%ORCALE_HOME%networkadminlistener.ora]を編集します。

SID:[HSODBC]を追加する。

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = %ORCALE_HOME%)      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = HSODBC)
      (ORACLE_HOME = %ORCALE_HOME%)      (PROGRAM = HSODBC)
    )
  )

リスナーを再起動します。
※[管理ツール]-[サービス]からでOK

4.tnsnames.oraの編集

[%ORCALE_HOME%networkadmintnsnames.ora]を編集します。

サービス:[HSODBC]を追加する。

HSODBC  =
  (DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))
    (CONNECT_DATA=(SID=HSODBC))
    (HS=OK)
  ) 

5.データベースリンクの作成

下記のSQLを発行してデータベースリンクを作成する。

CREATE DATABASE LINK DBLINK_SQLSRV
CONNECT TO "SQLServerのユーザー名" IDENTIFIED BY "SQLServerのパスワード" USING 'HSODBC';

[warning]ユーザー名、パスワードはダブルクオーテーション("")で囲まないと大文字されるので注意が必要。[/warning]

6.接続のテスト

正しくデータベースリンクが作成されたかSQLを発行して確認します。テーブル名の後ろにアットーマーク(@)に続けてデータベースリンク名を指定します。

SELECT * FROM TBL_NAME@DBLINK_SQLSRV;

結果が返ってきたらOKです。1回目は時間はかかりますが2回目以降はキャッシュされるのか速くなるようです。

-データベース
-,

Copyright© 気になるボックス , 2016 AllRights Reserved Powered by AFFINGER4.