SQL Server 2005 镜像构建手册
转载:http://www.cnblogs.com/killkill/archive/2008/05/23/1205792.html
一、 镜像简介
1、 简介
数据库镜像是将数据库事务处理从一个SQL Server数据库移动到不同SQL Server环境中的另一个SQL Server数据库中。镜像不能直接访问;它只用在错误恢复的情况下才可以被访问。
要进行数据库镜像所需的最小需求包括了两个不同的SQL Server运行环境。主服务器被称为“主机”,第二个服务器被称作“备机”。主机数据库就是你实际用着的数据库,镜像数据库就是你的数据库的备用拷贝。当事务写入你的基本服务器的时候,他们也同样被传送到并写入你的镜像数据库中。
除了基本和镜像之外,你还可以引入另一个可选的组件,名为“见证”。见证服务器是第三个SQL Server 2005运行实例,它是在判断什么时候进行错误恢复的时候,用于基本和镜像之间内部交流。只有当你想实现自动错误恢复的时候用到这个选项。它实现了2比1投票的能力,当我的一个组件不可达,并因此需要进行错误恢复的时候。见证服务器只有在你想实现自动错误恢复的时候才需要用到。
2、 优点
下表是SQL Server可用性官方解决方案的一个对照表,现时我中心使用的恢复模式是“冷备份”中的“备份/恢复”,通常来说“热备份”比“冷备份”的可用性更高,恢复更快,更适合我中心现时的实际情况。如果不从成本考虑的话,“热备份”中的“故障转移群集”的可用性是最高的,但是故障转移群集需要借助磁盘阵列而且建设本身复杂性较高。数据库镜像的建立并没有太多的硬件要求,最起码没有像“故障转移群集”需要共享存储这么高的要求。
2、 缺点
(1)由于SQL Server是一个实例多个数据库的产品,数据库镜像技术是基于数据库级别的,因此每次主数据库新增数据库都必须为备机增加数据库并且为新增的数据库建立镜像关系。
(2)数据库的登录名和用户是存储在master数据库,master数据库是不能做镜像的,所以每次操作数据库的登录名和用户也是需要多维护一份,
(3)数据库作业不能得到相应的维护。
(4)微软号称镜像可以让客户端对故障透明,但是实际测试中发现只有满足特定的条件才能实现透明化,而且透明化得客户端支持才可行(.net Framework 2.0以上,Microsoft jdbc驱动 1.1以上)。
(5)跨数据库事务和分布式事务均不支持数据库镜像。
纵观其他几种方式,仅有“热备份”的“故障转移群集”没有这些问题。
一、配置主备机
1、 物理连接
将主备数据库按照如图所示连接:
2、 检查SQL Server 2005数据库
只有SQL Server 2005 标准版、企业版和开发版才可以建立数据镜像。其他版本即Express只能作为见证服务器。如果实在不清楚什么版本,执行如下语句查看:
select @@version;若要对此数据库进行数据库镜像,必须将它更改为使用完整恢复模式。若要用 Transact-SQL 实现此目的,请使用 ALTER DATABASE 语句:
2 ALTER DATABASE <DatabaeName>
3 SET RECOVERY FULL;
4
二、主备实例互通
实现互通可以使用域或证书来实现,考虑实现的简单,以下选取证书的方式实现。注意:实现“主备数据库实例互通”的操作只需要做一次,例如为了将两个SQL Server 2005的实例中的5个数据库建成镜像关系,则只需要做一次以下操作就可以了;或者这样理解:每一对主备实例(不是数据库)做一次互通。
1、创建证书(主备可并行执行)
--主机执行:
USE master;2
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'killkill';3
CREATE CERTIFICATE HOST_A_cert WITH SUBJECT = 'HOST_A certificate' , 4
START_DATE = '01/01/2008';5

--备机执行:
USE master;2
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'killkill';3
CREATE CERTIFICATE HOST_B_cert WITH SUBJECT = 'HOST_B certificate', 4
START_DATE = '01/01/2008';5

2、创建连接的端点(主备可并行执行)
--主机执行:
CREATE ENDPOINT Endpoint_Mirroring 2
STATE = STARTED 3
AS 4
TCP ( LISTENER_PORT=5022 , LISTENER_IP = ALL ) 5
FOR 6
DATABASE_MIRRORING 7
( AUTHENTICATION = CERTIFICATE HOST_A_cert , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL );8

--备机执行:
CREATE ENDPOINT Endpoint_Mirroring 2
STATE = STARTED 3
AS 4
TCP ( LISTENER_PORT=5022 , LISTENER_IP = ALL ) 5
FOR 6
DATABASE_MIRRORING 7
( AUTHENTICATION = CERTIFICATE HOST_B_cert , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL );8

3、备份证书以备建立互联(主备可并行执行)
--主机执行:
BACKUP CERTIFICATE HOST_A_cert TO FILE = 'D:\SQLBackup\HOST_A_cert.cer';--备机执行:
BACKUP CERTIFICATE HOST_B_cert TO FILE = 'D:\SQLBackup\HOST_B_cert.cer';4、互换证书
将备份到D:\SQLBackup\的证书进行互换,即HOST_A_cert.cer复制到备机的D:\SQLBackup\。HOST_B_cert.cer复制到主机的D:\SQLBackup\
5、添加登陆名、用户(主备可并行执行)
以下操作只能通过命令行运行,通过图形界面无法完成。(截至文档编写结束,SQL Server2005的不定号为SP2)
--主机执行:
CREATE LOGIN HOST_B_login WITH PASSWORD = 'killkill';2
CREATE USER HOST_B_user FOR LOGIN HOST_B_login;3
CREATE CERTIFICATE HOST_B_cert AUTHORIZATION HOST_B_user FROM FILE = 'D:\SQLBackup\HOST_B_cert.cer';4
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login];5

--备机执行:
CREATE LOGIN HOST_A_login WITH PASSWORD = 'killkill';2
CREATE USER HOST_A_user FOR LOGIN HOST_A_login;3
CREATE CERTIFICATE HOST_A_cert AUTHORIZATION HOST_A_user FROM FILE = 'D:\SQLBackup\HOST_A_cert.cer';4
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login];5

三、建立镜像关系
以下步骤是针对每个数据库进行的,例如:现有主机中有5个数据库以下过程就要执行5次。
1、 手工同步登录名和密码
在第一章中提到数据库镜像的缺点之一是无法维护登录名,所以需要我们手工维护登录。
通常来说数据库都将会有若干个用户作为访问数据库的用户,并且数据库会有相应的登录名,但是在备机中缺少与之相对应的登录名,例如某业务系统使用’myuser’作为登录名访问数据库,但是在备机中没有’myuser’这个登录名,因此一旦主备切换,业务系统就无法登录数据库了,这种情况称为"孤立用户"
在主数据库中执行如下语句:
USE master;2
select sid,name from syslogins;3

查找出相应的用户名和sid,例如:上述的’myuser’
在备数据库中执行如下语句:
USE master;2
exec sp_addlogin 3
@loginame = '<LoginName>', 4
@passwd = '<Password>', 5
@sid = <sid> ;6

这里的’LoginName’即主数据库中的登录名,sid即是上述通过SQL语句查找出的sid。
例如,查询得到的sid和name如下所示。
sid name2

3
---------------------------------- -----------------4

5
0x074477739DCA0E499C29394FFFC4ADE4 cz_account6

7

则建立登录名的SQL语句:
USE master;2
exec sp_addlogin 3
@loginame = 'cz_account', 4
@passwd = 'password', 5
@sid = 0x074477739DCA0E499C29394FFFC4ADE4;6

到此为止可以认为备机数据库的环境已经与主机同步了,还差数据库内的数据未同步。
2、 准备备机数据库
承接上文,该节是描述如何同步主备数据库内的数据。
可以尝试从刚刚使用的全备文件进行还原,在还原数据的时候需要使用选上“with non recover”。如图所示:
如果执行成功数据库将会变成这个样子:![]()
3、 建立镜像
由于是实验,没有为服务器配置双网卡,IP地址与图有点不一样,但是原理一样。
--主机执行:
ALTER DATABASE shishan SET PARTNER = 'TCP://10.168.6.45:5022';--如果主体执行不成功,尝试在备机中执行如下语句:
ALTER DATABASE shishan SET PARTNER = 'TCP://10.168.6.49:5022';如果执行成功,则主备数据库将会呈现如上图所示的图标。
如果建立失败,提示类似数据库事务日志未同步,则说主备数据库的数据(日志)未同步,为保证主备数据库内的数据一致,应在主数据库中实施一次“事务日志”备份,并还原到备数据库上。备份“事务日志”如图所示:
还原事务日志时需在选项中选择“restore with norecovery”,如图所示:
成功还原以后再执行建立镜像的SQL语句。
四、测试操作
1、主备互换
--主机执行:
USE master;2
ALTER DATABASE <DatabaseName> SET PARTNER FAILOVER;3

2、主服务器Down掉,备机紧急启动并且开始服务
--备机执行:
USE master;2
ALTER DATABASE <DatabaseName> SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS;3

3、原来的主服务器恢复,可以继续工作,需要重新设定镜像
--备机执行:2
USE master;3
ALTER DATABASE <DatabaseName> SET PARTNER RESUME; --恢复镜像4
ALTER DATABASE <DatabaseName> SET PARTNER FAILOVER; --切换主备5

4、原来的主服务器恢复,可以继续工作
--默认情况下,事务安全级别的设置为 FULL,即同步运行模式,而且SQL Server 2005 标准版只支持同步模式。
--关闭事务安全可将会话切换到异步运行模式,该模式可使性能达到最佳。
USE master;2
ALTER DATABASE <DatabaseName> SET PARTNER SAFETY FULL; --事务安全,同步模式3
ALTER DATABASE <DatabaseName> SET PARTNER SAFETY OFF; --事务不安全,异步模式4

SQL Server 2005 镜像构建手册的更多相关文章
- 实战SQL Server 2005镜像配置全过程
SQL Server 2005镜像配置基本概念 我理解的SQL Server 2005镜像配置实际上就是由三个服务器(也可以是同一服务器的三个 SQL 实例)组成的一个保证数据的环境,分别是:主服务器 ...
- SQL SERVER 2005镜像配置(有无见证服务器都行)
我用的是没有见证的,但找的文章里有镜像,所以都做一下补充,两个网址做的参考, 之所以在从他们那再补充一次是为了怕有一天他们的文章被删了我这还有个备用的,这两篇写的不错 其他的都不行 特别乱,这是找的最 ...
- Sql Server 2005 镜像后收缩日志
网站的一个数据库的日志文件已经到150个G的地步,数据文件才几十M,通过常规的操作去收缩日志: >数据库右键 → 任务 → 收缩 → 文件 , 在弹出的窗口中,文件类型选择"日志&qu ...
- SQL Server 2005高可用性模式下创建数据库镜像
SQL Server 2005高可用性模式下创建数据库镜像 高可用性模式下创建数据库镜像 第一步: --创建镜像用数据库-在主服务器上操作 create database db_mirror on ...
- win7系统如何安装SQL Server 2005
Microsoft Windows 7 旗舰版(32位) SQL Server 2005 简体中文开发板 方法/步骤 1 首先为了保证数据库的顺利安装,先启用IIS服务吧!Win7比XP好的一点是 ...
- SQL Server 2005 Service Broker
一.引言 SQL Server 2005 的一个主要成就是可以实现可靠.可扩展且功能完善的数据库应用程序.与 .NET Framework 2.0 公共语言运行库 (CLR) 的集成使开发人员可以将重 ...
- SQL Server 2005 中实现通用的异步触发器架构
在SQL Server 2005中,通过新增的Service Broker可以实现异步触发器的处理功能.本文提供一种使用Service Broker实现的通用异步触发器方法. 在本方法中,通过Serv ...
- 浅析SQL Server 2005中的主动式通知机制
一.引言 在开发多人同时访问的Web应用程序(其实不只这类程序)时,开发人员往往会在缓存策略的设计上狠下功夫.这是因为,如果将这种环境下不常变更的数据临时存放在应用程序服务器或是用户机器上的话,可以避 ...
- SQL Server 2005 盛宴系列 经典教程
SQL Server 2005 盛宴系列 经典教程 [复制链接] 发表于 2007-3-27 14:08 | 来自 51CTO网页 [只看他] 楼主 TECHNET SQL serve ...
随机推荐
- hiho_1050_树中的最长路
题目大意 给出一棵树,其中每两个节点都可以形成一个路径(要求路径中的边只能走一次),求出所有路径中的长度最大值. 分析 树形结构,很容易想到递归,但为了节省时间,要考虑保存中间状态.于是,考虑使用记忆 ...
- flush tables 好危险啊
请看图 +----+------+-----------+------+------------+------+-------------------------+------------------ ...
- as的Enter_Frame与Timer
As3中的Timer和Event.EnterFrame是有明显的区别的. Evnet.EnterFrame是定时间隔多少时间出发.如果执行时间比间隔时间长,则会间隔执行时间这么久. 举个例子: Fla ...
- 能源项目xml文件标签释义--default-lazy-init
1.spring的default-lazy-init参数 spring在启动的时候,会默认加载会默认加载整个对象实例图,从初始化ACTION配置.到 service配置到dao配置.乃至到数据库连接. ...
- C# Socket编程(1)基本的术语和概念
计算机程序能够相互联网,相互通讯,这使一切都成为可能,这也是当今互联网存在的基础.那么程序是如何通过网络相互通信的呢?这就是我记录这系列的笔记的原因.C#语言从一开始就是为了互联网而设计的,它为实现程 ...
- [你必须知道的.NET] 第八回:品味类型---值类型与引用类型(上)-内存有理
原文地址:http://kb.cnblogs.com/page/42318/ 系列文章导航: [你必须知道的.NET] 开篇有益 [你必须知道的.NET] 第一回:恩怨情仇:is和as [你必须知道的 ...
- js,jquery判断某一节点是否存在
前两天工作时遇到一问题,就是模块A显示时,B是一种样式,模块A删除,B是另一种样式.记录下判断节点存在的方法. 先写下html <!doctype html> <html> & ...
- [HBuilder] 简介
官网首页: http://www.dcloud.io/runtime.html 特点: 编码比其他工具快5倍 代码输入法:按下数字快速选择候选项 可编程代码块:一个代码块,少敲50个按键 内置emme ...
- HTML5自学笔记[ 12 ]canvas绘图小示例之鼠标画线
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- Mybatis 学习-2
创建基于session的util类,在线程中共享SqlSession package cn.smartapp.blogs.pojo; import java.io.Serializable; impo ...