SQL Server 默认和命名实例连接问题-TCP/IP 端口

标签:
sql数据库命名实例tcp/ip端口it |
分类: LyncServer |
TCP/IP的基本工作原理这里就不浪费口水了。现在这网络年代,谁不知道TCP/IP啊。不要跟我抬杠说你偏就没听说过TCP/IP阿,真是这样那你得自己去补补课了。
TCP/IP协议有两个基本的东西,一个是IP地址, 另一个是端口号。 在SQL
Server
一、Microsoft SQL
Server
在运行SQL Server 2000的服务器上,运行服务器端网络配置工具(运行svrnetcn.exe即可调出)配置SQL
Server
http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-89/3718.image001.jpgServer
在运行Microsoft SQL Server
2005/2008
http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-89/2350.image002.jpgServer
其实,不论是SQL Server 2000还是SQL Server 2005/2008,配置的结果都是存放在注册表HKEY_LOCAL_MACHINE \SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.\MSSQLServer\SuperSocketNetLib下面的各个项目里。不用管理界面,直接修改注册表也能达到一样的目的。
(要注意,如果你的机器上只有SQL Server 2000的默认实例,那么注册表所在位置会稍有不同,它是HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\SuperSocketNetLib.)
http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-89/4834.image003.jpgServer
配置好网络协议以后,需要重新启动SQL Server服务,让修改生效。启动后,需要检查SQL Server的errorlog,确认这些协议都已经被正常开启。
Shared Memory正常启动,可以看到如下信息。
2009-04-12 10:04:27.92
Server
Named Pipe正常启动,可以看到如下信息。
2009-04-12 10:04:27.92
Server
TCP/IP正常启动,可以看到SQL Server实例正在侦听的IP地址和Port号。例如:
2009-04-12 10:04:27.92
Server
--侦听服务器上所有IP地址上的1433端口。
或者:
2008-06-12 15:01:58.150
Server
--只侦听指定的IP地址上(172.30.30.80)的1433端口。
这里也顺便回答一个小问题。 有些朋友问, 如果机器的IP地址改变,对SQL Server有没有影响, 需要作什么动作等。答案很简单,
重新启动SQL Server
二、Microsoft SQL Server
2000
现在谈谈一个重要的配置即端口号。在服务器端网络配置工具中或者在配置管理器中选中TCP/IP协议,点击Properties按钮,就可以查看SQL Server侦听的端口号:
(SQL Server 2000服务器端网络配置工具)
http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-89/3323.image004.jpgServer
(SQL Server 2005/2008配置管理器)
这里显示的就是SQL
Server监听的
Microsoft Windows
http://support.microsoft.com/?id=832017
或许你会问,有没有方法查看SQL
Server
Active Connections
UDP
上面列出的1434端口是比较有趣的一个端口,详见后面的内容。
SQL
Server支持一台机器安装多套实例,即默认实例和命名实例。对于默认实例,缺省侦听的IP端口是1433。如果你把默认实例的监听端口改为非1433端口,
三、TCP/IP静态端口,动态端口,SQL Server Browser和UDP 1434端口的概念
首先讨论1434
我们都知道
这个设计理念本身是挺好的。但是在2003年,一个叫Slammer的病毒利用SSRP功能组件里的一个bug,诱导SQL
Server服务在UDP端口发出大量网络包,从而导致了网络阻塞,并且使数据库服务瘫痪的严重后果。这个病毒是和SQL
Server相关的迄今为止危害最大的病毒。为了避免这类悲剧事件再次发生,SQL Server
2005
SQL Server browser用
- 拒绝通过网络访问该计算机
- 拒绝本地登录
- 拒绝以批处理作业登录
- 拒绝通过“终端服务”登录
- 作为服务登录
- 读取和写入与网络通信(端口和管道)相关的
SQL Server 注册表项
通过这样的设计,可以隔离恶意网络攻击对SQL Server服务本身的影响,并且通过限制SQL Browser登录用户权限的方法,限制了万一SQL Browser受到攻击,对整个服务器的影响。
启动SQL Server Browser后,它将启动并使用
当
当
但是,如果
-
在未完全指定所有参数(例如
TCP/IP 端口或命名管道)的情况下,组件尝试连接到命名实例。 - 生成或传递其他组件随后要用来进行重新连接的服务器/实例信息的组件。
- 未提供端口号或管道就连接到命名实例。
- 在未使用
TCP/IP 1433 端口的情况下,将 DAC 连接到命名实例或默认实例。 - 枚举
SQL Server Management Studio、企业管理器或查询分析器中的服务器。
如果应用程序通过网络访问
- 必须更新和维护客户端应用程序代码才能确保它连接到正确的端口。
- 如果服务器上的其他服务或应用程序占用了您为每个实例选择的端口,则会导致
SQL Server 实例不可用。
所以SQL Browser这个服务做的事情虽然很简单,但对正常的客户端连接非常重要。如果某些客户端连不上SQL Server,报告“SQL Server doesn't exist or access denied”,可以尝试指定端口,看看能不能连上。如果这样能够连上,一般是因为UDP 1434在网络上被禁用了,需要在防火墙或者网关上打开这个端口。
SQL Browser本身很少出现问题。不过由于其设计比较简单,一共只有4个线程在接受SSRP的包(2个给IPv4,2个给IPv6)。因此一旦这些线程都因为异常而终止的话,可能会出现SQL Browser服务运行正常但是连接命名实例有问题的情况。这个时候你会在Windows的事件日志里看到以下错误:
The SQLBrowser processing of requests
against a particular IP address has encountered a critical error.
Processing of requests on this address has
been
微软已经有发布了一个补丁程序来解决这个问题,参见:
http://support.microsoft.com/kb/2526552
另外需要注意的是SQL
Browser启动账号要有
再来讨论静态端口。本文一开头提及如何修改SQL Server
另外,万一指定的端口已经被占用时,SQL Server
如果把SQL
Server
动态配置端口是否意味着SQL Server
四。客户端的TCP/IP协议配置
大多数情况下在客户端你不需要进行配置,因为TCP/IP协议默认是启用的。和命名管道一样,可以使用客户端网络实用工具进行配置TCP/IP协议。客户端应用程序都是通过加载SQL Server的数据驱动控件做SQL Server连接的。现在客户端数据驱动库主要有2种:
1.MDAC (Microsoft
运行cliconfg.exe或从开始-->程序-->Microsoft SQL Server -->客户端网络实用工具即可调出。
http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-89/7217.image006.jpgServer
客户端网络实用工具中左边是禁用的协议,右边的是启用的协议。如果右边没有TCP/IP协议,则点击Enable按钮启用它。 选中TCP/IP后点击属性(Properties)按钮即可查看客户端连接的缺省的TCP/IP端口。缺省情况下1433(参考图4)。如果服务器默认实例(不是命名实例)监听的端口不是1433,那么你需要在这里把default port作相应的改变。当然你可以像在命名管道篇中介绍的那样创建服务器别名特别指定服务器的端口也可以。对于命名实例, 客户端网络库会利用UDP 1434端口查询服务器命名实例的监听协议信息。
http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-89/3857.image007.jpgServer
可以在客户端配置SQL Server别名,以明确指定连接到SQL Server所使用的协议。注意在别名中可以指定端口,也可以使用动态查询端口功能。
http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-89/4810.image008.jpgServer
当默认实例被配置为侦听一个非1433端口我们就可以通过配置默认端口或者别名来让客户端程序找到默认实例。
配置的信息保存在注册表里,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SuperSocketNetLib子目录下面。也可以直接改值,一样能达到效果。
http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-89/7838.image010.jpgServer
2. SQL Server Native Client
在一台没有安装过SQL Server 2005或者2008的机器上,缺省不会安装SQL Server Native
Client。在安装
如果安装有SQL Server
图
如果没有安装这个工具,可能就需要直接修改注册表了。Microsoft SQL Server Native Client 9.0的信息存放在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SNI9.0下面,Microsoft SQL Server Native Client 10.0的信息存放在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SNI10.0下面。
http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-89/2477.image012.jpgServer
五。
步骤1:
为了验证SQL Server
exec master..xp_readerrorlog
在结果栏,如果看到类似如下一行则表明SQL Server已经监听了TCP/IP:
2000-08-31 21:47:01.52
server
2000-08-31 21:47:01.52
server
2000-08-31 21:47:01.53
server
如果发现SQL
Server
步骤2:
使用客户端网络实用工具检查客户端的连接协议配置,确保客户端启用了TCP/IP。当然,客户端连接的缺省端口需要和SQL服务器监听的一致。另外,如果有别名,需要仔细查看其指定的端口是否正确。如果客户端的别名设置错误,也会引起连接问题。
步骤3:检查网络连通性。
要确保不但能够ping通
169.254.173.244
如果连ping IP
步骤4:使用TELNET命令检查SQL
要验证SQL Server
TELNET 192.168.1.1 1234
如果TELNET成功,那么结果将是一个只有光标在闪的黑色屏幕。如果不成功, 那么你会得到出错的信息。需要根据这些出错信息继续排查问题。
步骤
和命名管道一样,需要确保客户端登录(login)帐号有权限访问SQL Server。有关这方面内容请参考命名管道篇。
需要注意的是,如果你使用Windows
欢迎关注我的微博