サーバリンクのトランザクショントラブル
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を設定する必要がある
- 「コントロール パネル\システムとセキュリティ\管理ツール\コンポーネントサービス」を開き
- 「コンソールルート\コンポーネントサービス\コンピューター\マイコンピューター\Distrivuted Trnsaction Coordinator」のローカルDTCのプリパティを開く
- 「セキュリティ」タブのセキュリティ設定より、「ネットワークDTCアクセス」、「リモートクライアントを許可する」、「リモート管理を許可する」、「受信を許可する」、「送信を許可する」をチェック入れ「OK」を押下する。
- MSSQLサーバを再開する。
※この処理はリンクされた両DBサーバに設定する必要がある。