常常要通过存储过程修改链接数据库中的数据,需要在源数据库服务器和目标数据库服务器上配置分布式事务,配置过程比较繁琐,分布式事务出现问题既有操作系统的原因也有SQL SERVER的原因。读了《sql server分布式事务解决方案》一文以后,我感觉基本上已经形成了一套标准化的配置步骤,但第6节中没有提到当SQL Server的名称和计算机名不一致时应该采取的措施。
对于全新安装的机器,按照中文文档的要点配置,应该不会有什么问题。如果按以上配置还有问题,参考英文文档,很可能是安装SQL SERVER以后修改过计算机名(网络名),导致SQL Server的名称和计算机名不一致。
--
查询SQL SERVER名称
SELECT @@SERVERNAME
SELECT @@SERVERNAME
最好先在服务器上相互ping以下对方计算机名,看看返回的IP地址对不对,防止网络上计算机重名。如果计算机名解析IP地址无误,那么就按计算机名来修改SQL SERVER名称。
--
SQL SERVER 2005 修改服务器名
sp_dropserver <old_name\instancename >
GO
sp_addserver <new_name\instancename >, local
GO
-- SQL SERVER 2000 修改服务器名
use master
go
sp_configure ' allow up ', 1
RECONFIGURE WITH OVERRIDE
GO
update sysservers set srvname =<new_name > where srvid = 0
update sysservers set datasource =<IP > where srvid = 1
go
sp_configure ' allow up ', 0
RECONFIGURE WITH OVERRIDE
GO
sp_dropserver <old_name\instancename >
GO
sp_addserver <new_name\instancename >, local
GO
-- SQL SERVER 2000 修改服务器名
use master
go
sp_configure ' allow up ', 1
RECONFIGURE WITH OVERRIDE
GO
update sysservers set srvname =<new_name > where srvid = 0
update sysservers set datasource =<IP > where srvid = 1
go
sp_configure ' allow up ', 0
RECONFIGURE WITH OVERRIDE
GO
中文参考文档:sql server分布式事务解决方案
英文参考文档:How to troubleshoot error 7391 that occurs when you use a linked server in SQL Server