笔记27-徐 SQLSERVER命名管道工作原理
笔记27-徐 SQLSERVER命名管道工作原理
1 --SQLSERVER命名管道工作原理 2 --SQL首先在服务器上创建一个命名管道并监听之,然后客户端即连接到这个命名 3 --管道上来进行对话。对每一个客户端命名管道连接请求SQL都会创建一个新的 4 --管道实例来与之通信 5 6 --命名管道的名称 7 --SQL和其他Windows程序一样都采用UNC格式标识命名管道 8 --例如:\\server\Pipe\path_name 9 10 11 --上述命名管道标识字符串可以分为三部分: 12 --\\server部分:指定命名管道所在服务器的名字。命名管道便是在此机器上创建的。SQL多用一个 13 --点(.)来表示它正在运行的本地服务器 14 --\Pipe部分:是一个固定的“硬编码”字串(大小写均可),表明是管道协议 15 --\path_name部分:命名管道的名字,可以是多级目录。SQL监听的是两级目录,即\sql\query 16 17 --默认情况下,SQL监听的命名管道名称如下(默认实例和命名实例有不同的管道名字) 18 --默认实例:\\.\pipe\sql\query 19 --命名实例:\\.\pipe\MSSQL$instancename\sql\query 20 21 --上述管道名称pipe 后面的部分可以在安装SQL后使用服务器网络实用工具进行更改 22 --关键:SQL都会创建一个新的管道实例来与之通信!!!!!! 23 24 --在配置管理器里SQL05网络配置-》MSSQLSERVER协议-》命名管道 可以更改管道名称 25 26 --解决命名管道连接问题,最重要就是检查SQL是否监听了命名管道,看errorlog文件,看到它监听的管道名称 27 --Server named pipe provider is ready to accept connection on [ \\.\pipe\sql\query ]. 28 29 30 --客户端的命名管道配置 31 --1、客户端网络实用工具 MDAC数据库接口 32 --右边表中 按顺序启用协议上下顺序决定了连接SQL实例时,客户端超级套接字NET-Library(Dbnetlib.dll) 33 --考虑使用客户端协议的优先顺序,你可以改变它 34 --在配置命名管道协议时,默认情况下是sql\query,名称不完整,连接时客户端超级套接字网络库 35 --会自动补充完整成\\remotecomputername\pipe\sql\query格式 36 --如果命名管道连接出现问题,要保证SQL监听的命名管道名称和客户端连接的默认管道名称是一致的 37 --在SSMS里 np:joe 连接使用默认管道名称 38 39 40 --2、SQL配置管理器 SQLSERVER Native Client 41 --你可以在配置管理器里使用SQLSERVER Native Client数据库驱动配置客户端网络协议 42 --如果客户端机器没有安装SQL管理工具,只能修改注册表 43 44 --3、善用SQL别名 45 46 47 --命名管道连接问题解决步骤 48 --1、SQL已经监听命名管道协议 49 --2、连接的默认管道是否和监听的一致,是否存在错误的SQL别名 50 --3、能ping通SQL服务器IP地址 SQL服务器的计算机名 51 --4、通过SQL服务器的Windows认证 52 --net view \\servername 53 --net use \\servername\IPC$ 54 --用于将计算机与共享的资源相连接(建立磁盘映射),或者切断计算机与共享资源的连接(删除磁盘映射), 55 --当不带选项使用本命令时,它会列出计算机的连接 56 57 --如果以上两条命令出错,检查SQL服务器上的权限问题 58 --5、确保客户端登录帐号有权限访问SQL。为了简化问题,先使用SQL帐号连入去 59 --再检查Windows帐号 60 61 --客户端没有找到命名管道服务器 62 --检查SQL服务端和客户端的命名管道配置 ,和网络连通性 63 64 --命名管道访问服务器权限上有问题,不要忘记那个IPC$共享,没有权限访问IPC$就无法使用 65 --命名管道。 66 --运行net use \\servername\IPC$ 进行测试 67 68 --这个错误大多数情况下因为你使用了权限不足的帐号登录客户端机器,而又使用了权限不足 69 --的帐号登录客户端机器,而又使用Windows身份验证访问SQL引起的 70 71 --Login failed for user'user123' 72 --这类问题多是user123没有权限访问服务器资源,或者没有权限访问SQL。它不是一个连接问题 73 --而是一个SQL访问权限问题 74 75 76 77 ----------------------------------重点:连接建立后如何查看使用的协议--------------------------------------- 78 --在SSMS里输入 79 SELECT spid,net_library,hostname,program_name,nt_domain,nt_username,loginame FROM sys.sysprocesses 80 --不知道为什么spid都是从50开始的 81 --其中net_library说明了该连接使用的协议,如果是LPC,那么代表使用共享内存进行连接 82 83 84 --在CMD下输入net helpmsg 53 85 --53是错误号 可以看到连接错误时显示的错误号代表的意思