Wednesday, October 6, 2010

SQL 'JOIN' - Innner, Outer (left, right)

表A记录如下:
aID        aNum
1           a20050111
2           a20050112
3           a20050113
4           a20050114
5           a20050115

表B记录如下:
bID        bName
1            2006032401
2           2006032402
3           2006032403
4           2006032404
8           2006032408


实验如下:
1.left join

sql语句如下:
select * from A
left join B
on A.aID = B.bID

结果如下:
aID        aNum                   bID           bName
1            a20050111         1               2006032401
2            a20050112         2              2006032402
3            a20050113         3              2006032403
4            a20050114         4              2006032404
5            a20050115         NULL       NULL
(所影响的行数为 5 行)

结果说明:
        left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
B表记录不足的地方均为NULL.

2.right join

sql语句如下:
select * from A
right join B
on A.aID = B.bID

结果如下:
aID        aNum                   bID           bName
1            a20050111         1               2006032401
2            a20050112         2              2006032402
3            a20050113         3              2006032403
4            a20050114         4              2006032404
NULL    NULL                   8              2006032408
(所影响的行数为 5 行)

结果说明:
        仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.

3.inner join

sql语句如下:
select * from A
innerjoin B
on A.aID = B.bID

结果如下:
aID        aNum                   bID           bName
1            a20050111         1               2006032401
2            a20050112         2              2006032402
3            a20050113         3              2006032403
4            a20050114         4              2006032404

结果说明:
        很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.

INNER JOIN 运算

组合两个表中的记录,只要在公共字段之中有相符的值。
语法
FROM table1 INNER JOIN table2 ON table1.field1 compopr table2.field2
INNER JOIN 运算可分为以下几个部分:
部分 说明
table1, table2 记录被组合的表的名称。
field1, field2 被联接的字段的名称。若它们不是由数字构成的,则这些字段必须为相同的数据类型并包含同类数据,但它们无须具有相同的名称。
compopr 任何的关系比较运算子:"=," "<," ">," "<=," ">=," 或 "<>."

说明
可以在 FROM 子句中使用INNER JOIN运算。.这是最普通的联接类型。只要在这两个表的公共字段之中有相符值,内部联接将组合两个表中的记录。
可以使用 INNER JOIN 与部门表及员工表选择每一个部门中的全部员工。反之,可以使用 LEFT JOIN RIGHT JOIN运算创建 outer join,从而选择所有部门(即使有些并没有员工)或所有员工(即使有些尚未分配到部门)。
若试图联接包含 MemoOLE Object数据的字段,会导致错误。
可以联接任何两个相同类型的数值字段。例如,可以联接 AutoNumberLong字段,因为它们类型相似。但不能联接 SingleDouble 类型的字段。
下列示例显示如何在类标识符字段联接类表及产品表:
SELECT CategoryName, ProductName
FROM Categories INNER JOIN Products
ON Categories.CategoryID = Products.CategoryID;

在上面的示例中,类标识符是已被联接的字段,但是它并不包含在查询输出中,因它并非被包含在 SELECT 语句之中。在这个示例中,若要包含联接字段,将字段名包含在 SELECT 语句中, Categories.CategoryID.
也可以使用下列语法,在一个 JOIN 语句中链接多个 ON 子句:
SELECT fields
FROM table1 INNER JOIN table2
ON table1.field1 compopr table2.field1 AND
ON table1.field2 compopr table2.field2) OR
ON table1.field3 compopr table2.field3)];
也可以使用下列语法,嵌套 JOIN 语句:
SELECT fields
FROM table1 INNER JOIN
(table2 INNER JOIN [( ]table3
[INNER JOIN [( ]tablex [INNER JOIN ...)]
ON table3.field3 compopr tablex.fieldx)]
ON table2.field2 compopr table3.field3)
ON table1.field1 compopr table2.field2;
在一个 INNER JOIN 之中,可以嵌套 LEFT JOIN 或 RIGHT JOIN,但是在 LEFT JOIN 或 RIGHT JOIN 中不能嵌套 INNER JOIN。

REF: SQL Server高可用性部署实例

摘要:
本文主要阐述如何实现SQL Server双节点群集高可用性部署实施,通过微软MSCS技术使SQL Server达到企业级安全应用要求。另外 ,本文介绍SQL Server 2005中新增的镜像服务功能,相比MSCS SQL Server 群集,SQL Server数据库镜像是基于软件的高可用性解决方案。
1. 概述
本方案目标是通过微软MSCS技术使SQLServer达到企业级应用要求, 内容包含双节点主动/被动模式群集和主动/主动模式群集。另外 ,本文介绍SQL Server 2005中新增的镜像服务功能,相比MSCS SQL Server 群集,SQL Server数据库镜像是基于软件的高可用性解决方案。
2. 架构设计
本实施方案使用3台服务器实现双节点主动/主动模式SQL Server 2005群集。使用的SQL Server 版本为SQL Server 2005 Enterprice Edition。
2.1.服务器信息
以下清单描述服务器的基本信息,同时包含虚拟服务器的基本设置。

计算机名称
IP
说明
备注
Contoso-DC
192.168.0.1
域控制器
 
Contoso-SQLND1
192.168.0.2
SQL Server群集节点1
 
Contoso-SQLND2
192.168.0.3
SQL Server群集节点2
 
SQLCluster
192.168.0.6
SQL Server群集虚拟IP
Virtual
SQLCluster-DTC
192.168.0.7
SQL Server群集DTC虚拟IP
Virtual
SQLCluster-SQL1
192.168.0.8
第一个SQL Server虚拟服务器
Virtual
SQLCluster-SQL2
192.168.0.9
第二个SQL Server虚拟服务器
Virtual
 
一些服务器未包含在以上清单表中,包括备份域控制器,MOM监控服务器等。
2.2.系统架构
整个系统架构主要分为三部分,“数据物理存储”,“数据服务”以及“域控制器”,在每个部分分别实现高可用性。
数据物理存储
在数据持久性存储方面采用区域网络存储(SAN),实现数据安全和高可用性。
数据服务
数据服务包含两台数据库服务器,通过主机总线适配器(HBA)高速访问 SAN。在两台服务器上安装SQL Server 2005 Enterprice Edition,实现主动/主动模式群集。使用主动/主动模式群集虽然能够充分利用硬件资源,但是需要考虑最坏的情况,即只有一个节点可用的情况下该节点 是否能承受服务负荷。
域控制器
由于整个平台实现基于域环境,因此使用两台服务器实现主域控制器和备份域控制器
 
对于SQL Server 的双节点群集实现可以有两种方式,
SQLCluster1
(图1)
SQLCluster2
(图2)
 
对于主动/被动模式,只有一台群集虚拟服务器可以访问,在某一时间只有一台物 理服务器进行工作,在该物理服务器出故障时,MSCS自动实现切换,虚拟服务器转移到另一台物理服务器。如果采用主动/主动模式对数据库服务器进行群集后 会有两台虚拟数据库服务器,如果群集中的某一个节点出现故作,MSCS控制故障转移,这使另一个正常的节点需要承受两个节点的服务。
下图显示了服务器的物理架构部署,
SQLCluster
(图3)
3. 基础环境
对于基础环境的配置,如果没有了解过群集的相关基础知识,在安装共享磁盘和配置网络的过程中可能会遇到一些问题,建议先了解一下有关方面的知识。本文的附录包含了“共享磁盘安装”的简单介绍。
3.1.基础硬件
一台域控服务器
需要符合域控制器安装条件。
二台SQL Server服务器
由于SQL Server采用主动/主动方式进行群集,除了各自的系统盘外,至少需要4个共享磁盘,一个用于群集仲裁,一个用于DTC,另外两个用于SQL Server虚拟服务器。
群集仲裁:盘符设置为“Q”,卷标设置为“Quorum”。设置容量为800MB。
DTC:盘符设置为“D”, 卷标设置为“MSDTC”。容量为600MB。
SQL Server虚拟服务器1数据盘:盘符设置为“R”,卷标设置为“SQLData1”。
SQL Server虚拟服务器2数据盘:盘符设置为“S”,卷标设置为“SQLData2”。
每台SQL Server服务器需要有两块网络适配器,一块用于数据传输,设置名称为“Public”,另一块用于群集节点间的心跳检测,设置名称为“Heartbeat”。关于心跳网络的配置可参考本文附录。
3.2.基础软件
服务器操作系统均使用Windows Server 2003 Enterprise Edition with SP2。
二台SQL Server服务器依次安装Internet信息服务6.0、分布式事务处理协调器(MSDTC)、Microsoft .NET Framework 2.0以及SQL Server2005客户端组件。
3.2.1. 分布式事务处理协调器的安装
在多计算机环境中安装和配置 SQL Server 2005 之前,必须在要安装 SQL Server 2005 的每台计算机上启用网络 DTC 访问和网络 COM+ 访问。
以下过程在 Windows Server 2003 上启用网络 DTC 访问和网络 COM+ 访问。
1. 单击“开始”,指向“控制面板”,然后单击“添加或删除程序”。
2. 单击“添加/删除 Windows 组件”。
3. 选择“应用程序服务器”,然后单击“详细信息”。
4. 选择“启用网络 DTC 访问”和“启用网络 COM+ 访问”,然后单击“确定”。
5. 单击“下一步”。
6. 单击“完成”。
7. 停止然后重新启动分布式事务处理协调器服务。
8. 停止然后重新启动 Microsoft SQL Server 和其他参与分布式事务的资源管理器服务,例如 Microsoft 消息队列。
 
•. 群集中的SQL Server 节点都必须应用同一远程过程调用 (RPC) 身份验证级别。当计算机运行于不同操作系统,加入工作组或者位于互不信任的各个域中时,DTC 代理不能正确验证 DTC。有关详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=54805。
•. 如果有防火墙,必须打开DTC和RPC所需的端口。有关详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=61914
•. 若要确保DTC设置正确,可使用以下DTC测试工具:
•. DTC Tester。可以从 http://go.microsoft.com/fwlink/?LinkId=61913  下载
•. DTC Ping。可以从 http://go.microsoft.com/fwlink/?LinkId=61915  下载。
3.2.2. Internet 信息服务 6.0安装
在下面的过程中,将安装 Internet 信息服务 6.0。
1. 单击“开始”,指向“控制面板”,然后单击“添加或删除程序”。
2. 在“添加或删除程序”对话框中,单击“添加/删除 Windows 组件”。
3. 在“Windows 组件向导”中,选择“应用程序服务器”,然后单击“详细信息”。
4. 选择“ASP.NET”和“Internet 信息服务(IIS)”,单击“确定”,然后单击“下一步”。
5. 在“完成 Windows 组件向导”页上,单击“完成”。
6. 关闭“添加或删除程序”对话框。
 
注意 SQL Server 2005的一些组件需要用到Internet 信息服务。
 
3.2.3. 安装 SQL Server 2005 客户端工具
如果在基础环境中没有安装 SQL Server20005 客户端工具。在下面的过程中,将安装 SQL Server 2005 客户端工具。
1. 将 SQL Server 2005 安装盘插入 DVD-ROM 驱动器。浏览到“Tools”文件夹,然后双击“setup.exe”。
2. 在“最终用户许可协议”页上,接受许可协议,然后单击“下一步”。
注意   如果系统中缺少某些必需组件,SQL Server 2005 组件更新程序可能会安装这些组件。
3. 在“安装必备组件”页上,单击“下一步”。
4. 在“欢迎使用 Microsoft SQL Server 安装向导”页上,单击“下一步”。
5. 在“系统配置检查”页上,确保没有错误,然后再单击“下一步”继续。
6. 在“注册信息”页上,单击“下一步”。
7. 在“功能选择”页上的“客户端组件”下,右键单击下列组件,然后为这些功能选择“将安装到本地硬盘上”。完成后,单击“下一步”。
   连接组件
   管理工具
   SQLXML 客户端功能
   早期组件
8. 在“错误和使用情况报告设置”页上,保留默认设置的值,然后单击“下一步”。
9. 在“准备安装”页上,检查信息,然后单击“安装”。
10. 在“安装进度”页上,安装完成后,单击“下一步”。
11. 在“完成 Microsoft SQL Server 2005 安装”页上,单击“完成”。
 
注意 SQL Server 2005的安装的时候可以一起安装客户端工具。
4. 部署域控制器
这里只介绍主域控制器和DNS的配置过程。在安装 Windows Server 2003 时,请使用以下参数:

参数
备注
计算机名称
Contoso-DC
 
IP地址
192.168.0.1
 
子网掩码
255.255.255.0
 
首先DNS服务器
192.168.0.1
 
 
在安装域控制器的服务器上完成Windows系统安装后,必须使用管理员身份来进行其他操作。
4.1.升级域控制器
在下面的过程中,将把计算机升级为Contoso.com的域控制器。
1. 单击“开始”,指向“运行”,在“运行”对话框中输入“dcpromo”,然后按Enter。
2. 在“欢迎使用 Active Directory 安装向导”页上,单击“下一步”。
3. 在“操作系统兼容性”页上,单击“下一步”。
4. 在“域控制器类型”页上,选中“新域的域控制器”,然后单击“下一步”。
5. 在“创建一个新域”页上,选中“在新林中的域”,然后单击“下一步”。
6. 在“新的域名”页的“新域的 DNS 全名”中输入 Contoso.com,然后单击“下一步”。
7. 在“NetBIOS 域名”页中,将“域 NetBIOS 名”保留为 CONTOSO,然后单击“下一步”。
8. 在“数据库和日志文件文件夹”页上,单击“下一步”。
9. 在“共享的系统卷”页上,单击“下一步”。
10. 在“DNS 注册诊断”页上,选中“在这台计算机上安装并配置 DNS 服务器,并将这台 DNS 服务器设为这台计算机的首选 DNS 服务器”,然后单击“下一步”。
11. 在“权限”页上,选中“只与 Windows 2000 或 Windows Server 2003 操作系统兼容的权限”,然后单击“下一步”。
12. 在“目录服务还原模式的管理员密码”页上的“还原模式密码”中输入一个密码,确认此密码,然后单击“下一步”。
13. 在“摘要”页上,单击“下一步”。
14. 在“正在完成 Active Directory 安装向导”页上,单击“完成”,结束将计算机升级为域控制器的过程。
15. 单击“立即重新启动”,重新启动计算机。
4.2.创建群集服务帐户和域组
在下面的过程中,将为 SQL Server 群集创建群集服务帐户。
1. 单击“开始”,依次指向“所有程序”、“管理工具”,然后单击“Active Directory 和计算机”。
2. 在“Active Directory 用户和计算机”MMC 中,展开“contoso.com”。
3. 右键单击“用户”,选择“新建”,然后选择“用户”。在“全名”字段中,键入“群集管理员”。
4. 在“用户登录名”字段中,键入 ClusterAdm,然后单击“下一步”。
5. 输入帐户密码,然后单击“下一步”。
6. 单击“完成”,创建群集服务帐户。
 
在下面的过程中,将创建SQL Server Cluster Administrators组,用于在后面的阶段中配置 SQL Server 2005。
1. 在 Contoso-DC 上,单击“开始”,依次指向“所有程序”、“管理工具”,然后单击“Active Directory 用户和计算机”。
2. 展开“contoso.com”,右键单击“用户”,指向“新建”,然后单击“组”。
3. 在“组名”字段中,键入 SQL Server Cluster Administrators。在“组作用域”中选择“全局”。在“组类型”中选择“安全”。单击“确定”。
 
注意   在二台SQL Server服务器上添加Contoso\ClusterAdm群集服务帐户到本地管理员组。
 
5. SQL Server群集
在下面的过程中,将对两台SQL Server服务器实现主动/主动模式群集。
在第一台计算机上安装 Windows Server 2003 时,请使用以下参数:

参数
备注
计算机名称
Contoso-SQLND1
 
Contoso
 
IP地址
子网掩码
首选DNS服务器
192.168.0.2
255.255.255.0
192.168.0.1
 
心跳IP地址
子网掩码
192.168.200.1
255.255.255.252
 
 
在第二台计算机上安装 Windows Server 2003 时,请使用以下参数:

参数
备注
计算机名称
Contoso-SQLND2
 
Contoso
 
IP地址
子网掩码
首选DNS服务器
192.168.0.3
255.255.255.0
192.168.0.1
 
心跳IP地址
子网掩码
192.168.200.2
255.255.255.252
 
 
5.1.创建SQL Server群集
在下面的过程中,将在 Contos-SQLND1 上创建 SQL Server 群集。
1. 使用Contoso\ClusterAdm群集服务帐户登录到 Contoso-SQLND1。
2. 单击“开始”,依次指向“所有程序”、“管理工具”,然后单击“群集管理器”。
3. 在“打开到群集的连接”对话框中,从“操作”下拉列表中选择“创建新群集”,然后单击“确定”。
4. 在“欢迎使用新建服务器群集向导”页上,单击“下一步”。
5. 在“群集名称和域”页上的“群集名称”字段中,键入 SQLCluster,然后单击“下一步”。
6. 在“选择计算机”页上,确保在“计算机名”中指定 Contoso-SQLND1,然后单击“下一步”。
7. 在“正在分析配置”页上,单击“下一步”。
8. 在“IP 地址”页上,输入 192.168.0.6,然后单击“下一步”。
9. 在“群集服务帐户”页上的“用户名”字段中,键入 ClusterAdm,键入为此服务帐户创建的密码,然后单击“下一步”。
10. 在“建议的群集配置”页上,可以单击“仲裁”为仲裁资源选择共享磁盘。这里选择盘符为“Q”卷标为“Quorum”的磁盘为仲裁资源,请单击“下一步”。
11. 在“正在创建群集”页上,单击“下一步”。
12. 在“正在完成新建服务器群集向导”页上,单击“完成”。
5.2.加入节点2到SQL Server群集
在下面的过程中,将把 Contoso-SQLND2 加入 SQL Server 群集。
1. 使用Contoso\ClusterAdm群集服务帐户登录到 Contoso-SQLND2。
2. 单击“开始”,依次指向“所有程序”、“管理工具”,然后单击“群集管理器”。
3. 在“打开到群集的连接”对话框中,从“操作”下拉列表中选择“添加节点到群集”。在“群集或服务器名”字段中,键入 SQLCluster,然后单击“确定”。
4. 在“欢迎使用添加节点向导”页上,单击“下一步”。
5. 在“选择计算机”页上,确保在“计算机名”字段中指定Contoso-SQLND2,然后单击“添加”将 Contoso-SQLND2 添加到“所选计算机”中。单击“下一步”。
6. 在“正在分析配置”页上,单击“下一步”。
7. 在“群集服务帐户”页的“密码”字段中,键入 ClusterAdm,键入为此服务帐户创建的密码,然后单击“下一步”。
8. 在“建议的群集配置”页上,单击“下一步”。
9. 在“正在添加节点到群集”页上,单击“下一步”。
10. 在“正在完成添加节点向导”页上,单击“完成”。
5.3.配置分布式事务处理协调器群集
在下面的过程中,将把分布式事务处理协调器 (DTC) 群集到 SQL Server 群集上。
1. 使用Contoso\ClusterAdm群集服务帐户登录到 Contoso-SQLND1。
2. 单击“开始”,依次指向“所有程序”、“管理工具”,然后单击“群集管理器”。
3. 右键单击“组”,指向“新建”,然后单击“组”。
4. 在“名称”字段中,键入“SQL DTC 组”,然后输入该组的说明。
5. 将“Contoso-SQLND1”和“Contoso-SQLND2”添加到“首选所有者”中,然后单击“完成”。
6. 右键单击“SQL DTC 组”,指向“新建”,然后单击“资源”。
7. 在“名称”字段中,键入 “SQL DTC IP”。
8. 在“资源类型”下拉列表中,选择“IP 地址”,然后单击“下一步”。
9. 在“可能的所有者”页上,单击“下一步”。
10. 在“依存关系”页上,单击“下一步”。
11. 在“TCP/IP 地址参数”页上,在“地址”字段中输入 192.168.0.7,然后在“子网掩码”字段中输入 255.255.255.0。单击“完成”,然后在“群集管理器”对话框中单击“确定”。
12. 右键单击“SQL DTC 组”,指向“新建”,然后单击“资源”。
13. 在“名称”字段中,键入“SQL DTC 网络名称”。在“资源类型”下拉列表中,选择“网络名称”,然后单击“下一步”。
14. 在“可能的所有者”页上,单击“下一步”。
15. 在“依存关系”页上,选择“SQL DTC IP”,单击“添加”,然后单击“下一步”。
16. 在“网络名称参数”页上的“名称”字段中,键入 SQLCluster-DTC,然后单击“完成”。
17. 在“群集管理器”对话框中,单击“确定”。
18. 右键单击“SQL DTC 组”,指向“新建”,然后单击“资源”。
19. 在“名称”字段中,键入“SQL DTC 磁盘”。在“资源类型”下拉列表中,选择“物理磁盘”,然后单击“下一步”。
20. 在“可能的所有者”页上,单击“下一步”。
21. 在“依存关系”页上,选择“SQL DTC IP”和“SQL DTC 网络名称”,单击“添加”,然后单击“下一步”。
22. 在“磁盘参数”页上,从“磁盘”下拉列表中选择盘符为“D”卷标为“MSDTC”的共享磁盘。然后单击“完成”。
23. 在“群集管理器”对话框中,单击“确定”。
24. 右键单击“SQL DTC 组”,指向“新建”,然后单击“资源”。
25. 在“名称”字段中,键入 SQL DTC。在“资源类型”下拉列表中,选择“分布式事务处理协调器”,然后单击“下一步”。
26. 在“可能的所有者”页上,单击“下一步”。
27. 在“依存关系”页上,选择“SQL DTC IP”、“SQL DTC 网络名称”和“SQL DTC 磁盘”,单击“添加”,然后单击“完成”。
28. 在“群集管理器”对话框中,单击“确定”。
29. 右键单击“SQL DTC 组”,然后单击“联机”。重新启动服务器。
30. 单击“开始”,依次指向“所有程序”、“管理工具”,然后单击“组件服务”。
31. 展开“组件服务”,然后展开“计算机”。
32. 右键单击“我的电脑”,选择“属性”,然后单击“属性”。
33. 选择“MSDTC”选项卡,然后单击“安全配置”。
34. 在“安全设置”窗格中,选中以下选项:
   网络 DTC 访问
   允许远程客户端
   允许远程管理
   允许入站
   允许出站
注意   请确保选中“要求对呼叫方进行验证”。在 Windows Server 2003 群集环境中,必须选择此事务模式。有关详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=61920
   启用 XA 事务
35. 单击“确定”。
36. 在“DTC 控制台消息”对话框中,单击“是”重新启动 DTC。
37. 在“DTC 控制台消息”对话框中,单击“确定”确认 DTC 已重新启动。
38. 单击“确定”关闭“我的电脑属性”对话框。
39. 关闭“组件服务 MMC”。
 
注意   必须在 Contoso-SQLND2 上执行步骤 30 至 步骤 39。(在Windows 2003中群集会自动配置其它节点的DTC,因此不需要重复执行步骤30 至 步骤 39)。
注意   请重新启动这两个节点。
5.4.安装SQL Server
在下面的过程中,将把 SQL Server 2005 Enterprise Edition 安装到 SQL Server 群集上。
5.4.1. 创建SQL Server群集组1
1. 使用Contoso\ClusterAdm群集服务帐户登录到 Contoso-SQLND1。
2. 单击“开始”,依次指向“所有程序”、“管理工具”,然后单击“群集管理器”。
3. 右键单击“组”,指向“新建”,然后单击“组”。
4. 在“名称”字段中,键入“SQL Server 组 1”,然后输入该组的说明。
5. 将“Contoso-SQLND1”和“Contoso-SQLND2”添加到“首选所有者”中,然后单击“完成”。
6. 右键单击“SQL Server 组 1”,指向“新建”,然后单击“资源”。
7. 在“名称”字段中,键入“SQL Server 磁盘”。在“资源类型”下拉列表中,选择“物理磁盘”,然后单击“下一步”。
8. 在“可能的所有者”页上,单击“下一步”。
9. 在“依存关系”页上,单击“下一步”。
10. 在“磁盘参数”页上,从“磁盘”下拉列表中选择盘符为“R”,卷标为“SQLData1”的共享磁盘,然后单击“完成”。
5.4.2. 节点1 SQL Server 安装
1. 在 Contoso-SQLND1 上,将 SQL Server 2005 安装盘插入 DVD-ROM 驱动器进行安装。
2. 在“最终用户许可协议”屏幕上,接受许可协议,然后单击“下一步”。
注意   如果系统中缺少某些必需组件,SQL Server 2005 组件更新程序可能会安装这些组件。
3. 在“安装必备组件”页上,单击“下一步”。
4. 在“欢迎使用 Microsoft SQL Server 安装向导”页上,单击“下一步”。
5. 在“系统配置检查”页上,确保没有错误,然后再单击“下一步”继续。
6. 在“注册信息”页上,单击“下一步”。
7. 在“要安装的组件”页上,选择“SQL Server Database Services”、“创建 SQL Server 故障转移群集”和“工作站组件、联机丛书和开发工具”,然后单击“下一步”。
8. 在“实例名称”页上,选择“默认实例”,然后单击“下一步”。
9. 在“虚拟服务器名称”页上的“虚拟服务器名称”字段中,键入 SQLCluster-SQL1
10. 在“虚拟服务器配置”页上的“IP 地址”字段中,键入 192.168.0.8,单击“添加”,然后单击“下一步”。
11. 在“选择群集组”页上,选择“SQL Server 组 1”,然后单击“下一步”。
12. 在“群集节点配置”页上,确保将“Contoso-SQLND2”添加到“所选节点”,然后单击“下一步”。
13. 在“远程帐户信息”页上,键入对两个节点都有管理员权限的用户的用户名和密码,然后单击“下一步”。
14. 在“服务帐户”页上,清除“为每个服务帐户进行自定义”复选框,然后指定 SQL Server 服务的登录帐户。如果选中“使用域用户帐户”,则请输入一个本地帐户或域帐户以及密码,然后单击“下一步”,笔者使用Contoso\ClusterAdm群集服务帐户。
15. 在“群集服务的域组”页上,输入正在安装的每个群集服务的现有域组的名称。在安装 SQL Server 2005 之前,必须创建这些域组。这里使用 Contoso\SQL Server Cluster Administrators。单击“下一步”。
16. 在“身份验证模式”页上,选择“Windows 身份验证模式”,然后单击“下一步”。
17. 在“排序规则设置”页上,保留默认值,然后单击“下一步”。
18. 在“错误和使用情况报告设置”页上,保留默认值,然后单击“下一步”。
19. 在“准备安装”页上,检查信息,然后单击“安装”。
20. 在“安装进度”页上,安装完成后,单击“下一步”。
21. 在“完成 Microsoft SQL Server 2005 安装”页上,单击“完成”。
 
注意   安装完成后,请重新启动系统。
5.5.安装第2个SQL Server虚拟服务器
在下面的过程中,将在群集上安装第二个 SQL Server 2005 虚拟服务器。
5.5.1. 创建SQL Server群集组2
重复“创建SQL Server群集组1”中的步骤,将 SQL Server 2005 安装到 SQL Server 群集,并应用以下参数:
   群集资源组名称:SQL Server 组 2
5.5.2. 安装SQL Server 2
重复“创建SQL Server群集组2”中的步骤,并应用以下参数:
   SQL Server 命名实例:SQL2
   SQL Server 虚拟服务器名称:SQLCluster-SQL2
   SQL Server 虚拟 IP 地址:192.168.0.9
   选择 SQL Server 群集组:SQL Server 组 2
5.6.设置群集主动/主动模式
完成后以上步骤后,在下面的过程中,将两个 SQL Server 虚拟服务器配置为在 SQL Server 群集上以主动/主动模式运行。
1. 登录到 Contoso-SQLND1,单击“开始”,依次指向“所有程序”、“管理工具”,然后单击“群集管理器”。
确保 Contoso-SQLND1 是 SQL Server 组 1 的所有者,并且 Contoso-SQLND2 是 SQL Server 组  2.   的所有者,可以右键单击这些组,然后选择“移动组”将资源组移到指定节点。完成此操作后,每个节点都有一个运行的活动 SQL Server 虚拟服务器,用于为对方节点提供故障转移支持。
 
6. 高可用性测试
在以下过程中通过保留群集中的单个节点来测试平台的可用性。
1. 在SQL Server 群集中,保持“Contoso-SQLND1”运行,关闭“Contoso-SQLND2”。
2. 打开“群集管理器”,选择“打开到群集的连接”,输入群集名称“SQLCluster”。选择“资源”节点,确认右边窗口中所有项“所有者”列名称为“Contoso-SQLND1”,状态为联机。
7. SQL Server 镜像服务
在实施SQL Server 2005 MSCS群集的时候,笔者花了一些时间来学习SQL Server 2005镜像服务技术。数据库镜像是SQL Server 2005的一个新特性,它允许将一个SQL Server中的数据库内容镜像到另一个SQL Server上,在发生错误的时候,通过镜像数据库来进行错误恢复。SQL Server 2005 SP1推出后,微软对其提供完全技术支持,镜像服务技术在生产环境中可以安全使用。
如果大家对SQL Server 2005镜像服务技术比较有兴趣,建议看TechNet讲师牛可的WebCast。
《使用数据库镜像保障高可用的数据库应用》
笔者对SQL Server 镜像服务的介绍一些内容来自该WebCast。
关于SQL Server 2005镜像服务更多的内容可以看《SQL Server 镜像服务简述》,
7.1.数据库镜像
数据库镜像是用于提高数据库可用率的软件解决方案。镜像基于数据库层面,仅适用于使用完整恢复模式的数据库,简单恢复模式和大容量日志恢复模式不支持数据库镜像。
数据库镜像通过数据库事务处理从一个SQL Server数据库移动到不同SQL Server环境的另一个SQL Server数据库中来实现。镜像的拷贝是一个备用拷贝,一般情况下不能直接访问,只在主服务器出现错误时提供恢复,镜像服务器成为主服务器提供服务。如 果需要访问镜像数据库,可以通过快照方式只读访问。
7.1.1. 镜像服务特点
相比SQL Server的MSCS群集对硬件的要求,SQL Server镜像服务是基于软件的高可用性解决方案。同SQL Server MSCS群集不同,SQL Server镜像服务主要特点如下:
1. 基于软件的高可用性解决方案,低硬件成本。
2. 快速的故障转移恢复,通常在10秒钟内转移。
3. 基于数据库级别实现,对单个数据库进行故障转移。
7.1.2. 镜像中的服务器角色
1. 主体服务器(Principal Server)。承载主体数据库,接受用户连接和事务处理请求。
2. 镜像服务器(Mirror Server)。承载镜像数据库,作为主体数据库的热备份。
3. 见证服务器(Witness Server)。监视服务器状态和连接性,实现自动故障转移。
7.1.3. 镜像会话的周期
1. 会话初始化。镜像请求事务日之记录,与主体服务器实现同步。
2. 会话过程。主体服务器将日志记录传输给镜像服务器,各个角色之间相互监视会话状态。
3. 会话终止。发生故障转移,管理员终止数据库镜像。
4. 故障转移。对于高可用性的数据库镜像模型中,主体数据库不可用将触发自动故障转移,    在短时间内恢复服务(<10Sec)。
7.2.数据库镜像操作模式
数据库镜像有三种操作模式,包括高可用操作模式,高级别保护模式和高性能模式。
以下对三种操作模式的特点进行比较。

操作模式
事务安全
传输机制
是否要仲裁
见证服务器
故障转移类型
高可用性
FULL
同步
Y
Y
自动或手动
高级别保护
FULL
同步
Y
N
仅手动
高性能
OFF
异步
N
N/A
仅强制
 
7.2.1. 高可用操作模式
服务器角色
主体服务器,镜像服务器,见证服务器。
应用场景
要求高服务可用性,要求实现自动故障转移,确保数据的完整。
7.2.2. 高级别保护模式
服务器角色
主体服务器,镜像服务器。
应用场景
高的服务器完整性要求,部要求自动故障转移,对服务的可用性要求较低。
7.2.3. 高性能模式
服务器角色
主体服务器,镜像服务器。
应用场景
主体服务器和镜像服务器距离很远,通讯链路有明显的延迟,对性能的要求高与数据的完整性。
7.3.数据库镜像故障转移
7.3.1. 自动故障转移
只针对高可用性模式,事务安全为FULL。
1. 会话中的每个实例相互检测存在状态
物理服务器
SQL Server 实例
主体、镜像数据库
2. 当主体对镜像和见证服务器都不可见时发生故障转移
    镜像转换为新的主体数据库
    主体恢复后协商成为新的镜像数据库
 
如果关闭见证服务,将禁用自动故障转移功能。
7.3.2. 手动故障转移
针对高可用性和高级保护性模式,事务安全为FULL。
1. 在主体上执行手动转移操作
2. 当前连接到主体的用户被断开
 
手动故障转移方式可以作为服务器滚动升级的一种方法,类似于MSCS群集中的节点滚动升级。
7.3.3. 强制服务
只针对高性能模式,事务安全为OFF。
1. 在镜像数据库上强制启用服务
    有可能导致数据的丢失
    通常应用在高性能模式
注意:强制服务方式也可以应用在高可用性模式中,比如镜像和见证服务器都不可用,要求快速恢复服务的情况。
7.4.数据库镜像监视
对于数据库镜像的监视,MSDN提到监视的信息类型有以下两方面:
1. 目录视图中的数据库镜像元数据。
2. 数据库镜像性能计数器。
建议查看MSDN文档获取更多的相关信息。
8. 平台监控
本实施方案基于Windows 域环境,包含多台服务器,可以通过Microsoft Operations Manager进行管理,关于MOM的资料可以访问http://www.microsoft.com/china/mom/default.mspx
9. 结束语
本文部分内容参考微软的BizTalk Server 2006 平台数据库服务器多机环境部署文档,由微软提供最终解释权。由于时间有限,文档写得比较仓促,如果有什么意见或建议可在http://blog.csdn.net/zhzuo 上留言和交流。
10.附录
10.1.   共享磁盘安装
在配置“群集”服务软件前,必须先在每个节点上安装 Windows Server 2003 Enterprise Edition操作系统、设置网络及设置磁盘。
要配置群集服务,必须以一个具有所有节点管理权限的帐户登录。每个节点都必须是同一个域的成员。如果选择将其中一个节点作为域控制器,则应在相同的子网上再设置一个域控制器,以便消除单点故障,并对该节点进行维护。
在安装过程中,安装某些节点时将关闭其他节点,这有助于保证附加到共享总线的磁盘上的数据不会丢失或遭到破坏。当多个节点同时尝试写入一个未受到群集软件保护的磁盘时,可能会出现数据丢失或遭到破坏的情况。
在 Windows 2003 中,系统不会自动装载那些引导分区不在同一总线的逻辑磁盘,也不会为其分配驱动器盘符。这有助于确保在复杂的 SAN 环境中,服务器不会装载可能属于另一台服务器的驱动器。虽然服务器不会自动装载驱动器,但是仍然建议按照下列步骤,以确保共享磁盘不会遭到破坏。
本过程适用于双节点群集,如果正在安装节点数多于两个的群集,则“节点 2”列将列出其他所有节点所需的状态。

步骤
节点 1
节点 2
存储
备注
设置网络
开启
开启
关闭
确认共享总线上的所有存储设备均已关闭。开启所有节点。
设置共享磁盘
开启
关闭
开启
关闭所有节点。开启共享存储,然后开启第一个节点。
验证磁盘配置
关闭
开启
开启
开启第一个节点,开启第二个节点。如果需要,可以针对第三和第四个节点重复相同的步骤。
配置第一个节点
开启
关闭
开启
关闭所有节点;开启第一个节点。
配置第二个节点
开启
开启
开启
顺利配置完第一个节点后,开启第二个节点。如果需要,可以针对第三和第四个节点重复相同的步骤。
安装后
开启
开启
开启
所有节点都应开启。
 
 
 
 
 
 
10.2.   心跳网络设置参考
作为群集节点的每台服务器需要至少两块网络接口适配器。一块用于数据传输,假设设置名称为“Public”,另一块用于心跳检测,假设设置名称为“Heartbeat”。
在以下过程中描述心跳网络设置。
1. 单击“开始”,选择“控制面板”,选择“网络连接”,点击“Heartbeat”。
2. 在“Heartbeat 状态”对话框上,点击“属性”。
3. 在“Heartbeat属性”对话框上,选择“常规”选项卡,在“此连接使用下列项目”列表中只选择“Internet协议(TCP /IP)”,取消其他项目前面复选框的选择。选中“Internet协议(TCP /IP)”,点击“属性”。
4. 在“Internet协议(TCP /IP)属性”对话框上,在“IP地址”文本框中输入独立于Public网络的IP地址,假设这里输入“192.168.200.1”,子网掩码为“255.255.255.252”, 确保在“默认网关”框中没有设置任何值。验证在“使用下面的 DNS 服务器地址”框中没有定义任何值。点击“高级”。
5. 在“高级 TCP/IP设置”对话框上,选择“DNS”选项卡,验证没有定义任何值。确保清除了“在 DNS 中注册此连接的地址”和“在 DNS 注册中使用此连接的 DNS 后缀”复选框。
6. 选择“WINS”选项卡,验证没有定义任何值。单击“禁用 TCP/IP 上的 NetBIOS”。
7. 在关闭此对话框时,您可能会看到下面的提示。如果收到此提示,请单击“是”:
此连接有一个空的主要 WINS 地址。是否继续?
8. 关闭对话框,完成设置。
 
注意   需在其他群集节点上执行以上步骤,不过需要设置不同的IP地址。
10.3.   群集节点滚动升级
在群集中的一些软件进行升级时,需要进行滚动升级操作。假设对群集中的两个节点的SQL Server 2005进行SP2的升级。SQL Server 2005初始版本为“9.0.1399”,升级到SP2后的版本为“9.0.3042”。
以下过程进行节点的升级操作。
1. 打开群集管理器,选择对SQL群集的连接,这里假设为“SQLCluster”。
2. 切换组到某一个节点,假设切换到“Contoso-SQLND1”,选择“资源”节点,确认在右边窗口所有列表项的状态列为“联机”,在所有者列为“Contoso-SQLND1”。
注意   也可以通过关闭其他群集节点服务器或在群集管理器的其他节点上右键点击“停止群集服务”实现。
3. 在Contoso-SQLND1服务器上安装SQL Server 2005 SP2。安装完成重新启动服务器。
 
注意   假设另一个节点为“Contoso-SQLND2”,重复步骤1到3,切换组资源到Contoso-SQLND2进行升级。
可以通过执行“SELECT @@VERSION”语句来确认SQL Server 是否升级成功。
输出示例如下:
Microsoft SQL Server 2005 - 9.00.3054.00 (Intel X86)   Mar 23 2007 16:28:52   Copyright (c) 1988-2005 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
10.4.   安装部署图片参考
10.4.1.     域控制器
 域控制器
10.4.2.     DNS
 DNS
10.4.3.     EMC SAN 配置
以下是EMC SAN的配置界面。
 EMC SAN
10.4.4.     SQLCluster群集
 SQLCluster
10.4.5.     SQL Server 数据库
 SQLServerObjectExplore