Open棟梁Project - マイクロソフト系技術情報 Wiki

目次

概要

リンクサーバとは
SQL ServerにOLE接続可能なDBMSを登録し
SQL Server経由でアクセス可能とする機能である。

SQL Server(本体)
└リンクサーバ
 ├OLE接続:SQL Server(本体とは別のインスタンス)
 ├OLE接続:Oracle
 ├OLE接続:HiRDB
 :


それにより

などを実現する。

手順

動作環境準備

リンクサーバを実行するため以下の設定を行う。

  1. MS DTCサービスの開始
  2. ファイアウォールの設定 リンクサーバが別のサーバの場合、RPC通信が行えるように設定を行う。

    下記URL参照

リンクサーバを登録する手順

  1. Microsoft SQL Server Management StidioでSQLServerを開く
  2. オブジェクトエクスプローラにて[サーバーオブジェクト]-[リンクサーバー]を右クリックし[新しいリンクサーバー]を選択
  3. リンクサーバー名とDBMSへの接続文字列を設定しOKボタンを押下

実装上の考慮点

リンクサーバー上のテーブルの指定

リンクサーバ上のテーブルは下記形式での指定となる

[リンクサーバー名].[データベース名].[スキーマ名].[テーブル名]

シノニムを利用して別名をつけることも可能である

Create Synonym [シノニム名] For [リンクサーバー名].[データベース名].[スキーマ名].[テーブル名]

グローバルトランザクション(2フェーズコミット)の実行

グローバルトランザクションを行う場合

SET XACT_ABORT ON

をトランザクション開始直後に発行するとグローバルトランザクションが実行可能となります。
以下の場合は、上記を発行する必要はありません。

サンプルコード

C#

using System.Data;
using System.Data.SqlClient;
SqlConnection con = new SqlConnection("User ID=user1;Password=password1;Initial Catalog=sample;Data Source=127.0.0.1");
SqlCommand com = new SqlCommand("", con);
SqlTransaction tra;

//SQL Serverへ接続
con.Open();

//グローバルトランザクション開始
tra = con.BeginTransaction();
com.Transaction = tra; 
com.CommandText = @"SET XACT_ABORT ON";
com.ExecuteNonQuery();

//SQL ServerへSQLを発行
com.CommandText = @"INSERT INTO [Table1] VALUES ('1','2','2')";
com.ExecuteNonQuery();

//リンクサーバへSQLを発行
com.CommandText = @"INSERT INTO [LOCALHOST\MSSQLSERVER].[sample].[dbo].[Table2] VALUES ('1','2','2')";
com.ExecuteNonQuery();
 
//SQL Server、リンクサーバ間でテーブルをJOINして検索するSQLを発行
DataSet ds = new DataSet();
SqlDataAdapter adp = new SqlDataAdapter(com);
com.CommandText = @"SELECT * FROM [Table1] a,[LOCALHOST\MSSQLSERVER].[sample].[dbo].[Table2] b where a.C1 = b.C1";
adp.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];

//コミット
tra.Commit();

//切断
con.Close();

Oracleからデータベースリンク接続

以下の手順で設定可能(Oracle10g → SQL Server 2005の事例)

前提条件

Generic Connectivity Common Files 10.2.0.1.0 がインストールされていること

ODBCの設定

inithsodbc.oraの編集

[%ORCALE_HOME%\HS\ADMIN\inithsodbc.ora]を編集します。

listener.oraの編集

[%ORCALE_HOME%\network\admin\listener.ora]を編集します。

(SID_DESCの追加)

(SID_LIST =
  (SID_DESC =
    (SID_NAME = PLSExtProc)
    (ORACLE_HOME = E:\oracle\product\10.2.0\db_1)
    (PROGRAM = extproc)
  )
  (SID_DESC =
    (SID_NAME = HSODBC)
    (ORACLE_HOME = E:\oracle\product\10.2.0\db_1)
    (PROGRAM = HSODBC)
  )
)

リスナー起動

Windows認証の場合は、以下の設定が必要になります。
#Oracleのサービスがケルベライズされていないためベースクライアント認証は不可能。

tnsnames.oraの編集

[%ORCALE_HOME%\network\admin\tnsnames.ora]を編集します。

(hsodbcの追加)

hsodbc =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA = (SID=hsodbc))
    (HS=OK)
  )

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

下記SQLで「データベースリンク」を作成する。

CREATE DATABASE LINK DBLINK_SQLSRV
USING 'HSODBC'
/

データベースリンクのテスト

SQL Serverのテーブルにアクセスするためには、テーブル名の後ろに、
アットーマーク(@)に続けてデータベースリンク名を指定します。

SELECT * FROM TBL_NAME@DBLINK_SQLSRV;

Oracleからの分散トランザクションの動作は以下を参照。

参考情報


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS