1

インターネットを介した2つのシステム間の「リンクサーバー」を使用したデータトランザクションのストアドプロシージャの例を示しています

Alter Proc [dbo].[usp_Select_TransferingDatasFromServerCheckingforExample]

@RserverName varchar(100), ----- Server Name  
@RUserid Varchar(100),           ----- server user id
@RPass Varchar(100),              ----- Server Password 
@DbName varchar(100)           ----- Server database    

As
Set nocount on
Set Xact_abort on
Declare @user varchar(100)
Declare @userID varchar(100)
Declare @Db Varchar(100)
Declare @Lserver varchar(100)
Select @Lserver = @@servername
Select @userID = suser_name()
select @User=user
Exec('if exists(Select 1 From [Master].[' + @user + '].[sysservers] where srvname = ''' + @RserverName + ''') begin Exec sp_droplinkedsrvlogin ''' +  @RserverName + ''',''' + @userID + ''' exec sp_dropserver ''' + @RserverName + ''' end ')


set @RserverName='['+@RserverName+']'
declare @ColumnList varchar(max)
set @ColumnList = null
select  @ColumnList = case when @ColumnList is not null then @ColumnList + ',' + quotename(name) else quotename(name) end  from syscolumns where id = object_id('bditm') order by colid
set identity_insert Bditm on
exec ('Insert Into Bditm ('+ @ColumnList +') Select * From '+ @RserverName + '.'+ @DbName + '.'+ @user + '.Bditm')
set identity_insert Bditm off

set @RserverName=replace(replace(@RserverName,'[',''),']','')

Exec sp_droplinkedsrvlogin  @RserverName,@userID
Exec sp_dropserver @RserverName

ストアドプロシージャを実行すると、さまざまな実行時間でさまざまなエラーが発生します

しばらくすると、このエラーが表示されます

"The operation could not be performed because OLE DB provider "SQLNCLI" for linked server "ServerName" was unable to begin a distributed transaction."

別の時間にこのタイプのエラーが表示される

OLE DB provider "SQLNCLI" for linked server "70.38.11.49" returned message "Protocol error in TDS stream".
OLE DB provider "SQLNCLI" for linked server "70.38.11.49" returned message "Communication link failure".
Msg 65535, Level 16, State 1, Line 0
Session Provider: Physical connection is not usable [xFFFFFFFF]. 
OLE DB provider "SQLNCLI" for linked server "70.38.11.49" returned message "Communication link failure".
Msg 65535, Level 16, State 1, Line 0
Session Provider: Physical connection is not usable [xFFFFFFFF]. 
OLE DB provider "SQLNCLI" for linked server "70.38.11.49" returned message "Communication link failure".
Msg 10054, Level 16, State 1, Line 0
TCP Provider: An existing connection was forcibly closed by the remote host.

クライアント側で Windows XP と SQL Server 2005 を使用しており、ネット サーバーで Windows Server 2003 と SQL Server 2005 を使用しています。

両方のシステムで MSDTC を設定します

この問題を解決するにはどうすればよいですか (また、Windows XP および Windows Server 2003 で MSDTC を設定するための正しい情報を提供してください)

4

5 に答える 5

1

あなたは見たいかもしれません:

http://support.microsoft.com/kb/306212

http://support.microsoft.com/kb/937517

于 2009-01-13T16:10:53.013 に答える
1

また、IP ネットワーク構成で DNS 名前解決を確認する必要があります。

たとえば、 server-a.mydomain.com というサーバーとserver-b.otherdomain.comという別のサーバーがあり、 server-aにログインしてserver -b (ドメインなし) にping を実行するとします。

「 Ping request could not find host server-b.Please check the name and try again. 」と応答する場合、それが問題です。

コントロール パネル > ネットワーク接続 > ネットワーク カードを右クリック > プロパティ > インターネット プロトコル > プロパティ > 詳細設定 > DNS > この DNS サフィックスを順番に追加します。ここで、ローカル ドメイン: mydomain.comを追加してから、リモート ドメイン: otherdomain.comを追加します。終了するまで [OK] をクリックします。

ping server-bを実行すると、次のように応答するはずです。

server-b.otherdomain.com [192.168.1.2] に 32 バイトのデータで ping を実行: 192.168.1.2 からの応答: バイト = 32 時間 = 12 ミリ秒 TTL = 64

ここで、分散トランザクションの実行を再試行します。

于 2010-12-17T18:10:21.157 に答える
1

プロトコルの問題である可能性があるという上記の投稿に同意しますが、インターフェイスとして名前付きパイプを使用する必要があるかもしれません。

または、DTC サービスを実行しているユーザー アカウントがローカル権限のみを持ち、ネットワーク上での権限を持たない可能性があります。両方のマシンで DTC を実行するのに十分な権限を持つドメイン アカウントを使用します。

または、プロセスのフロントエンドで BEGIN DISTRIBUTED TRANSACTION を使用して分散トランザクションを開始する必要がある場合もあります。

于 2009-01-12T04:46:16.500 に答える
0

ロングショットですが、MSSQL Server 7でしばらく前に同様の問題に遭遇しました。両方のシステムがNetBios名で相互に連絡する必要があり、ドメインの一部ではないため(しかし通信していた)ことが判明しました。あなたの場合のようにWAN経由で)。

少なくともこれが事実であるかどうかを確認するための簡単な解決策は、lmhosts ファイルを編集して、それぞれのコンピューター名をその IP アドレス (クライアントとサーバーの両方) にマップすることです。

当時作成したやや混乱した投稿を参照してください: http://groups.google.com/group/microsoft.public.sqlserver.server/browse_thread/thread/2c246bd2afc7c4d9

于 2009-01-12T01:05:21.313 に答える