Sunday, October 31, 2010

XBMC: Add / Removing a Video Source from list

search sources.xml under C:

Just use Notepad or something to edit the file as needed (remove, add, etc)

Wednesday, October 27, 2010

SQL join multiple tables (SQL join多个表)

NNER JOIN 连接两个数据表的用法:
SELECT * FROM 表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号
INNER JOIN 连接三个数据表的用法:
SELECT * FROM (表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号
INNER JOIN 连接四个数据表的用法:
SELECT * FROM ((表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号) INNER JOIN 表4 ON Member.字段号=表4.字段号
INNER JOIN 连接五个数据表的用法:
SELECT * FROM (((表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号) INNER JOIN 表4 ON Member.字段号=表4.字段号) INNER JOIN 表5 ON Member.字段号=表5.字段号
连接六个数据表的用法:略,与上述联接方法类似,大家举一反三吧:)

注意事项:
在输入字母过程中,一定要用英文半角标点符号,单词之间留一半角空格;
在建立数据表时,如果一个表与多个表联接,那么这一个表中的字段必须是“数字”数据类型,而多个表中的相同字段必须是主键,而且是“自动编号”数据类型。否则,很难联接成功。
代 码嵌套快速方法:如,想连接五个表,则只要在连接四个表的代码上加一个前后括号(前括号加在FROM的后面,后括号加在代码的末尾即可),然后在后括号后 面继续添加“INNER JOIN 表名X ON 表1.字段号=表X.字段号”代码即可,这样就可以无限联接数据表了:)

How to monitor / check the current connections to iis per site

@ Web Service \ Current Connections perfmon counter -- get either _Total or per site.

Friday, October 22, 2010

Remove the IE warning - ‘Do you want to view only the webpage content that was delivered securely?’

Internet Explorer interrupts the download and displays a confirmation dialog whenever it detects the use of mixed content on a secure page.
In IE 7 and ealier, this dialog would cause annoyance to users but generally didn’t cause any other significant problems. This was because it was worded in such a way that most users would click on the Yes button and allow non-secure content to be downloaded.
However, the wording in the IE 8 version of this dialog has changed:


IE8 Security Warning

here's what you need to do if you don't want to see that dialog:
tools>internet options>security>custom level>display mixed content: enable


Note that if the site you are visiting is NOT on the internet zone, you would have to make the changes to the appropiate zone:

here's how you tell which "zone" you are on, on the bottom right hand corner of the browser you should see something like this:


If you double click that, you can make changes to the other zones (Local Intranet, Trusted sites, restricted sites)



Just click the zone you want, and it will bring up the first dialog (from this post) where you can make the change.

Add an Output Caching Rule (IIS 7)

Applies To: Windows 7, Windows Server 2008, Windows Server 2008 R2, Windows Vista
Output cache rules are helpful when you must cache requests for a certain file type differently than for other file types on your server, site, or application. For example, you might want to keep ASP.NET pages in the cache longer than other file types in your application because the ASP.NET pages require more resources for processing than would the other file types.

Prerequisites

For information about the levels at which you can perform this procedure, and the modules, handlers, and permissions that are required to perform this procedure, see Output Caching Feature Requirements (IIS 7) [ http://technet.microsoft.com/en-us/library/cc754226(WS.10).aspx ] .
Exceptions to feature requirements
  • None

To create an output cache rule

You can perform this procedure using the user interface (UI) or a command line.
To use the UI
  1. Open IIS Manager and navigate to the level you want to manage. For information about opening IIS Manager, see Open IIS Manager (IIS 7) [ http://technet.microsoft.com/en-us/library/cc770472(WS.10).aspx ] . For information about navigating to locations in the UI, see Navigation in IIS Manager (IIS 7) [ http://technet.microsoft.com/en-us/library/cc732920(WS.10).aspx ] .
  2. In Features View, double-click Output Caching.
  3. Click Add in the Actions pane.
  4. In the Add Cache Rule dialog box, in the File name extension box, enter the file name extension, such as .aspx, for which you want to create a cache rule.
  5. Select the User -mode caching check box to enable output caching, and select one of the following options:
    • Using file change notifications: if you want an item to be removed from the cache when it is updated.
    • At time intervals (hh:mm:ss): if you want an item to be removed from the cache after a certain time elapses. Then type a time in the format of hh:mm:ss (where h is hours, m is minutes, and s is seconds) in the corresponding box.

      noteNote
      If you configure different values for this property in the User-mode caching and Kernel-mode caching sections, the value in the Kernel-mode caching section will be used.
    • Prevent all caching: to prevent all caching of the designated file type.
  6. Select the Kernel-mode caching check box if you want to enable kernel caching in addition to output caching, and select one of the following options:
    • Using file change notifications: if you want an item to be removed from the cache when it is updated.
    • At time intervals (hh:mm:ss): if you want an item to be removed from the cache after a certain time elapses. Then type a time in the format of hh:mm:ss (where h is hours, m is minutes, and s is seconds) in the corresponding box.
    • Prevent all caching: to prevent all caching of the designated file type.
  7. Click OK.

Configuration

The procedure in this topic affects the following configuration elements:
collection under the element
For more information about IIS 7 configuration, see IIS 7.0: IIS Settings Schema [ http://go.microsoft.com/fwlink/?LinkId=88551 ] on MSDN.

source: http://technet.microsoft.com/en-us/library/cc770547%28WS.10,printer%29.aspx

Thursday, October 21, 2010

Samsung LED TV 2010 Features Comparison

LED Series

Which Size HDTV is Right for My Room?

HDTV Size chart
With standard-definition TVs, the rule used to be that viewers would feel comfortable watching a set from a distance of 3 to 6 times the screen size in inches. With HDTV, the resolution is so much better that you can sit closer to a larger TV without noticing the pixels. So with HDTVs, the rule tends to be you can sit anywhere from 1.5 to 3 times the screen size (in inches) for the best experience.
If you know the size of the room you have already, where you want to sit, and where your new HDTV should go once you get it, you can figure out the size HDTV you should get.
  • Minimum size = Viewing distance/3
  • Maximum size=Viewing distance/1.5

IIS7: How to set cache control for static content?

Caching is popular technique for reducing network traffic and server recourses when it comes to web content. But how we can cache static content like .jpg, gif, .js files?! 
1. Allow overriding static content setting:
open %systemroot%\System32\inetsrv\config\applicationHost.config
search for

change it to
overrideModeDefault="Allow" />

 
2. set cache settings using following commands (from IIS.NET forums)
set max-age to 1hr for all static files under /images on default-web-site, run the following
 
\Windows\system32\inetsrv\appcmd.exe set config "Default Web Site/images" -section:system.webServer/staticContent -clientCache.cacheControlMode:UseMaxAge
 
\Windows\system32\inetsrv\appcmd.exe set config "Default Web Site/images" -section:system.webServer/staticContent -clientCache.cacheControlMaxAge:"01:00:00"
 
If you give it a shot now you will see that the content is cached! Not believe?! Try to request image from the browser, overwrite the image with image with same name and different content and request image from the browser again...
But the bad news is that caching is on the server - so you haven't reduced network traffic as web server is still hit.
 
3. Cache it on client
open %systemroot%\System32\inetsrv\config\applicationHost.config
and change the lines like this
 
<location path="MyWebsite"> 
<system.webServer> 
<caching> 
<profiles> 
<add extension=".html" policy="CacheUntilChange" kernelCachePolicy="DontCache" location="Client" /> 
<add extension=".htm" policy="CacheUntilChange" kernelCachePolicy="DontCache" location="Client" /> 
<add extension=".gif" policy="CacheUntilChange" kernelCachePolicy="DontCache" location="Client" /> 
<add extension=".js" policy="CacheUntilChange" kernelCachePolicy="DontCache" location="Client" /> 
<add extension=".css" policy="CacheUntilChange" kernelCachePolicy="DontCache" location="Client" /> 
<add extension=".jpg" policy="CacheUntilChange" kernelCachePolicy="DontCache" location="Client" /> 
<add extension=".jpeg" policy="CacheUntilChange" kernelCachePolicy="DontCache" location="Client" /> 
<add extension=".zip" policy="CacheUntilChange" kernelCachePolicy="DontCache" location="Client" /> 
<add extension=".rar" policy="CacheUntilChange" kernelCachePolicy="DontCache" location="Client" /> 
profiles> 
caching> 
system.webServer> 
location>
 
source: http://www.galcho.com/Blog/PermaLink.aspx?guid=490f3c31-1815-40fc-a871-5d6899fa35e0  

Tuesday, October 19, 2010

如何证明自己是正常人?

假如很不幸你被当成精神病被逮进了精神病院,你有什么办法证明自己是正常人呢?前不久,一名叫格雷·贝克的记者去意大利采访了三个特殊的人物,事情是这样 的:一名负责运送精神病人的司机因为疏忽,中途让三名患者逃掉了。为了不至于丢掉工作,他把车开到一个巴士站,许诺可以免费搭车。最后,他把乘客中的三个 人充作患者送进了医院。
格雷·贝克关心的不是这个故事,他想了解的是,这三个人是 通过什么方式证明自己,从而成功走出精神病院的。
下面是他对甲的采访
格:当你被关进精神病院时,你想了些什么办法来解救自己呢?
甲:我想,要想走出去,首先得证明自己没有精神病。
格:你是怎样证明的?
甲:我说:“地球是圆的”,这句话是真理。我想,讲真理的人总不会被当成是精神病吧!
格:最后你成功了吗?
甲:没有。当我第14次说这句话的时候,护理人员就在我屁股上注射了一针。
下面是对乙的采访
格:你是怎么走出精神病院的?
乙:我和甲是被丙救出来的。他成功走出精神病院,报了警。
格:当时,你是否想办法逃出去呢?
乙:是的,我告诉他们我是社会学家。我说我知道美国前总统是克林顿,英国前首相是布莱尔。当我说到南太平洋各岛国领袖的名字时,他们就给我打了一针。我就再也不敢讲下去了!
格:那丙是怎样把你们救出去的?
乙:他进来之后,什么话也不说。该吃饭的时候吃饭,该睡觉的时候睡觉。当医护人员给他刮脸的时候,他会说声谢谢。第28天的时候,他们就让他出院了。
格雷·贝克在评论里发表这样的感慨:一个正常人想证明自己的正常,是非常困难的。也许只有不试图去证明的人,才称得上是一个正常人。
后来,有许多人在该文的网络版上留言。
有一个人的留言令人感触颇深:那些用某种方式去证明自己真理在握的人,那些用某种方式证明自己知识丰富的人,包括那些用某种方式证明自己很有钱的人,都可能被认为是个疯子,只是他们自己不知道罢了!
所以我认为要证明自己是正常人最好不要有太多动作。

Monday, October 18, 2010

Append a date to a filename issue (DOS Command)

Say,
-%DATE:~8,2%-%DATE:~0,2%-%DATE:~3,2%

7z a -xr!*.tmp C:\backupfiles_%date:/=%.zip D:\backupfiles\
You will get the file name correctly as ==> backupfiles_08152008.zip
However, sometime the file name became ==> backupfile_Fri.7z

The reason for the difference is that the scheduled task is running under a different user account than the one you are using when you open the command prompt and it's regional settings are different.
The format of the %date% variable depends on the regional settings. For example, under English (United States) it will be Sat 08/16/2008 and under English (Caribbean) it will be just 08/16/2008.
The space after the day of the week is the problem. Your command line will look like this:

7z a -xr!*.tmp C:\backupfiles_Sat 08162008.zip D:\backupfiles\

It sees the archive name as C:\backupfiles_Sat and adds the default .7z extension creating an archive named C:\backupfiles_Sat.7z. It sees 08162008.zip and D:\backupfiles\ as the files to add, and most likely gives an error that it can't find 08162008.zip, though it should add all of the files from D:\backupfiles\. You might not see the error when running as a scheduled job as the window closes too fast.

Because of the space you must put the archive name in quotes:
7z a -xr!*.tmp "C:\backupfiles_%date:/=%.zip" D:\backupfiles\
This will create a file named C:\backupfiles_Sat 08162008.zip.

If you don't want the day of the week, you can either log into the account you run the scheduled tasks under and change the regional settings, or use a variable and then specify a substring to extract just the date portion like this:
Code:

set _d=%date:/=%
7z a -xr!*.tmp C:\backupfiles_%_d:~4%.zip D:\backupfiles\
set _d=

Hyper-v Mouse cannot control issues (with Romote desktop/VNC connection)

1. Uninstalled the "Microsoft Virtual Machine Bus Input Device Miniport", restarted and ... the dot was back to an arrow :-)

2. try the following. In the VM go to the mouse-options, activate "mouse trace" and make the trace as short as possible.

3. The best way is to reinstall Integration Service

Hyper-V Reference resource

Microsoft Hyper-V forum
http://social.technet.microsoft.com/forums/en-US/winserverhyperv/threads/

Virtual PC Guy's WebLog
http://blogs.msdn.com/b/virtual_pc_guy/

知耻近乎勇和知耻后勇

子曰:“好学近乎知,力行近乎仁,知耻近乎勇……”
孔子的意思就是说,喜欢学习就接近了智,努力实行就接近了仁,知道羞耻就接近了勇!
春秋时期,吴越交兵,越国兵败。越王勾践入吴宫,做了吴王夫差的奴隶。
勾践含羞忍辱,终于获释回国。他卧薪尝胆,访贫问苦,任用贤才,发展生产。
那种形状,在中国历代统治者中绝无仅有。
十年生聚,十年教训,终于国家富足,军队精壮,一举灭掉吴国,勾践也成为春秋霸主。
这就是“知耻而后勇”!

Sunday, October 17, 2010

Run appcmd list sites and get ERROR: Cannot read configuration file due to insifficient permissions

Basically, you only need to run as administrator account 
and
fix this by adding the userid to the folder %systemroot%\system32\inetsrv\config

Task scheduler history "disabled" to "enable"

Click action menu and select enable All Tasks History

Friday, October 8, 2010

What is Msmpeng.exe and how to remove it

Has your processor been at 100% utilization lately? If you went to the Task Manager in Windows and looked at your processes tab, you may have noticed a process called msmpeng.exe eating up all your available CPU.
So what is msmpeng.exe and how can you prevent it from slowing your system down? Well, unlike what you may have read elsewhere, it is not spyware or malware. It’s actually quite ironic because it’s associated with Windows Defender, the anti-spyware product from Microsoft.

Unfortunately, this crappy piece of software is already installed on Windows Vista and it also comes with Windows Live One Care. There are two ways to stop msmpeng.exe from using system resources: exclude the Windows Defender directory from scanning or simply turn off Windows Defender.

Exclude directory for scanning

If you would like to keep using Windows Defender, then your only chance of fixing the high processor usage issue is to prevent the Windows Defender directory from being scanned.
Apparently, the service scans it’s self and therefore eats up all the CPU. Open Windows Defender, click on Tools and then Options. Now scroll down to the Advanced Options section:
windows defender options
Now click on the add button under the “Do not scan these files or locations” section. Now type in the path for the Windows Defender directory:
c:\program files\windows defender
Click OK and now make sure to click the Save button. Hopefully this will fix your high CPU usage error with Windows Defender. Also be sure to read my post on how to customize all the options for Windows Defender like what stuff to monitor in real-time, etc.

Turn off Windows Defender

The other option is to simply turn off Windows Defender, which I think is a better idea anyway. There are lots of other spyware programs out there that are much better than Windows Defender.
To turn off Windows Defender, open the program and click on Options. Now go to Administrator options and uncheck the Use Windows Defender box. Make sure to click Save.
what is msmpeng[5]

Thursday, October 7, 2010

PCI DSS介绍 & F.A.Q.

()什么是PCI-DSS安全认证?
在网上支付过程中,信用卡数据泄漏是引发的各类欺诈行为的最大隐患。最初支付卡安全保障是由各个支付卡品牌独立完成的,如VISAAIS。但随着卡基支 付的发展,原先支付卡各自为战的安全标准不利于信息保密统一标准。2004VISAMasterCard联合多家机构,成立了支付卡行业数据安全标准 委员会(PCISSC),委员会的主旨是鼓励所有关键业内机构采用数据安全标准;培养和管理全球范围内有资质的授权扫描服务商(ASV);以及邀请机构加 入到此标准的维护行列。同时,为了建立统一的业界标准,最大程度的降低支付卡风险,标准委员会联合制定了旨在严格控制数据存储以保障支付卡用户在线交易安 全的数据安全标准,即PCI-DSS安全认证标准。
 
(
)PCI-DSS是怎样鉴定的?
1
、极为严密的认证审查过程
PCI-DSS
安全认证的主要过程是由VISAMasterCard授权的独立审查公司完成。是一次彻底对该支付公司在线支付系统的安全审查,其中有近 200项审查内容。包含6大领域12项要求的规范,其认证过程异常严苛且繁杂,包括自我安全检测(SelfSecurityProbe)、漏洞分析 (AnalysisoftheVulnerabilities)以及由协会执行的安全调查 (SecurityInvestigationbytheCouncil)三个阶段,考察范围涉及硬件、软件、员工和公司管理等多项指标。
2
、信用卡交易安全更加安全
1
、交易流程保护更加严密、严谨,从每个环节把关
2
、对信用卡信息保护更上一层楼,增加网上交易信誉度
3
、对商家来说,更完善、规范的交易流程可以赢得更多消费者
3
、信用卡交易对消费者也更加便捷
原先的网站支付页面为了保障交易安全,通常需要消费者填写3个页面交易信息(商家-网关-银行),而现在则将网关-银行合并为一个页面,只需要消费者填写 2个页面信息,ecpss支付系统通过PCI-DSS认证以后带来的便捷。这对商家来说无疑是个极大的好消息,缩减了支付流程不但方便了消费者,也必然为 商家赢得更多订单。
成功率可达95%的国际信用卡(ecpss)全新体验已通过PCI-DSS验证。


PCI DSS(Payment Card Industry Data Security Standard支付卡行业安全标准)
PCI 数据安全标准现已得到 Visa、MasterCard、Discover、American Express 和多家支付卡品牌的采用,这一标准要求存储、处理或传输客户信用卡数据的商家和服务提供商必须采取有力的安全控制和处理方式来确保数据的完整性。需要由认 可的第三方评估机构出具定期遵从报告,证明处理大量交易的商家和服务提供商的遵从性。
PCI DSS的审核范围包括:
构建和维护安全网络
要求1、安装并且维护防火墙以保护持卡人数据
要求2、避免使用供应商提供的默认系统口令和其他安全参数
保护持卡人数据
要求3、保护存储的持卡人数据
要求4、加密开放/公共网络上的持卡人数据传输
维护一个弱点管理程序
要求5、使用定期升级的防病毒软件或计算机程序
要求6、开发并维护安全的系统和应用
实施强有力的访问控制措施
要求7、根据业务需要限制对持卡人数据的访问
要求8、为每一个具有计算机访问权限的用户分配唯一的ID
要求9、限制对于持卡人数据的物理访问
定期监视并测试网络
要求10、追踪并监控对网络资源和持卡人数据的所有访问
要求11、定期测试安全系统的和流程
维护一个信息安全策略
要求12、维护一个策略用以向员工和合同商传达信息安全

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