客户端连服务器时报错:Sqlserver不存在或无法访问

      这几天做一个东西,一台客户端连接另一台服务器数据库,但在客户端访问时总是报错:sqlserver不存在或拒绝访问。

      环境:

            服务器:server2003sp2、sql2005 sp3(具有多个实例)

            客户端:xp

     但是在服务器上一切正常,初步判断为客户端无法连接到服务器数据库,在网上找了很多帖子,大概都是说 Tcp/Ip 端口的问题,但当我将端口1433打开并且用telnet连接到服务器后客户端依旧无法访问,google上找了很久,没找到原因,一次偶然的发现客户端突然可以连接服务器了,奇怪,这是怎么回事,于是仔细检查服务器状况,发现服务里有一个服务被我无意间启动了,就是 SqlServer Browser 服务,查了一下这个服务,发现问题就是出在这里,以下是对这个服务的解释:

     这个服务是SQL Server 2005新增的,这是联机帮助的说明:

  

SQL Server 浏览器程序以 Windows 服务的形式运行。SQL Server 浏览器侦听对 Microsoft SQL Server 资源的传入请求,并提供计算机上安装的 SQL Server 实例的相关信息。SQL Server 浏览器可用于执行下列操作:

浏览可用服务器列表

连接到正确的服务器实例

连接到专用管理员连接 (DAC) 端点

SQL Server Browser 服务 (sqlbrowser) 为数据库引擎和 SSAS 的每个实例提供实例名称和版本号。SQL Server 浏览器随 SQL Server 一起安装,为该计算机上运行的早期版本的 SQL Server(从 SQL Server 7.0 开始)提供此服务。

SQL Server 浏览器可以在安装过程中进行配置,也可以使用 SQL Server 配置管理器进行配置。默认情况下,SQL Server Browser 服务会自动启动:

升级安装时。

SQL Server 2000 实例并行安装时。

安装在群集上时。

安装 SQL Server EnterpriseStandard Workgroup 的命名实例时。

安装 Analysis Services 的命名实例时。

背景:

SQL Server 2000 之前,一台计算机上只能安装一个 SQL Server 实例。SQL Server 侦听 1433 端口传入的请求,此端口由官方的 Internet 号码分配机构 (IANA) 分配给 SQL Server。只有一个 SQL Server 实例可以使用端口,因此当 SQL Server 2000 引入对 SQL Server 多个实例的支持时,便开发了 SQL Server 解析协议 (SSRP),用于侦听 UDP 1434 端口。此侦听器服务用已安装的实例的名称以及实例使用的端口或命名管道来响应客户端请求。为了解决 SSRP 系统的限制,SQL Server 2005 引入了 SQL Server Browser 服务来替换 SSRP

SQL Server 浏览器工作原理

启动一个 SQL Server 实例后,如果为 SQL Server 启用了 TCP/IP VIA 协议,服务器将被分配一个 TCP/IP 端口。如果启用了 Named Pipes 协议,SQL Server 将侦听特定的命名管道。该特定实例将使用此端口(或管道)与客户端应用程序交换数据。在安装过程中,TCP 1433 端口和管道 /sql/query 将分配给默认实例,但服务器管理员可以随后使用 SQL Server 配置管理器进行更改。由于只有一个 SQL Server 实例可以使用端口或管道,因此,会将不同的端口号和管道名称分配给命名实例,包括 SQL Server Express。默认情况下,命名实例和 SQL Server Express 在启用时便配置为使用动态端口,也就是说,当 SQL Server 启动时就分配了可用端口。如果需要,可以为 SQL Server 实例分配特定端口。连接时,客户端可以指定特定端口,但是如果端口是动态分配的,端口号可能会在重新启动 SQL Server 时被更改,因此正确的端口号对于客户端来说是不确定的。

启动后,SQL Server 浏览器将启动并使用 UDP 1434 端口。SQL Server 浏览器将读取注册表,识别计算机上的所有 SQL Server 实例,并注明它们使用的端口和命名管道。当一台服务器具有两个或多个网卡时,SQL Server 浏览器会为 SQL Server 返回其遇到的第一个已启用的端口。SQL Server 浏览器支持 ipv6 ipv4

SQL Server 客户端请求 SQL Server 资源时,客户端网络库将使用 1434 端口向服务器发送一条 UDP 消息。SQL Server 浏览器将用请求的实例的 TCP/IP 端口或命名管道做出响应。然后,客户端应用程序中的网络库将使用所需实例的端口或命名管道向服务器发送请求来完成连接。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值