ハロの外部記憶インターフェイス

そろそろ覚える努力が必要かも…

サーバリンクのトランザクショントラブル

MSSQLサーバ同士にサーバリンクを作成

リンクサーバーの情報を先に登録

EXEC sp_addlinkedserver
       @server = 'MY_LINK_DB', --リンクサーバの名前
       @srvproduct = '',
       @provider = 'SQLNCLI', -- プロバイダーの名前
       @datasrc = '192.168.1.201'; -- ロケーション(リンクDBサーバ)

登録されたリンクサーバーについてのログイン情報を設定する。
この情報でログインするため、権限などの確認が必要

EXEC sp_addlinkedsrvlogin 
       @rmtsrvname = 'MY_LINK_DB', --リンクサーバの名前
       @useself = 'FALSE', --ログイン名とパスワードを送信する時は FALSE
       @locallogin = 'sa', -- ローカルサーバ上のログイン
       @rmtuser = 'sa', -- ログイン名
       @rmtpassword = 'mypassword'; -- パスワード

サーバーリンクからの問い合わせ

基本、以下の用にリンク名の下に各DB名とテーブル名でつなぐ

select *
from MY_LINK_DB.dbname.dbo.tablename

分散トランザクション

分散トランザクション(DTC)が設定されていない場合、以下のエラーとなる。

リンク サーバー "%ls" の OLE DB プロバイダ "%ls" で分散トランザクションを開始できなかったので、この操作を実行できませんでした。

対策:関連する両DBにDTCを設定する必要がある

  1. 「コントロール パネル\システムとセキュリティ\管理ツール\コンポーネントサービス」を開き
  2. 「コンソールルート\コンポーネントサービス\コンピューター\マイコンピューター\Distrivuted Trnsaction Coordinator」のローカルDTCのプリパティを開く
  3. 「セキュリティ」タブのセキュリティ設定より、「ネットワークDTCアクセス」、「リモートクライアントを許可する」、「リモート管理を許可する」、「受信を許可する」、「送信を許可する」をチェック入れ「OK」を押下する。
  4.  MSSQLサーバを再開する。

※この処理はリンクされた両DBサーバに設定する必要がある。


参考:https://support.microsoft.com/ja-jp/kb/306212