日期:2013-04-29  浏览次数:20629 次

1、如何理解SQL Server的实例
        在项目实施过程中,不少用户会有这样的需求:要求开发一套基于SQL Server的新系统,这套系统验收通过后,要和一个原有的SQL Server系统合并,共用一个服务器,所以不能为新系统提供单独的服务器(资金上不允许为开发提供单独的服务器)。但是要保障新系统的开发而又不影响旧系统的正常运转,所以要求新系统使用单独的SQL Server服务。在SQL Server 2000以前的版本中,这样的要求是无法满足的,但在SQL Server 2000中,就可以在原有SQL Server实例的基础上,再添加一个实例来处理问题。
        所谓的“实例”,就是一个SQL Server数据库引擎。SQL Server 2000支持在同一台计算机上同时运转多个SQL Server数据库引擎实例。每个SQL Server数据库引擎实例各有一套不为其他实例共享的系统及用户数据库。使用程序连接同一台计算机上的SQL Server数据库引擎实例的方式与连接其他计算机上运转的SQL Server数据库引擎的方式基本相反。由于实例各有一套不为其他实例共享的系统及用户数据库,所以各实例的运转是独立的,一个实例的运转不会受其他实例运转的影响,也不会影响其他实例的运转。在一台计算机上安装多个SQL Server实例,就相当于把这台计算机模仿成多个数据库服务器,而且这些模仿的数据库服务器是独立且同时运转的。
        实例包括默认实例和命名实例两种。一台计算机上最多只要一个默认实例,也可以没有默认实例,默认实例名与计算机名相反,修正计算机名会同步修正默认实例名(SQL Server 7.0只能被安装为默认实例,在修正计算机名后,会导致SQL Server服务无法启动,需求执行SQL Server安装程序进行自动修复才能处理启动问题),客户端连接默认实例时,将使用安装SQL Server实例的计算机名。
        在同一台计算机上安装SQL Server 7.0和SQL Server 2000时,由于SQL Server 7.0只能安装为默认实例,所以应该先安装SQL Server 7.0,将SQL Server 2000安装为命名实例。或者在安装SQL Server 2000的时候,指定安装为命名实例。

一台计算机上可以安装多个命名实例,客户端连接命名实例时,必须使用以下计算机名称与命名实例的实例名组合的格式:
computer_name\instance_name

 

2、客户端如何与SQL Server交互
        从客户端发送Transact-SQL语句到SQL Server服务器,到服务器处理完成并将结果前往给客户端的完整过程如下:
        (1)用于SQL Server的Microsoft OLE DB提供程序、SQL Server ODBC驱动程序或DB-Library DLL生成TDS数据包。
        (2)TDS数据包被传递给SQL Server客户端Net-Library。
        (3)客户端Net-Library将TDS数据包封装为网络协议数据包。
        (4)在服务器上,服务器Net-Library接收网络协议数据包。并且由ODS(Open Data Services)担任析取TDS数据包,并将结果传递给关系数据库服务器。
        (5)关系数据库服务器担任处理TDS数据包的内容。
        (6)如果需求将结果前往给客户端时,则由ODS将处理结果生成TDS数据包,并传递给服务器Net-Library。
        (7)服务器Net-Library担任TDS数据包封装为网络协议数据包,然后传递回客户端Net-Library。
        (8)客户端Net-Library将网络协议数据还原成TDS数据包,并转给上层的数据库接口,例如Microsoft OLE DB提供程序、SQL Server ODBC驱动程序或DB-Library DLL等。
        (9)Microsoft OLE DB提供程序、SQL Server ODBC驱动程序或DB-Library DLL将TDS数据包还原为使用程序可以接受的“结果集”。
        无论存取SQL Server的使用程序能否与SQL Server实例在同一台单机上,使用程序与SQL Server实例通信都会经过上述过程。


3、TDS、NET-Library和网络协议
         TDS(表格格式数据流协议):SQL Server使用一个称为表格格式数据流 (TDS) 的使用程序级协议进行客户端使用程序与 SQL Server 之间的通讯。TDS 数据包封装在 Net-Library 所使用的协议栈生成的数据包中。
        例如,如果使用的是 TCP/IP 套接字 Net-Library,TDS 数据包就封装在基础协议的 TCP/IP 数据包中。将结果集发送回使用程序的数据包的内容取决于能否在传递给数据库引擎的 Transact-SQL 语句中指定了 FOR XML:
       如果没有指定 FOR XML,数据库引擎将关系结果集发送回使用程序。TDS 数据包中包含结果行集,每行包括一列或多列,就像在 SELECT 语句的选择列表中指定的那样。
       如果指定了 FOR XML,数据库引擎将 XML 文档以流的方式前往给使用程序。在 TDS 数据包中,XML 文档被格式化为单个的、长 Unicode 值,每个数据包的大小约为 4 KB。
       可以配置 SQL Server 数据包大小,即 TDS 数据包大小。大多数客户端上的 TDS 数据包大小默认为 4 KB(DB-Library 使用程序默认为 512 字节),经过测试证明,在几乎所有的方案中,这是最佳的 TDS 数据包大小。TDS 数据包大小可以比基础协议中的数据包大。如果是这种情况,发送数据包的计算机上的协议栈自动将 TDS 数据包分解成适合协议数据包大小的单元,客户端计算机上的协议栈则在接收计算机上将 TDS 数据包重新组合在一同。

          Net-Library和网络协议: SQL Server使用一个称为 Net-Library 的动态链接库 (DLL) 与特定的网络协议通讯。婚配的 Net-Library 对在客户端和服务器计算机上必须是活动的,才能支持所需的网络协议。
        例如,若要使客户端使用程序能通过 TCP/IP 与特定的 SQL Server 实例通讯,必须在客户计算机上将客户端 TCP/IP 套接字 Net-Library (DBNETLIB.dll) 配置为与那台服务器连接,同时服务器 TCP/IP 套接字 Net-Library (SSNETLIB.dll) 必须在服务器计算机上监听。
 &nbs