两台数据库PC,分别为:DB1,DB2, 都是Sql Server 2000 企业版,相应的数据库:DB1:DEMO,DB2:TEST。在DB1上新建表:CREATE TABLE [dbo].[Visit200601] (
[ID] [uniqueidentifier] NOT NULL ,
[Code] [int] NOT NULL ,
[UserIP] [varchar] (16) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[VisitDate] [datetime] NOT NULL ,
[UserID] [uniqueidentifier] NULL
) ON [PRIMARY]
GOALTER TABLE [dbo].[Visit200601] WITH NOCHECK ADD
PRIMARY KEY CLUSTERED
(
[ID],
[Code],
[UserIP],
[VisitDate]
) ON [PRIMARY]
GOALTER TABLE [dbo].[Visit200601] ADD
CONSTRAINT [UQ_Visit200601_id] UNIQUE NONCLUSTERED
(
[ID]
) ON [PRIMARY] ,
CONSTRAINT [CHK_Visit200601_VisitDate] CHECK ([VisitDate] >= '2006-01-01' and [VisitDate] < '2006-02-01')
GO
在DB2上新建表:CREATE TABLE [dbo].[Visit200602] (
[ID] [uniqueidentifier] NOT NULL ,
[Code] [int] NOT NULL ,
[UserIP] [varchar] (16) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[VisitDate] [datetime] NOT NULL ,
[UserID] [uniqueidentifier] NULL
) ON [PRIMARY]
GOALTER TABLE [dbo].[Visit200602] WITH NOCHECK ADD
PRIMARY KEY CLUSTERED
(
[ID],
[Code],
[UserIP],
[VisitDate]
) ON [PRIMARY]
GOALTER TABLE [dbo].[Visit200602] ADD
CONSTRAINT [UQ_Visit200601_id] UNIQUE NONCLUSTERED
(
[ID]
) ON [PRIMARY] ,
CONSTRAINT [CHK_Visit200601_VisitDate] CHECK ([VisitDate] >= '2006-02-01' and [VisitDate] < '2006-03-01')
GO
建立链接服务器在DB1上建立链接服务器
exec sp_addlinkedserver
@server='DB2',
@srvproduct='',
@provider='SQLOLEDB',
@datasrc='DB2'
go
exec
sp_addlinkedsrvlogin
@rmtsrvname = 'DB2',
@useself = 'false',
@rmtuser = 'sa',
@rmtpassword = 'password'
go
在DB2上建立链接服务器
exec sp_addlinkedserver
@server='DB1',
@srvproduct='',
@provider='SQLOLEDB',
@datasrc='DB1'
go
exec
sp_addlinkedsrvlogin
@rmtsrvname = 'DB1',
@useself = 'false',
@rmtuser = 'sa',
@rmtpassword = 'password'
go
设置相应的属性值
在DB1上更改
Exec sp_serveroption 'DB2', 'lazy schema validation', 'true'在DB2上更改
Exec sp_serveroption 'DB1', 'lazy schema validation', 'true'创建相应的视图
在DB1上创建
create view vVisitList as
select * from visit200601
union all
select * from DB2.test.dbo.visit200602在DB2上创建
create view vVisitList as
select * from DB1.demo.dbo.visit200601
union all
select * from visit200602执行查询
SELECT * FROM vVisitList 没有问题,可以正常执行执行添加
set STATISTICS IO on
set xact_abort on
INSERT INTO vVisitList values(newid(),'1001','127.0.0.1','2006-01-14',null)出现问题,问题描述:
服务器: 消息 7391,级别 16,状态 1,行 1
该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。
[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]
OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。
后来到网上查了一下相应的问题解决方案,我按照
http://www.studycn.org/it/sjkxg/4515.htm
这里的方法进行了相应的更改。但是问题依旧。
实在不知道问题出在哪里,请各位帮忙看看问题出在哪里,谢谢了!!!
我查询时没有,在向一远程数据库中插入就出现了
插入数据时提示“该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务”不知道怎么解决,哪位高手进来说说啊
操作系统:windows Server 2003 Enterprise + sp1
数据库: Sql Server 2000 + SP4
insert into openrowset('sqloledb','LYH';'RJ';'000',RJ20050823A.dbo.dept)(dept_id,dept_name,status) values('001','测试','0')
和这种我全试了还是不行的
--添加数据
insert into 自定义名.数据库名.dbo.表名(列1,列2,...) values(值1,值2,...)
set xact_abort on 这句还报错误吗??
你提供的方法行不通
to zlp321002:
你的方法也不行
我原来只在DB1上做下面所述的更改,而没在DB2上更改,在DB2上更改后,就可以了
http://www.studycn.org/it/sjkxg/4515.htm现在出了一个新的问题,就是防火墙的问题,如果开户防火墙,上面的操作是不能成功的,但是关闭防火墙就OK,现在正在和防火墙作斗争呢