开发者社区> 技术小胖子> 正文

MSDE2000与SQLExpress2005共存时如何远程访问

简介:
+关注继续查看

昨天被一个数据库的问题折腾了半天,把解决过程记录下来。

 

[项目背景]

基于MSSQL的一个项目,考虑到用户环境可能没有数据库系统,因此自带了MSDE 2000 SP4,允许用户选装。整个项目由多个服务构成,允许分布式安装,因此安装MSDE时开启了远程访问。

PS:我知道分布式系统还允许用户用MSDE确实挺BT的,不过项目就这么要求的,没办法。

 

[问题]

在一台Windows Server 2008上部署系统,选择安装MSDE,结果数据库实例无法连接,导致安装失败。

先用osql.exe尝试连接了一下:

 


  1. osql.exe -S x.x.x.x\InstanceName -U sa -P PASS 

连接失败,无论本机还是远程都不行,排除了防火墙问题。

用svrnetcn命令检查协议,有TCP/IP协议,端口号是随机的45592,然后再用osql.exe指定端口号连接了一下:


  1. osql.exe -S x.x.x.x\InstanceName,45592 -U sa -P PASS 

这回成功了,而且本机和远程都能连上。

 

[分析与解决]

对应用程序来说,要访问远程服务器上的MSDE,它是如何知道该连接哪个端口呢?在启用了TCP/IP协议的情况下,sqlservr.exe(MSSQL服务程序)除了开启指定的tcp端口(比如本例中的45592),还会开启一个固定的udp 1434。这样应用程序先通过udp询问,得到指定实例对应的tcp端口号,再发起连接。

执行“netstat -ano | findstr 1434”看了一下,果然没有udp1434,但tcp 45592是处于监听状态的。

为了对比,特意找了另一台正常的机器看了一下,有udp 1434的监听,进程就是msde的服务进程sqlservr.exe。

看来是有程序干扰了MSDE的服务监听udp 1434,但又肯定不是端口冲突,没有进程在使用这个端口。进系统服务看了一下,结果发现这台机器上还随着Visual Studio 2005安装了SQL Express 2005(实例名sqlexpress),但几个服务都没有处于启动状态。

对MSSQL 2005系列来说,udp 1434不再由sqlservr提供了,而是改到了一个叫SQL Server Browser的服务上,看来MSDE在启动的时候,受2005的影响(虽说sqlbrowser服务并没有启动),不知出于什么原因,没有开启udp1434或是开启失败了,导致命名实例无法解析。

net start一下这个sqlbrowser服务,猜测它会接管对两个命名实例的解析,满心欢喜的以为问题能解决,结果对2005的实例能解析,msde的实例依然不行,晕倒。

开始上网查阅资料,无果。

为什么sqlbrowser服务不解析msde的实例呢?尝试用调试方式启动了sqlbrowser,想碰碰运气,这个文件在 C:\Program Files\Microsoft SQL Server\90\Shared 目录下:


  1. C:\Program Files\Microsoft SQL Server\90\Shared>sqlbrowser.exe -c 
  2. SQLBrowser: starting up in console mode 
  3. SQLBrowser: starting up SSRP redirection service 
  4. SQLBrowser is successfully listening on ::[1434] 
  5. SQLBrowser is successfully listening on 0.0.0.0[1434] 
  6. [8052]: Waiting for next request... 
  7. [6676]: Waiting for next request... 
  8. [6676]: Received request... 
  9. [8052]: Received request... 
  10. [6676]: Waiting for next request... 
  11. [8052]: Waiting for next request... 

然后再用osql连接,居然成功了,远程也可以了。

为何服务方式不行而命令行可以?两者最大的区别应该是运行帐号的问题,去服务里查了一下,SQL Server Browser服务是用Network Service帐户启动的,而产品中安装MSDE时用的是admin权限,猜测sqlbrowser以服务方式启动时,尝试去读MSDE的某些配置失败,因此无法为其提供解析服务。

把sqlbrowser服务切换到local system下,再试,一切正常了。为了防止有缓存的问题,特意重启了机器,证明确实是OK了。

 

[解决方案]

原因是找到了,不过只能说是找到了MSDE和SQL Express并存的方法,对于产品来说,问题还未解决,想了想,有以下几种解决方案:

方案一:

完全卸载SQL Express 2005,保证机器上只有MSDE,没有冲突就没有问题。不过对于一个产品来说,对用户的环境要求就更高了一些。

方案二:

开启SQL Server Browser服务,并且确保合适的帐户权限。这个说实话,让用户来处理有点不合适,由安装程序来做,复杂度会增加不少。

方案三:

安装MSDE时指定端口号,应用程序连接时一律用明确的端口号连接,比如C#,连接串写成:


  1. Server=IP\INSTANCE,PORT;Database=DB;Uid=USER;Pwd=PASS 

这样似乎修改代价最小。至于如何修改MSDE端口号,这个在安装时是没法指定的,可以由安装程序修改注册表,再重启服务。

注册表键值位于 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SQL Server/实例名/MSSQLServer/SuperSocketNetLib/Tcp,修改其下的TcpDynamicPorts和TcpPort为需要的值,注意不要和已有端口冲突,否则服务起不来。

 

[补充]

微软官方的这篇文章挺不错,http://msdn.microsoft.com/zh-cn/library/ms181087(SQL.90).aspx





     本文转自 BoyTNT 51CTO博客,原文链接:http://blog.51cto.com/boytnt/781547,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云Serverless Kubernetes通过Ingress提供7层服务访问
在阿里云Serverless Kubernetes集群中,我们可以通过LoadBalancer Service对外提供四层服务访问,同样我们也可以通过Ingress来对外提供七层服务访问,今天主要分享下如何在Serverless Kubernetes集群中提供七层域名服务访问。
6640 0
xming + putty 搭建远程图形化ssh访问ubuntu 14.04
欢迎关注大数据和人工智能技术文章发布的微信公众号:清研学堂,在这里你可以学到夜白(作者笔名)精心整理的笔记,让我们每天进步一点点,让优秀成为一种习惯! putty下载:   http://www.putty.org/     一般我们远程登录linux 服务器,都是使用非加密的 telnet 或者加密的 ssh。
4116 0
DataRabbit 轻量的数据访问框架(05) -- ITableAccesser
(完全限定类名:DataRabbit.Relation.ITableAccesser)       ORM并不能完成所有的事情,有些数据库访问还是需要基于关系来进行,对于那些不提供基于关系进行数据访问操作的纯ORM框架,我认为是不明智的。
671 0
如何让用户只能访问特定的数据库(MSSQL)
为了限定不同厂商的维护人员只能访问自己的数据库,现需要给各个厂商限定权限,让他们登录SQL Server只能看到授权的数据库而无法看到其他数据库。
1238 0
不小心泄露了访问OSS的AccessKey该如何补救?
公司OSS上的资料仅允许公司内部访问,但是若AccessKey不小心泄露的话,任何人都可以通过AccessKey访问公司内部资源。最安全的办法就是更换accessKey,但公司业务太多,更换的成本很大。
5406 0
.NET 分布式架构开发“.NET研究”实战之三 数据访问深入一点的思考
  前言:   首先,感谢朋友们对文章的支持,感谢大家,希望本系列的文章能够真正的对大家起到一点帮助的作用。再次感谢大家。   大家也许想问,什么时候出代码,代码一定会出的,我不想一上来就开始抛出一大堆的代码,然后讲解,架构的设计在思考的过程,思考到了,代码也就水到渠成了。
925 0
21117
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载