【SQL疑难问题】--跨域访问数据库(未解决)

来源:互联网 发布:知行少年 编辑:程序博客网 时间:2024/06/10 00:54

原文http://topic.csdn.net/u/20100610/17/66fadf93-b284-403b-af27-cae49fdbd840.html?94924

--  整了一上午终于把楼主这个问题给整好了!
--  比如说:在本地 test 数据库 与局域网 245 的 hlldb数据库中 都有一张结构如下的表 t

CREATE TABLE T(
id INT,
name VARCHAR(20)
);

-- 现在假设当 本地 test 数据库 中的 表 t中插入记录行的同时向  局域网 245 的 hlldb数据库 的表t 插入相同的记录行,
-- 实现如下(用触发器实现)

-- Step 1 :创建链接服务器、及其登录授权(在本地 test数据库执行)
--创建链接服务器
-- 示例代码:
-- exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '
-- exec sp_addlinkedsrvlogin  'ITSV ', 'false ',null, '用户名 ', '密码 '

-- 实际操作代码:
exec sp_addlinkedserver   'it245 ', ' ', 'SQLOLEDB ', '192.168.1.245'
exec sp_addlinkedsrvlogin  'it245 ', 'false ',null, 'sa', 'go2wan@szty'

-- Step 2 :创建触发器(在本地 test数据库执行)
CREATE TRIGGER tr_in_t on [dbo].[t]
FOR INSERT
AS
BEGIN
  SET NOCOUNT ON
  SET XACT_ABORT ON
  DECLARE @id INT, @name VARCHAR(20);
  SELECT @id=id, @name=name FROM inserted;

  INSERT INTO it245.hlldb.dbo.t(id,name) VALUES(@id,@name);
END

INSERT INTO t(id,name) values(1,'luoyoumou1');


-- 如果出现这样的错误:(请参考以下五个网址的文档)
链接服务器"it245"的 OLE DB 访问接口 "SQLNCLI" 返回了消息 "该伙伴事务管理器已经禁止了它对远程/网络事务的支持。"。

-- http://hi.baidu.com/wgx331/blog/item/ef81be45deaadc27cffca32e.html
-- http://blog.pfan.cn/jixian/34117.html
-- http://dyuan.blog.sohu.com/16734773.html
-- http://sai5d.blog.163.com/blog/static/62225483200901322939411/
-- http://topic.csdn.net/t/20060523/11/4771841.html

INSERT INTO t(id,name) values(1,'luoyoumou1');

SELECT * FROM t;
SELECT * FROM it245.hlldb.dbo.t;

------------------------------------------------------------------------------------------------------

如上参考,设计出跨域触发器

1)exec sp_addlinkedserver   'pc237_3 ', ' ', 'SQLOLEDB ', '192.168.161.237'
     exec sp_addlinkedsrvlogin  'pc237_3 ', 'false ',null, 'sa', 'infact'

2)

ALTER trigger [serverCross_Trigger]
on [dbo].[A]
for insert
as
begin
DECLARE @a tinyint, @b int,@c nvarchar(50);
  SELECT @a=a, @b=b ,@c=c FROM inserted;
insert into pc237_3.LaoCaoTestDB.dbo.A_ServerTest(a,b,c) values(@a,@b,@c)
end

------------------------------执行某insert语句后,出现下面问题-------------------------------------

——【服务器上的MSDTC不可用】

——解决方法:启动 Distributed Transaction Coordinator 服务。若该服务不让启动,提示与厂商联系,进行如下操作

1、删除注册表中的键:
•HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/MSDTC
•HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSDTC
•HKEY_CLASSES_ROOT/CID
2、停止MSDTC服务:net stop msdtc
3、卸载MSDTC服务:msdtc -uninstall
4、重新安装MSDTC服务:msdtc -install
5、重新启动电脑

关键字:-1073737712(0x3FFFEFF0) COM+损坏 8004e00f

错误消息:
---------------------------
服务
---------------------------
Windows 不能在 本地计算机 启动 Distributed Transaction Coordinator。有关更多信息,查阅系统事件日志。如果这是非 Microsoft 服务,请与服务厂商联系,并参考特定服务错误代码 -1073737712。
---------------------------
确定  
---------------------------

解决办法:

把 C:/WINDOWS/system32/dtclog 这个目录重命名(如果有),然后重新建立该目录。

在命令行下: msdtc -resetlog

-----------------------------------------------------------------------------------------------------------

---------------------------------再次执行时,出现下面问题---------------

——【无法执行该操作,因为链接服务器 "pc237_3" 的 OLE DB 访问接口 "SQLNCLI" 无法启动分布式事务。】

解决方法:

参考文件过于复杂,待以后执行。

原创粉丝点击