笔记22-徐 SQL客户端网络配置
笔记22-徐 SQL客户端网络配置
1 --SQL客户端网络配置 2 --客户端应用都是通过加载SQL的数据驱动程序做SQL连接的。目前客户端数据驱动库主要有3种 3 --1、MDAC(Microsoft数据访问组件) 4 --2、SQLSERVER Native Client 5 --3、Microsoft JDBC Provider 6 7 --1、MDAC:这个组件包括传统的ODBC和OLE DB接口,主要是为非.NET的应用服务。 8 --这个组件历史悠久,目前一些老的程序VB VC COM还在使用他。默认Windows 9 --自带MDAC,因此无须特别安装。如果安装SQL客户端应用工具包,则会升级到 10 --一个更新的MDAC版本 11 --但这个组件自SQL2000以后,没什么大的变化,无法使用SQL2005或2008中一些新功能 12 --例如数据库镜像、使用多个活动的结果集等等。因此他是个向后兼容的版本 13 14 --在cmd下运行cliconfg.exe就能够配置MDAC访问组件的网络协议SQLSERVER客户端网络实用工具 15 --使用cliconfg.exe配置的信息保存在注册表中 16 --对MDAC SQL2000 SQL2005 SQL2008有效 17 --HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SuperSocketNetLib\下 18 19 20 --2、SQL SERVER Native Client 21 --SQL SERVER Native Client是在SQL2005中开始引入的用于OLE DB和ODBC的独立数据访问 22 --应用程序编程接口(API)。SQL2005自带的是9.0版本,SQL2008自带的是10.0版本 23 --SQL SERVER Native Client将SQLSERVER OLE DB和SQLSERVER ODBC驱动程序组合成 24 --一个本机动态链接库(DLL)。除了Windows数据访问组件(WindowsDAC,以前为MDAC)提供 25 --的功能外,他还提供新功能。SQL SERVER Native Client可用于创建新应用程序或增强 26 --现有应用程序,使应用程序能够使用SQL2005中新功能,例如多个结果集MARS,用户自定义 27 --数据类型UDT,查询通知,快照隔离和XML数据类型支持等 28 29 --对于新的程序,如果使用的是.NET,如果使用SQL2005和SQL2008中的新功能,应当使用 30 --SQL的.NET FRAMEWORK数据访问接口,该接口是VS2005的.NET FRAMIWORK的一部分。 31 --这是为SQL2005和SQL2008提供的最强大的数据访问组件 32 33 34 --如果开发COM程序,要使用SQL05和SQL08的新功能,应当使用SQL SERVER Native Client。 35 --如果无须使用SQL05 SQL08的新功能,那么可以继续使用MDAC 36 37 --使用新功能:SQL SERVER Native Client 38 --无须使用新功能:MDAC 39 40 --MDAC和SQL SERVER Native Client都支持行版本控制的已提交读事务隔离 41 --SQL SERVER Native Client支持快照事务隔离 42 --行版本控制已提交读事务隔离=已提交读事务 read committed 43 44 45 --在一台没有安装过SQL2005和SQL2008的机器上不会安装SQL SERVER Native Client。 46 --在安装SQL客户端工具时,会安装SQL SERVER Native Client 47 --SQL SERVER Native Client : sqlncli.msi 48 --就算没有安装SQL SERVER Native Client,美彬的打卡程序在我的虚拟机XP里一样可以运行 49 --应该是服务器要有SQL SERVER Native Client或者MDAC,然后连接的话就连接服务器的 50 --SQL SERVER Native Client或MDAC,所以客户端有没有都无关系 51 52 --在配置管理器下的网络协议修改跟注册表修改是一样的 53 --对SQL SERVER Native Client SQL2005 SQL2008有效 54 --9.0:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SNI9.0下 55 --10.0:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SNI10.0下 56 57 --3、Microsoft JDBC Provider 58 --这个驱动程序专供JAVA程序使用,使用机制与MDAC和SQL SERVER Native Client不同 59 --没有专门的网络配置界面 60 61 62 ----------------我想C#连接SQL2000用的是MDAC---------- 63 64 65 --总结: 66 --当一个客户端使用服务器名字和实例名来做连接时,它会先通过UDP1434向SQL Browser 67 --通信,SQL Browser会告诉客户端它想要连接的实例的端口号和管道名字。通过这种机制 68 --SQL的网络配置对客户端是透明的 ,关键:SQL Browser 69 70 71 72 --用户连接协议选择的先后顺序: 73 --1、连接字符串中指定 74 --两个方法指定网络协议: 75 --(1)server关键字 76 --server=[protocol:]server[,port] 77 --protocol可以是 tcp(tcp/ip)\lpc(共享内存)\np(name pipe) 78 --示例: 79 --np:MyServer\Myinstance 80 --连接默认实例,逐个尝试,.NET已经使用TCP连接过去 81 --<DataBase Value="server=jimzhang110.gicp.net;uid=dbtask;pwd=rain1q2w3e4r5t;database=dbdreamlink" /> 82 83 --(2)network关键字 84 --dbnmpntw(name pipe) 和dbmssocn(tcp/ip) 85 --示例:network=dbmssocn 86 87 --两个方法只能使用其一,两个一起使用会报错。如果报错,不会尝试其他网络协议 88 --如果连接字符串没有指定这两个关键字,则继续尝试接下来的几个方法进行连接 89 90 91 92 93 94 --2、客户端别名 95 --在注册表下或者配置管理器里,可以为某个实例设置别名。如果连接字符串中指定的服务器名字 96 --和这里的某个别名一样,就使用别名定义的网络配置做连接 97 98 --如果任何一个使用SQL SERVER Native Client的连接要连接showalias(showalias是别名),他不会 99 --再去找showalias这台服务器,而是使用TCP/IP去找“shasqlpubs”这台服务器。如果连接不成功, 100 --会报错,不会尝试其他网络协议(因为已经知道别名所指的服务器计算机名) 101 102 103 --3、寻找相应数据驱动程序的“LASTCONNECT”注册表记录 104 --在注册表中,每个数据驱动程序(包括MDAC 、SQL SERVER Native Client9.0 和10.0)都会维护一 105 --组LASTCONNECT记录,记录上次连接某个服务器使用的网络配置。 106 --如果不成功,会尝试方法4 107 108 109 110 111 112 --4、按照数据库驱动程序的网络配置优先级选择网络协议,询问SQL Browser动态得知 113 --端口号或管道名字 114 --以上方法都不行,就使用这个方法。这种情况一般发生在第一次连接SQL,或者目标 115 --SQL的网络配置发生变化。 116 117 --两个最常用的网络协议:命名管道 和TCP/IP 118 119 SELECT @@CONNECTIONS 120 EXEC sys.sp_monitor 121 EXEC sys.sp_who 122 123 124 --最佳实践配置SQL服务器以及客户端服务器 125 --(1)禁用RSS 126 --找到如下注册表键值:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\EnableRSS 127 --将其设置为0 128 129 --(2)禁用TaskOffload 130 --HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\DisableTaskOff 131 --将其设置为1 132 133 --(3)禁用TCP Chimney 134 --输入命令行 netsh int ip set chimney disabled 135 136 --(4)禁用TCPA 137 --HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\EnableTCPA 138 --将其设置为0 139 140 141 --重启机器 142 --升级Windows到最新更新版本 143 --检查SQL里面的priority boost 和ligthweight pooling是否已禁用