笔记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是否已禁用