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. C# 数据类型与PostgreSQL 数据类型映射

    Npgsql 是基于ADO.NET 的PostgreSQL 数据驱动. Npgsql 官方 已经提供C# 数据类型与PostgreSQL数据类型的对应映射 地址: http://www.npgsql. ...

  2. hmailserver

    开始使用: www.hmailserver.org 问题 让hmailserver的用户使用各自的中继来发送邮件: http://dagai.net/archives/968

  3. Wix 安装部署(二)自定义安装界面和行为

    上一篇介绍了如何联合MSBuild来自动生成打包文件和对WIX的一些初步认识,http://www.cnblogs.com/stoneniqiu/p/3355086.html . 这篇会在上篇的基础上 ...

  4. [安卓] 5、SeekBar拖动条

    越来越发现这些控件用法大同小异了,这里注意几个函数:seekBar.setSecondaryProgress(0);设置初始进度为0,总共为0~99,对其监听用setOnSeekBarChangeLi ...

  5. [51单片机] TFT2.4彩屏1 [文字显示 画矩形]

    >_<:因为要驱动彩屏,所以这里采用STC90C516RD+单片机[51的89C52也行,就是可能内存在接下来的实验中可能会内存不够],晶振尽量采用高一点的,这里采用24MHz的. > ...

  6. 比较任意两个JSON串是否相等(比较对象是否相等)JAVA版

    废话少说,直接入题. 在面向对象语言中,经常会比较两个对象是否相等,而比较的大多是实体类实例,也就是封装数据的那些类实例,或者是Map.List互相嵌套成的复杂数据结构. 比较对象是否相等,常见的思路 ...

  7. AngularJs 基础(60分钟入门)

    AngularJS 是一个创建富客户端应用的JavaScript MVC框架.你仍然需要具有服务端后台,但大多数的用户交互逻辑将放到客户端上处理.它可以创建单页的应用程序,一个页面的应用仅仅需要HTM ...

  8. paip.2013年技术趋势以及热点 v3.0 cao

    paip.2013年技术趋势以及热点 v3.0 cao 作者Attilax  艾龙,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.cs ...

  9. atitit.插件体系设计总结o73.doc

    1. 两大类型:微内核(级联树形结构)与巨内核(管理容器,并联结构). 1 2. 通用插件接口 1 3. 插件的绑定and 初始化 2 4. 微内核插件平台设计 2 5. 参考 2 1. 两大类型:微 ...

  10. shiny server SparkR web展示界面(一)

    1. shiny server简介 shiny-server是一种可用把R 语言以web形式展示的服务,下面就讲讲如何在自己的服务器上构建Shiny Server.下一篇主要介绍如何集成sparkR后 ...