Condividi tramite


SQL Server 连接问题圣经-命名管道 (4)

 

. 一些常见的连接问题

连接问题一

[Named Pipes]SQL Server does not exist or access
denied.

[Named Pipes]ConnectionOpen (Connect()).

这个连接错误多是因为客户端没有找到命名管道服务器(也就是SQL Server)造成的。

解决方法:

1)检查网络连通性,如ping等,确认SQL Server已经启动。

2)检查SQL server 服务器端和客户端的命名管道配置。

连接问题二:

Login failed for user ‘NULL’或Login failed for user anonymous

这个错误基本上意味着网络连通性没有问题, 只是使用命名管道访问服务器有权限上的问题。不要忘记那个IPC$共享哦。没有权限访问IPC$就无法使用命名管道。可以运行“net use \\servername\IPC$”命令测试一下。

大多数情况下这个错误是因为你使用了权限不足的账号登录客户端机器,而你又使用Windows authentication 访问SQL Server 引起。比方说你使用客户端机器的本地帐号登录,同时使用了windows
authentication方式访问SQL Server。 由于客户端本地帐号没有权限访问服务器的资源,必然会导致访问失败。
解决方法就是使用域的帐号重新登录客户端机器,同时确保该域帐号已经加入到SQL Server 的login里面。还有另外一个方法就是使用SQL Server 帐号而不是windows帐号尝试连接SQL Server,并且使用TCP/IP 协议。不要忘了,即使使用SQL帐号,如果协议是命名管道,也是需要Windows
认证的。

连接问题三:

Login failed for user 'User123'.

这类问题多是User123没有权限访问服务器的资源,或没有权限访问SQL
Server。应该不是一个连接问题而是一个SQL Server访问权限(即SQL
Server的身份验证)问题了 J

. 友情贴士(Tips)

1.连接建立后,如何查看使用的协议呢?可以在SQL
Server 2000的Query Analyzer或者SQL
Server 2005/2008得Management Studio中运行如下语句:

Select Net_library, hostname, program_name, nt_domain,
nt_username, loginame from

master..sysprocesses where spid>50

其中的net_library字段说明该连接使用的协议。注意如果你看到协议是LPC,那么它代表是使用shared memory 连接的。

2.当使用来自 SQL Server 7.0 或其早期版本的 SQL Server 客户端连接组件时,在连接到 SQL
Server 2000 的命名实例之前,必须使用客户端网络实用工具设置别名.另一个方法是安装MDAC
2.6或以后更高的MDAC版本.只有MDAC2.6或更高版本才有能力不用客户端别名连接到SQL
Server 2000的命名实例.

3.除了使用SQL Server查询分析器(Query Analyzer)测试SQL Server 的连接问题外, 另一个更好的测试工具是ODBC数据库源. 运行ODBCAD32.exe即可调出该工具.使用该工具可以尝试建立连接到SQL server 的系统DSN. 为什么说ODBCAD32.exe工具比较好呢?因为它输出的信息比Query Analyzer的要详细.

比方说连接到不存在的服务器, Query Analyzer中输出的信息是:

而如果ODBC数据源建立ODBC
DSN来测试, 输出的信息是:

   

这个信息不但指出了连接使用的协议,而且显示了一个重要的错误号码如上图的53.

如果使用 NET Helpmsg 查看错误号53,你会发现:

Net helpmsg 53

The network path was not found.

既然是network path not found, 很明显是网络的连通性问题了.

4. 命名管道也可以说是基于命名文件系统 NPFS(Named
Pipe File System)来实现的,相关的驱动程序有npfs.sys等.有兴趣的读者可自行研究.

5.最后贴一个从SQL Server 联机手册里面的一张通讯组件图,希望对理解SQL Server 的连接问题有帮助:

 

 

(共4篇,全文完)