none
接続先のPCを新しくしたらリンクサーバに接続できない。 RRS feed

  • 質問

  • 学校の職員室の教務データベースと事務室の学納金データベースで
    連動処理を行っていました(教務→学納金の向きです)が、
    事務室のパソコンが老朽化したため
    新しくしたところ連動処理がうまく行かなくなりました。
    いろいろ調べて行き詰まっています。 よろしくお願いいたします。

    <教務データベース>
    Windows2000Sercr + SQLServer2000(Windows認証モード)

    <学納金データベース>
    旧PC
    Windows2000 Professional + SQLServer2000(混合認証)

    新PC
    WindowsXP Professional + SQLServer2000(混合認証)

     

    手順
    1)学納金データベースに jimu というSQL認証ユーザを作る。
    2)教務データベースのリンクサーバとして学納金データベースを登録する。
    3)生徒テーブルの更新を行う教務側のドメインユーザを jimu にマッピングする。
    4)教務データベースの生徒テーブルと生徒個人情報テーブルに
      生徒の氏名と住所が変わったら、学納金データベースの情報を連動更新する
      トリガを作成する。

    教務データベース側から、生徒氏名、住所の更新を行おうとすると

    ユーザー 'jimu' のログインに失敗しました。理由 : SQL Server の信頼関係接続に関連付けられていません。

    のエラーメッセージが出て更新できません。
    テーブル内容をSelectしても同じエラーメッセージです。
    旧PCを立ち上げて試してみると、普通にSelectして正常にデータが返されます。
    いろいろな設定を見てみて同じです。
    OSが変わったときに何か注意しないといけないことがありますでしょうか?

    2011年11月18日 1:26

回答

  • その後解決しました。 3つほど山がありました。 

    新しくした学納金データベースの入っているパソコンのコンピュータ名を

    (1)システムのプロパティ ネットワークID で変更してドメインに参加させ直して

    他のパソコンからデータアクセスできるようになりました。

    しかし、次々に問題が発生しました。

     

    照合順序が一致しないというエラーが出ました。

    (2)リンクサーバのプロパティ サーバーオプションで

    リモート照合順序を使用→False に変更

    照合順序名→Japanese_CI_AS に変更(リモート接続元とリモート接続先の照合順序を一致させる)

    して照合順序の問題は解決しました。

     

    そして、次の問題は分散トランザクションのトリガが実行されると

    『サーバー : メッセージ 7391、レベル 16、状態 1、行 1
    OLE DB プロバイダ 'SQLOLEDB' は分散トランザクションを開始できなかったので、要求した操作は実行されませんでした。[OLE/DB provider returned message: 指定されたトランザクション コーディネータに、新規トランザクションを参加できませんでした。] OLE DB エラー トレース [OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。 』

    というエラーメッセージが出ました。

    これは、パソコンを新しくして、OSが Windows2000Pro から WindowsXPProに変更になったことでセキュリティが

    きびしくなったことが原因であるとわかりました。

    http://support.microsoft.com/kb/839279/ja

    を参考にして

    (3)次の処理を行い、無事に分散トランザクションが動くようになりました。

    1.MSDTC サービスのログオン アカウントが [ネットワーク サービス] になっていることを確認します。これを行うには、以下の手順を実行します。
    •[スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。
    •[名前] ボックスに services.msc と入力し、[OK] をクリックします。
    •[サービス] ウィンドウの右側に表示されている一覧で、[名前] 列の中から [Distributed Transaction Coordinator] サービスを探します。
    •このサービスの [ログオン] タブの表示が [ネットワーク サービス] になっているか [ローカル システム] になっているかを確認します。

    [ログオン] に表示されているアカウントが [ネットワーク サービス] である場合は、手順 2. に進みます。[ログオン] に表示されているアカウントが [ローカル システム] である場合は、次の手順に進みます。
    •[スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。
    •[ファイル名を指定して実行] ダイアログ ボックスで、[名前] ボックスに cmd と入力し、[OK] をクリックします。
    •コマンド プロンプトで net stop msdtc と入力して、MSDTC サービスを停止します。
    •コマンド プロンプトで Msdtc -uninstall と入力して MSDTC を削除します。
    •コマンド プロンプトで regedit と入力して、レジストリ エディタを起動します。
    •レジストリ エディタで、次のキーに移動します。


    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC


    このキーを削除します。
    •レジストリ エディタを終了します。
    •コマンド プロンプトで Msdtc -install と入力して、MSDTC をインストールします。
    •コマンド プロンプトで net start msdtc と入力して、MSDTC サービスを開始します。

    これにより、MSDTC サービスの [ログオン] タブに表示されているアカウントが [ネットワーク サービス] に設定されます。

    2.MSDTC のネットワーク トランザクションを有効にします。これを行うには、以下の手順を実行します。
    •[スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。
    •[ファイル名を指定して実行] ダイアログ ボックスで、[名前] ボックスに dcomcnfg.exe と入力し、[OK] をクリックします。
    •[コンポーネント サービス] ウィンドウで、[コンポーネント サービス]、[コンピュータ]、[マイ コンピュータ] を順に展開します。
    •[マイ コンピュータ] を右クリックし、[プロパティ] をクリックします。
    •[マイ コンピュータのプロパティ] ダイアログ ボックスの [MSDTC] タブをクリックし、[セキュリティの構成] をクリックします。
    •[セキュリティの構成] ダイアログ ボックスで、[ネットワーク DTC アクセス] チェック ボックスをオンにします。
    •このコンピュータで、リモート コンピュータからの分散トランザクションの実行を許可するには、[トランザクション マネージャ通信] の [受信を許可する] チェック ボックスをオンにします。
    •このコンピュータからリモート コンピュータでの分散トランザクションの実行を許可するには、[トランザクション マネージャ通信] の [送信を許可する] チェック ボックスをオンにします。
    •[トランザクション マネージャ通信] の [認証を必要としない] をクリックします。
    •[セキュリティの構成] ダイアログ ボックスで [OK] をクリックします。
    •[マイ コンピュータのプロパティ] ダイアログ ボックスで [OK] をクリックします。

    3.MSDTC プログラムとポート 135 を例外に含めるように Windows ファイアウォールを構成します。これを行うには、次の手順を実行します。
    •[スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。
    •[ファイル名を指定して実行] ダイアログ ボックスで、[名前] ボックスに Firewall.cpl と入力し、[OK] をクリックします。
    •クラシック表示のコントロール パネルでは、[Windows ファイアウォール] をダブルクリックします。
    •[Windows ファイアウォール] ダイアログ ボックスの [例外] タブをクリックし、[プログラムの追加] をクリックします。
    •[プログラムの追加] ダイアログ ボックスで、[参照] をクリックし、Msdtc.exe を見つけてダブルクリックします。このファイルは、デフォルトで <Installation drive>:\Windows\System32 フォルダに置かれています。
    •[プログラムの追加] ダイアログ ボックスで [OK] をクリックします。
    •[Windows ファイアウォール] ダイアログ ボックスで、[プログラムおよびサービス] ボックスの一覧の [msdtc] チェック ボックスをオンにします。
    •[例外] タブの [ポートの追加] をクリックします。
    •[ポートの追加] ダイアログ ボックスで、[ポート番号] ボックスに 135 と入力し、[TCP] をクリックします。
    •[ポートの追加] ダイアログ ボックスで、[名前] ボックスに例外の名前を入力し、[OK] をクリックします。
    •[Windows ファイアウォール] ダイアログ ボックスの [プログラムおよびサービス] ボックスで、手順 j. で入力した例外の名前の横にあるチェック ボックスをオンにし、[OK] をクリックします。

     

    2011年11月29日 4:22

すべての返信

  • 検証環境が無いのではっきりとは言えませんが、

    教務データベースにログインしているWindowsアカウントは、

    学納金データベースのPCにログインするのに必要な権限を満たしていますか?

     

    教務データベースのログインがWindows認証モードである事から、

    リンク先の学納金データベースにもWindwos認証でログインしようとしているのだと思いますが、違いますかね?

    2011年11月18日 2:09
  • aviatorさま

    返信ありがとうございます。

    ユーザーのマッピングで、学納金データベースには jimu ユーザで認証しようとしております。

    エラーメッセージは「ユーザー 'jimu' のログインに失敗しました。」となっています。

    2011年11月18日 2:27
  • 学納金データベース は本当に混合認証になっていますか?

    ※Managment Studio とかでプロパティを開いて、セキュリティタブを見た時に混合認証になっていますか?

    学納金データベース 単体に 'jimu' ユーザで接続出来ますか?


    • 編集済み aviator__ 2011年11月18日 4:02
    2011年11月18日 4:01
  • aviatorさま

    返信ありがとうございます。

    混合認証になっています。

    ACCESSプロジェクトで他のPCから SQL認証単体の jimu ユーザで接続することが出来ました。

    また、別の Windows XP Professionalマシンに同じように

    SQLServer2000をインストールして、同じように設定したところ

    そちらはリモートアクセスが以前と同じように出来ました。

    何がいけないのでしょうね。

    2011年11月18日 5:05
  • Windows ファイアウォールとか。

    Windows XP Service Pack 2 (SP2) を SQL Server と共に使用するように構成する方法
    http://support.microsoft.com/kb/841249
    2011年11月18日 5:37
  • totojoさま

    返信ありがとうございます。

    ファイアーウォールは無効にしておりまして

    別のXPマシン+SQLServer2000 でテストすると

    うまく接続できます。 

    もうトリガによる更新はあきらめて

    アプリケーションで対応しようかなと思い始めております。

    2011年11月18日 7:29
  • その後解決しました。 3つほど山がありました。 

    新しくした学納金データベースの入っているパソコンのコンピュータ名を

    (1)システムのプロパティ ネットワークID で変更してドメインに参加させ直して

    他のパソコンからデータアクセスできるようになりました。

    しかし、次々に問題が発生しました。

     

    照合順序が一致しないというエラーが出ました。

    (2)リンクサーバのプロパティ サーバーオプションで

    リモート照合順序を使用→False に変更

    照合順序名→Japanese_CI_AS に変更(リモート接続元とリモート接続先の照合順序を一致させる)

    して照合順序の問題は解決しました。

     

    そして、次の問題は分散トランザクションのトリガが実行されると

    『サーバー : メッセージ 7391、レベル 16、状態 1、行 1
    OLE DB プロバイダ 'SQLOLEDB' は分散トランザクションを開始できなかったので、要求した操作は実行されませんでした。[OLE/DB provider returned message: 指定されたトランザクション コーディネータに、新規トランザクションを参加できませんでした。] OLE DB エラー トレース [OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。 』

    というエラーメッセージが出ました。

    これは、パソコンを新しくして、OSが Windows2000Pro から WindowsXPProに変更になったことでセキュリティが

    きびしくなったことが原因であるとわかりました。

    http://support.microsoft.com/kb/839279/ja

    を参考にして

    (3)次の処理を行い、無事に分散トランザクションが動くようになりました。

    1.MSDTC サービスのログオン アカウントが [ネットワーク サービス] になっていることを確認します。これを行うには、以下の手順を実行します。
    •[スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。
    •[名前] ボックスに services.msc と入力し、[OK] をクリックします。
    •[サービス] ウィンドウの右側に表示されている一覧で、[名前] 列の中から [Distributed Transaction Coordinator] サービスを探します。
    •このサービスの [ログオン] タブの表示が [ネットワーク サービス] になっているか [ローカル システム] になっているかを確認します。

    [ログオン] に表示されているアカウントが [ネットワーク サービス] である場合は、手順 2. に進みます。[ログオン] に表示されているアカウントが [ローカル システム] である場合は、次の手順に進みます。
    •[スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。
    •[ファイル名を指定して実行] ダイアログ ボックスで、[名前] ボックスに cmd と入力し、[OK] をクリックします。
    •コマンド プロンプトで net stop msdtc と入力して、MSDTC サービスを停止します。
    •コマンド プロンプトで Msdtc -uninstall と入力して MSDTC を削除します。
    •コマンド プロンプトで regedit と入力して、レジストリ エディタを起動します。
    •レジストリ エディタで、次のキーに移動します。


    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC


    このキーを削除します。
    •レジストリ エディタを終了します。
    •コマンド プロンプトで Msdtc -install と入力して、MSDTC をインストールします。
    •コマンド プロンプトで net start msdtc と入力して、MSDTC サービスを開始します。

    これにより、MSDTC サービスの [ログオン] タブに表示されているアカウントが [ネットワーク サービス] に設定されます。

    2.MSDTC のネットワーク トランザクションを有効にします。これを行うには、以下の手順を実行します。
    •[スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。
    •[ファイル名を指定して実行] ダイアログ ボックスで、[名前] ボックスに dcomcnfg.exe と入力し、[OK] をクリックします。
    •[コンポーネント サービス] ウィンドウで、[コンポーネント サービス]、[コンピュータ]、[マイ コンピュータ] を順に展開します。
    •[マイ コンピュータ] を右クリックし、[プロパティ] をクリックします。
    •[マイ コンピュータのプロパティ] ダイアログ ボックスの [MSDTC] タブをクリックし、[セキュリティの構成] をクリックします。
    •[セキュリティの構成] ダイアログ ボックスで、[ネットワーク DTC アクセス] チェック ボックスをオンにします。
    •このコンピュータで、リモート コンピュータからの分散トランザクションの実行を許可するには、[トランザクション マネージャ通信] の [受信を許可する] チェック ボックスをオンにします。
    •このコンピュータからリモート コンピュータでの分散トランザクションの実行を許可するには、[トランザクション マネージャ通信] の [送信を許可する] チェック ボックスをオンにします。
    •[トランザクション マネージャ通信] の [認証を必要としない] をクリックします。
    •[セキュリティの構成] ダイアログ ボックスで [OK] をクリックします。
    •[マイ コンピュータのプロパティ] ダイアログ ボックスで [OK] をクリックします。

    3.MSDTC プログラムとポート 135 を例外に含めるように Windows ファイアウォールを構成します。これを行うには、次の手順を実行します。
    •[スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。
    •[ファイル名を指定して実行] ダイアログ ボックスで、[名前] ボックスに Firewall.cpl と入力し、[OK] をクリックします。
    •クラシック表示のコントロール パネルでは、[Windows ファイアウォール] をダブルクリックします。
    •[Windows ファイアウォール] ダイアログ ボックスの [例外] タブをクリックし、[プログラムの追加] をクリックします。
    •[プログラムの追加] ダイアログ ボックスで、[参照] をクリックし、Msdtc.exe を見つけてダブルクリックします。このファイルは、デフォルトで <Installation drive>:\Windows\System32 フォルダに置かれています。
    •[プログラムの追加] ダイアログ ボックスで [OK] をクリックします。
    •[Windows ファイアウォール] ダイアログ ボックスで、[プログラムおよびサービス] ボックスの一覧の [msdtc] チェック ボックスをオンにします。
    •[例外] タブの [ポートの追加] をクリックします。
    •[ポートの追加] ダイアログ ボックスで、[ポート番号] ボックスに 135 と入力し、[TCP] をクリックします。
    •[ポートの追加] ダイアログ ボックスで、[名前] ボックスに例外の名前を入力し、[OK] をクリックします。
    •[Windows ファイアウォール] ダイアログ ボックスの [プログラムおよびサービス] ボックスで、手順 j. で入力した例外の名前の横にあるチェック ボックスをオンにし、[OK] をクリックします。

     

    2011年11月29日 4:22