SQL Server DT问与答

server

Q: 假设我现在有2台SQL Server (Windows Server 2003 + SQL Server 200 sp3),分别叫DB01和DB02,互相信任,互相把对方加入了Linked Servers的列表,常规访问无任何问题,但是无法启用分布式事务,例子如下:

在DB01上运行下列SQL命令:

begin tran

select top 1 * from item

select top 1 * from db02.production.dbo.item

rollback tran

在第2个select语句处提示The operation could not be performed because the OLE DB provider 'SQLOLEDB' was unable to begin a distributed transaction.
[OLE/DB provider returned message: New transaction cannot enlist in the specified transaction coordinator. ]
OLE DB error trace [OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a].

把begin tran换成BEGIN DISTRIBUTED TRANSACTION,结果相同。

在这2台服务器上,已经同时启用了MS DTC服务,并在Component Service中设定了MS DTC各种安全支持选项全开(步骤如下:

1. Click Start, point to All Programs, point to Administrative Tools, and click Component Services.
2. In the Component Services console, expand Component Services, expand Computers, right-click My Computer, and then click Properties.
3. In the My Computer Properties dialog box, on the MSDTC tab, click Security Configuration.
4. In the Security Configuration dialog box, select the Network DTC Access check box, select the Network Administration check box, select the Network Transactions check box, select the Network Clients check box, select the Transaction Internet Protocol (TIP) Transaction check box, and then click OK.
5. Restart the computer.
)。
因为服务器正在运行任务,所以我没有重新启动(仅仅重新启动了DTC服务).
是什么原因导致无法启动事务呢?

A:

一. (缺) 

二.两台机的MSDTC是否都打开了.

三.MSDTC设置是否正确.
1.打开命令提示,运行"net stop msdtc",然后运行"net start msdtc"。
2.转至"组件服务管理工具"。
3.浏览至"启动管理工具"。
4.选择"组件服务"。
 a.展开"组件服务"树,然后展开"我的电脑"。
 b.右键单击"我的电脑",然后选择"属性"。
 C.在 MSDTC 选项卡中,确保选中了下列选项: 网络 DTC 访问
 网络管理
 网络事务
    XA 事务
 e.另外,"DTC 登录帐户"一定要设置为"NT Authority\NetworkService"。
5.单击"确定"。这样将会提示您"MS DTC 将会停止并重新启动。
  所有的依赖服务将被停止。请按'是'继续"。单击"是"继续。
6.单击"确定"关闭"我的电脑"属性窗口。

四.
MSDTC依赖于RPC,RPC使用的端口是135,测试135端口是否打开.是否有防火墙?如果有先关了防火墙.
telnet IP 135
如果是关闭的打开它.

五.
有的机由于各种原因),SQLOLEDB不能使用分布式事务,更改为"MSDASQL" 的ODBC方式联接.
使用RRAS而不是RAS.(控制面版--管理工具--远程服务管理器)
Check whether you are using Remote Access Server (RAS) to access remote servers. If so, make sure that you have implemented Routing RAS (RRAS). Linked server does not work on RAS because RAS allows only one way communication.

七.检查你的两台服务器是否在同一个域中.
如果不在同一个域中,是否建立可信任联接.

八.如果是WIN2000,升级到SP4

九.升级MDAC到2.6以上,最好是2.8.

十.要安装SQL的最新补丁: sp3a
'全部补丁的位置
http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=9032f608-160a-4537-a2b6-4cb265b80766

'应该安装的补丁sql 2000 sp3
http://download.microsoft.com/download/d/d/e/dde427eb-0296-4eac-a47c-d11a66b03816/chs_sql2ksp3.exe

本人认为:
1、环境是重要的。

2、工具是很重要的。
(1)怀疑是135端口,就用一个检查端口的工具去看,发觉端口没有问题。
(2)下了http://download.microsoft.com/download/complus/msdtc/1.7/nt45/en-us/DTCPing.exe
工具,测试,看了readme,说由三步,第一步验证名称,第二步验证rpc,第三步dtc,好,我居然发现名字验证都没通过,
总于发现tcp/ip的netbios被关掉了,咳 dtc 居然一定要名称。不用IP. I 服了 he了。

3、出现远地的计算机只能用IP地址访问不能进行名字访问,我碰到如下。
     (1)、路由的设置的问题,俩个路由是否确定无误(VPN能连通并不代表名字访问能成功,版本一致,允许芳临访问,无其他异常)。
     (2)、是否出现错误日志DCOM,出现此错误也将不能进行名字访问。
     (3)、相应tcp/ip的netbios是否打开。

时间: 2024-09-18 19:16:50

SQL Server DT问与答的相关文章

sql server 2008-请问一下数据库的表应该怎么建。新人完全没思路

问题描述 请问一下数据库的表应该怎么建.新人完全没思路 50C 升级包管理一.业务描述1.代码或脚本发生变化时,会自动生成相应的修改日志(需记录修改的对象ID.对象类型.文件路径.修改内容.修改时间.所属模块.所属项目)2.新建一个新的升级包,记录此升级包的相关信息(所对应的BugId.创建人.创建时间.备注.所属项目.状态)3.将1中生成的修改日志拖放到升级包明细中,并设定每条修改日志的顺序号4.右边显示所有项目及项目发布历史(勾选),当发布升级包给到A项目时,记录下当前升级包对于A项目已发布

在Linux 下 访 问MS SQL Server 数 据 库(转载)

server 宁 波 保 税 区 官 委 会 计 算 中 心 董 保 华 ---- Linux 作 为 一 个 免 费 的Unix 类 操 作 系 统, 以 其 开 放 性 源 代 码. 多 任 务.X window 等 特 点 为 众 多 的 用 户 所 采 用, 并 有 很 多 企 业 采 用Linux 来 作 为 其 内 部 网 的 全 功 能 服 务 器(WWW,FTP,Email.DNS). 企 业 的 内 部 网 不 仅 要 提 供 文 本 信 息 的 访 问, 还 要 能 提 供

SQL Server开发人员应聘常被问的问题妙解汇总

server|问题 目前在职场中很难找到非常合格的数据库开发人员.我的一个同事曾经说过:"SQL开发是一门语言,它很容易学,但是很难掌握." 在面试应聘的SQL Server数据库开发人员时,我运用了一套标准的基准技术问题.下面这些问题是我觉得能够真正有助于淘汰不合格应聘者的问题.它们按照从易到难的顺序排列.当您问到关于主键和外键的问题时,后面的问题都十分有难度,因为答案可能会更难解释和说明,尤其是在面试的情形下. 您能向我简要叙述一下SQL Server 2000中使用的一些数据库对

c#-问大家一个关于sql server数据库的问题

问题描述 问大家一个关于sql server数据库的问题 我建的一个表中有一列"超期天数",我想对这一列执行计算,使其等于当前时间减去之前的一个时间.而且在用C#添加数据的时候,以及时间变化的时候,他的值会不断改变,这个该怎么弄?不知道我说的清楚么. 解决方案 不需要不断变化,只要你的程序查询的时候计算就可以了 http://blog.csdn.net/zhengqiqiqinqin/article/details/8451167 解决方案二: 有没有人来帮帮忙,非常感谢! 解决方案三

server-JSP菜鸟问连接SQL SERVER 2008的问题

问题描述 JSP菜鸟问连接SQL SERVER 2008的问题 JSP代码 <%@ page contentType="text/html;charset=utf-8"%> <%@ page import="java.sql.*"%> <% Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance(); String url=&

《SQL入门经典(第5版)》一一6.5 问与答

6.5 问与答 SQL入门经典(第5版)问:每个INSERT语句是否都需要执行一个COMMIT? 答:不,绝对不需要.如果要向表里插入几十万条记录,建议每5 000~10 000条记录执行一个COMMIT语句,具体数值取决于临时回退区域的大小(向数据库管理员寻求建议).当回退区域没有空间时,数据库可能停止或工作不正常. 问:ROLLBACK命令如何撤销一个事务? 答:ROLLBACK命令清除回退区域里的全部修改. 问:在执行事务过程中,如果99%的事务都完成了,但另外1%出现了错误,能否只重做出

sql server-请问在SQL SERVER里,有两个表的查询问题怎么解决

问题描述 请问在SQL SERVER里,有两个表的查询问题怎么解决 一个teacher表,一个stu_info表,现在要查询teacher表中每个教师教师名和的学生数 解决方案 join一下 select t.name, count(s.teacherid) from teachers t join stu_info on t.id = stu_info.teacherid where s.teacherid=t.name 解决方案二: SELECT tearcher.name, COUNT(

web service-请问sql server如何调用webservice

问题描述 请问sql server如何调用webservice sql server如何调用webservice: webservice中的函数中,参数为string类型,返回值为datatable,sql server怎么调用这个webservice 解决方案 http://www.cnblogs.com/icycore/p/3532197.html 解决方案二: declare @xmlhttp intdeclare @err intdeclare @Get VARCHAR(3000)EXE

如何将 XML 文件导入 SQL Server 2000?

server|xml 导入 XML" target=_blank>XML 文件(Microsoft SQL Server 开发组供稿,questions@sqlmag.com) 问:如何将 XML" target=_blank>XML 文件导入 SQL Server 2000? 答:您可以用三种方发将 XML" target=_blank>XML 文件导入 SQL Server 2000.下面介绍这几种方法. 如果您想将文档的实体和属性提取到相关表中,那么将