我们用的pda点菜程序是暂存到pda上的小sybase库中,然后利用sybase的同步脚本来同步到sqlserver服务器中的。
这些年一直用没出过问题。
最近有一个酒店用的是群集服务器,现用服务器是NODE1,备份服务器是NODE2,pda链接的都是NODE1服务器(暂时没有用虚拟的服务器名)。
昨天pda同步数据时候读服务器数据(从sqlserver读取数据)没问题,但是把数据写回到sqlserver服务器时候把错,提示“中找不到服务器 'NODE1'。请执行 sp_addlinkedserver 将该服务器添加到 sysservers。”根据网上提供的方法用脚本来解决。select * from sys.servers
--查询到的确实是NODE2sp_dropserver [NODE2]GOsp_addserver [NODE1]GOsp_serveroption 'NODE1','data access', 'true' GO
但是执行,重启服务之后,又报了一个新的错误“其他会话正在使用事务的上下文。”根据:
http://topic.csdn.net/u/20100115/10/3D665083-3EF2-416B-B417-10023B7A1BF3.html
http://topic.csdn.net/u/20100111/00/B3CFF4CC-31B8-42E7-809A-CE22F8648B9B.html
中提示的原因,是由于“SQLSERVER2005不支持在分布式事务处理中存在指向本地的链接服务器(环回链接服务器)”
“链接服务器的属性,居然连着本机。 ”是不是由于解决第一个问题的脚本使我把链接服务器改为本机,那本身是不是第一个问题的解决方法也不对了?
求教大家:)

解决方案 »

  1.   

    ---一种解释查看一下该存储过程中是否有链接服务器指向本地,SQLSERVER2005不支持在分布式事务处理中存在指向本地的链接服务器(环回链接服务器)---又一种解释中文错误信息:此游标不包括正在修改的表,或该表不能通过此游标更新。
      英文错误信息:The cursor does not include the table being modified or the table is not updatable through the cursor.
      其原因是由于计算机名和sql server 2005的servername不一致所致。
      解决方法:
      先执行
      select @@servername
      查看数据库中的servername
      然后执行:
      sp_dropserver ’old_name’
      go
      sp_addserver ’new_name’, local
      其中old_name为select @@servername语句的结果,new_name为主机名
      

  2.   

    言归正传,我是为了解决第一个问题用那个脚本,更改了服务器名称为NODE1,然后出现了第二个问题,是不是本身第一个问题的解决方法(那段脚本)就存在问题?
    而且用那段脚本把服务器名称就应该改为现有的计算机名称,不就是违反了“SQLSERVER2005不支持在分布式事务处理中存在指向本地的链接服务器(环回链接服务器)”吗?是不是那段脚本本身存在问题?抑或是我的情况不适合这种解决方法?