SQL Server 连接问题圣经-命名管道
SQL Server 连接问题圣经-命名管道 (1)
一。前言
在使用SQL Server 的过程中,用户遇到的最多的莫过于连接问题了。本文将深度讨论SQL Server 连接问题的方方面面,希望能帮你彻底解决SQL server 的连接问题。
SQL Server 支持的通讯协议很多,如命名管道(Named Pipes)、TCP/IP 套接字、共享内存(Shared Memory)等。由于最常用的是前两种即命名管道和TCP/IP套接字,所以我们主要讨论这两种协议的连接问题。先来讨论命名管道,然后我们再讨论TCP/IP。
二。什么是命名管道(Named Pipes)
在Windows 系统中,进程间通信机制有邮槽,管道和套接字等. Windows平台上就管道而言,有命名管道和匿名管道两种。命名管道通过进程间通讯(IPC)机制实现通讯, 利用它能够在同一台计算机的不同进程之间,或在跨越一个网络的不同计算机的进程之间,进行单向或双向的数据通信。具体点说, 命名管道建立在服务器的IPC$共享基础上,通过IPC$共享来进行通讯。管道的名称也是和网络共享类似,都是UNC格式(见后面讨论的命名管道命名格式)。
如果你曾使用命名管道进行编程,你就会发现命令管道利用标准的Win32文件系统API 函数(如ReadFile和WriteFile)来进行数据的收发,与系统基层网络传送协议(如TCP,NETBEUI或IPX等)无关. 客户端使用命名管道连接的基本过程如下:
(1)SQL Server服务器使用CreateNamedPipe函数创建命名管道并对之进行监听.
(2)客户端使用CreateFile()和WriteFile()函数试图连接到服务器的命名管道.
综上所述,
1) 命名管道不是一个基层网络协议
由于命名管道运行在TCP,NETBEUI等基础协议之上,不是一个基层网络传送协议, 所以即使客户机和SQL Server 服务器之间使用命名管道通讯, 你亦需要配置TCP或其它基层网络协议以保证客户机和SQL服务器之间的网络连通性.
2) 命名管道是一个需要通过系统认证的协议
当客户端使用命名管道协议连接的时候, 它会首先访问服务器的IPC$共享。访问IPC$共享必须通过Windows 的认证。通过了这个认证后,才可以真正连接到SQL Server 监听的管道上。所以说命名管道是一个需要通过Windows认证的协议. 这是使用命名管道的最大一项好处,即用它可以直接利用Windows Server内置的安全机制. 如果你没有访问SQL Server 服务器的文件系统的权限(Permission),那么你就无法使用命名管道访问SQL Server。
三。SQL Sever 命名管道工作原理
SQL Server 首先在服务器上创建一个命名管道并监听之,然后客户端即可连接到这个管道上来进行对话。对每一个客户端管道连接请求SQL Server都会创建一个新的管道实例来与之进行通讯。
1. 命名管道的名称。
SQL Server和其它Windows程序一样都采用UNC格式标识命名管道。例如:
\\server\Pipe\path_name
上述命名管道标识字符串可分为三部分
\\server部分: 指定命名管道所在服务器的名字。命名管道便是在此机器上创建。SQL Server 多是用一个点(.)来表示它正在运行的本地服务器。
\Pipe部分:是一个固定的“硬编码”字串(大小写均可)表明是管道协议。
\path_name部分:命名管道的名字。可以是多级目录。SQL Server 监听的是两级目录即\sql\query。
缺省情况下,SQL Server监听的命名管道名称如下:
(默认实例和命名实例有不同的管道名字)
默认实例:\\.\pipe\sql\query
命名实例:\\.\pipe\MSSQL$instancename\sql\query
上述管道名称pipe后面的部分可以在安装 SQL Server 后使用服务器网络实用工具进行更改。
2. 配置或查看SQL Server 2000 监听的命名管道
在SQL Server 2000 服务器上运行svrnetcn.exe调出服务器网络实用工具(英文名是SQL Server Network Utility),或者在"开始"菜单中,指向"程序",接着指向"Microsoft SQL Server",然后单击"服务器网络实用工具"。如果"启用的协议(Enabled Protocals)"框内没有命名管道则从左边选中命名管道并点击启用(Enabled)按钮加入(参考图1)。选中命名管道协议并点击属性按钮(Properties)即可查看或修改SQL Server 监听的命名管道名称(参考图2)。如果刚刚启用命名管道协议那么需要点击OK按钮并重新启动SQL Server 服务才能生效。
(图1:服务器网络实用工具)
(图2:命名管道名称)
3. 配置或查看SQL Server 2005/SQL Server 2008 监听的命名管道
打开SQL Server Configuration Manager,在左侧的面板中展开SQL Server Network Configuration节点,并选中节点下面你想要操作的SQL Server实例。此时在右侧的面板上会看到该实例的各个网络协议是否启用,其中包括命名管道。在协议名字的右侧会显示它当前的状态是否为启用。参考图3。
(图3 SQL Server Configuration Manager)
右键Named Pipes并选择“启用”。然后重启SQL Server实例来使得刚才做的操作生效。
在图3中,选中命名管道协议并点击属性按钮(Properties)即可查看或修改SQL Server 监听的命名管道名称。
(图4)
4. 验证SQL Server 是否真的监听了命名管道
解决命名管道连接问题的重要一步是检查SQL Server是否真的监听了命名管道。
在SQL Server 2000中,为了验证SQL Server 确实监听了命名管道,可以打开SQL Server Query Analyzer (查询分析器),然后运行如下命令:
exec master..xp_readerrorlog
在结果栏,如果看到如下一行则表明SQL Server已经监听了命名管道:
2000-01-13 09:57:37.38 server SQL server listening on TCP, Shared Memory, Named Pipes.
在SQL Server 2005或SQL Server 2008中,我们可以打开SQL Server Management Studio,然后运行:
exec master..xp_readerrorlog
你可以在结果栏中看到它监听的管道名称:
2011-01-12 11:35:37.980 Server Server named pipe provider is ready to accept connection on [ \\.\pipe\sql\query ].
SQL Server 连接问题圣经-命名管道的更多相关文章
- SQL Server 连接问题-命名管道
原文:SQL Server 连接问题-命名管道 出自:http://blogs.msdn.com/b/apgcdsd/archive/2011/01/12/sql-server-1.aspx 一.前言 ...
- Sql Server 连接池及其用法
其实我们一直在使用SqlServer的连接池.在连接字符串中,Pooling为是否启用连接池,默认值为true,表示启用. 与连接池相关的两个重要参数是 Min Pool Size和 Max Pool ...
- SQL Server 连接问题-TCP/IP
原文:SQL Server 连接问题-TCP/IP 出自:http://blogs.msdn.com/b/apgcdsd/archive/2012/02/24/ms-sql-server-tcp-ip ...
- 通过sql server 连接mysql
图文:通过sql server 连接mysql 1.在SQL SERVER服务器上安装MYSQL ODBC驱动; 驱动下载地址:http://dev.mysql.com/downloads/con ...
- SQL Server 连接问题案例解析(1)
SQL Server 连接问题案例解析(1) 转载自:http://blogs.msdn.com/b/apgcdsd/archive/2015/04/27/sql.aspx?CommentPosted ...
- ASP.NET连接数据库时,提示“用户 'sa' 登录失败原因: 未与信任 SQL Server 连接相关联
用ASP.NET连接数据库时,提示"用户 'sa' 登录失败.原因: 未与信任 SQL Server 连接相关联.".解决方法:首先检查是不是web.config文件内的用户名密码 ...
- SQL Server 2000:提示“未与信任SQL SERVER连接相关连”错误
在使用“用户模式”登陆SQL Server 2000时提示“未与信任SQL SERVER连接相关连”错误,因为在安装SQL Server时选择“仅Windows”模式,所以所有用户都不可以登陆. 解决 ...
- 【J2EE】Java连接SQL Server 2000问题:“com.microsoft.sqlserver.jdbc.SQLServerException:用户'sa'登录失败。该用户与可信SQL Server连接无关联”
1.问题现象 E:\JSP\HibernateDemo\HibernateDemoProject\src\sine>java ConnectSQLServerConnect failed!com ...
- [ASP.NET]SQL Server 连接字符串和身份验证
SQL Server .NET Data Provider 连接字符串包含一个由一些属性名/值对组成的集合.每一个属性/值对都由分号隔开. PropertyName1=Value1; Property ...
随机推荐
- SQLite主键自增需要设置为integer PRIMARY KEY
按照正常的SQL语句,创建一个数据表,并设置主键是这样的语句: ), EventType )) 但使用这种办法,在SQLite中创建的的数据表,如果使用Insert语句插入记录,如下语句: INSER ...
- Web的26项基本概念和技术
---恢复内容开始--- Web开发是比较费神的,需要掌握很多很多的东西,特别是从事前端开发的朋友,需要通十行才行.今天,本文向初学者介绍一些Web开发中的基本概念和用到的技术,从A到Z总共26项,每 ...
- FreeIconMaker - 在线创建免费和时尚的图标
在设计一个网站或 Web 应用程序时,你不能否认网页设计工具的重要性,这些工具有助于简化您的任务和完成您的项目.FreeIconMaker.com 是一个免费的在线图标制作工具,您也可以创建自己的模板 ...
- 【Android】应用程序Activity启动过程分析
在Android系统中,有两种操作会引发Activity的启动,一种用户点击应用程序图标时,Launcher会为我们启动应用程序的主Activity:应用程序的默认Activity启动起来后,它又可以 ...
- Atitit.提升稳定性-----分析内存泄漏PermGen OOM跟解决之道...java
Atitit.提升稳定性-----分析内存泄漏PermGen OOM跟解决之道...java 1. 内存区域的划分 1 2. PermGen内存溢出深入分析 1 3. PermGen OOM原因总结 ...
- paip.文件目录操作uAPI php python java对照
paip.文件目录操作uAPI php python java对照 chdir -- 改变目录 chroot -- 改变根目录 dir -- directory 类 closedir -- 关闭目录句 ...
- paip . 解决spring No unique bean of type [com.mijie.homi.search.service.index.MoodUserIndexService]
paip . 解决spring No unique bean of type [com.mijie.homi.search.service.index.MoodUserIndexService] ...
- mac下mysql数据库的配置
这里记录一下. 之前在mac下使用brew install mysql安装,但是安装完成后发现密码不好修改,上网搜了下发现mac下使用命令行安装mysql确实存在很多问题,这一点确实远不如Ubuntu ...
- 如何使用代码动态的获取和设置ImageView的宽度和高度?
http://blog.csdn.net/wulianghuan/article/details/8644144 国内某金融企业的一道面试题:如何在代码中获得一个ImageVIew的高度和宽度? 相信 ...
- iOS相册、相机、通讯录权限获取
iOS相册.相机.通讯录权限获取 说明 这是本人写的一个工具,用以便利的处理各种权限获取的操作,目前提供相册.照相机.通讯录的权限获取操作,参考了 http://www.jianshu.com/p/a ...