「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
リンクサーバとは
SQL ServerにOLE接続可能なDBMSを登録し
SQL Server経由でアクセス可能とする機能である。
SQL Server(本体) └リンクサーバ ├OLE接続:SQL Server(本体とは別のインスタンス) ├OLE接続:Oracle ├OLE接続:HiRDB :
それにより
などを実現する。
リンクサーバを実行するため以下の設定を行う。
リンクサーバ上のテーブルは下記形式での指定となる
[リンクサーバー名].[データベース名].[スキーマ名].[テーブル名]
シノニムを利用して別名をつけることも可能である
Create Synonym [シノニム名] For [リンクサーバー名].[データベース名].[スキーマ名].[テーブル名]
SET XACT_ABORT ON
をトランザクション開始直後に発行すると
グローバルトランザクションが実行可能となる。
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やHiRDBなどを起点とする場合、
そちらの製品の機能を使用することになる。
調べると、前提条件が、
など、製品によって前提条件が異なるようです。
以下の手順で設定可能(Oracle10g → SQL Server 2005の事例)
Generic Connectivity Common Files 10.2.0.1.0 がインストールされていること。
(Generic Connectivity は、
として実装されます。 )
[%ORCALE_HOME%\HS\ADMIN\inithsodbc.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のサービスがケルベライズされていないためベースクライアント認証は不可能。
[%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からの分散トランザクションの動作は以下を参照。
Tags: :データアクセス, :SQL Server