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

12 Jan 2011 1:24 AM

一。前言

在使用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 连接问题圣经-命名管道的更多相关文章

  1. SQL Server 连接问题-命名管道

    原文:SQL Server 连接问题-命名管道 出自:http://blogs.msdn.com/b/apgcdsd/archive/2011/01/12/sql-server-1.aspx 一.前言 ...

  2. Sql Server 连接池及其用法

    其实我们一直在使用SqlServer的连接池.在连接字符串中,Pooling为是否启用连接池,默认值为true,表示启用. 与连接池相关的两个重要参数是 Min Pool Size和 Max Pool ...

  3. SQL Server 连接问题-TCP/IP

    原文:SQL Server 连接问题-TCP/IP 出自:http://blogs.msdn.com/b/apgcdsd/archive/2012/02/24/ms-sql-server-tcp-ip ...

  4. 通过sql server 连接mysql

    图文:通过sql server 连接mysql   1.在SQL SERVER服务器上安装MYSQL ODBC驱动; 驱动下载地址:http://dev.mysql.com/downloads/con ...

  5. SQL Server 连接问题案例解析(1)

    SQL Server 连接问题案例解析(1) 转载自:http://blogs.msdn.com/b/apgcdsd/archive/2015/04/27/sql.aspx?CommentPosted ...

  6. ASP.NET连接数据库时,提示“用户 'sa' 登录失败原因: 未与信任 SQL Server 连接相关联

    用ASP.NET连接数据库时,提示"用户 'sa' 登录失败.原因: 未与信任 SQL Server 连接相关联.".解决方法:首先检查是不是web.config文件内的用户名密码 ...

  7. SQL Server 2000:提示“未与信任SQL SERVER连接相关连”错误

    在使用“用户模式”登陆SQL Server 2000时提示“未与信任SQL SERVER连接相关连”错误,因为在安装SQL Server时选择“仅Windows”模式,所以所有用户都不可以登陆. 解决 ...

  8. 【J2EE】Java连接SQL Server 2000问题:“com.microsoft.sqlserver.jdbc.SQLServerException:用户'sa'登录失败。该用户与可信SQL Server连接无关联”

    1.问题现象 E:\JSP\HibernateDemo\HibernateDemoProject\src\sine>java ConnectSQLServerConnect failed!com ...

  9. [ASP.NET]SQL Server 连接字符串和身份验证

    SQL Server .NET Data Provider 连接字符串包含一个由一些属性名/值对组成的集合.每一个属性/值对都由分号隔开. PropertyName1=Value1; Property ...

随机推荐

  1. 【Python自动化运维之路Day6】

    1.递归思考题,阶乘 使用递归方式(函数)计算: 1*2*3*4*5*6*7*8*9*10的值 def func(num): if num==1: return 1 return num*func(n ...

  2. iOS开发常用的第三方类库

    在iOS开发中不可避免的会用到一些第三方类库,它们提供了很多实用的功能,使我们的开发变得更有效率:同时,也可以从它们的源代码中学习到很多有用的东西. Reachability 检测网络连接 用来检查网 ...

  3. 自己动手写客户端UI库——事件机制(设计思路大放送)

    在上一篇文章中我们创建了一个Button控件,并把这个控件显示在界面上, 在这一篇文章中,我们将为这个控件增加一个事件和一个方法 一:怎么绑定事件的问题 在Winform中,我们对一个按钮绑定事件的方 ...

  4. Android 动态获取ListView的高度

    public static void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = l ...

  5. Atitit.人力资源管理原理与概论

    Atitit.人力资源管理原理与概论 1. 人力资源管理 第一章 人力资源管理概述 第二章 人力资源理论基础与发展演变 第三章 人力资源规划 第四章工作分析与工作设计 第五章 员工招聘与录用 第六章 ...

  6. Atitit.提升软件稳定性---基于数据库实现的持久化 循环队列 环形队列

    Atitit.提升软件稳定性---基于数据库实现的持久化  循环队列 环形队列 1. 前言::选型(马) 1 2. 实现java.util.queue接口 1 3. 当前指针的2个实现方式 1 1.1 ...

  7. paip 自定义输入法多多输入法词库的备份导出以及导入

    paip 自定义输入法词库的备份导出以及导入 作者Attilax 艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/ ...

  8. IOS行货自动打包

    通常打包采用xcodebuild和xcrun两个命令,xcodebuild负责编译,xcrun负责将app打成ipa.   常见步骤如下: 1.清理工程 /usr/bin/xcodebuild -ta ...

  9. 关于EntityFramework连接Oracle的详细教程

    研发环境需安装的组件 Oracle Developer Tools for Visual Studio 2015 - MSI Installer 来自Oracle官网. 为Visual Studio ...

  10. [原创]推荐一款强大的.NET程序内存分析工具.NET Memory Profiler

    [原创]推荐一款强大的.NET程序内存分析工具.NET Memory Profiler 1 官方网站:http://memprofiler.com/2 下载地址:http://memprofiler. ...