SQL Server 2005 镜像构建

数据库镜像是将数据库事务处理从一个SQL Server数据库移动到不同SQL Server环境中的另一个SQL Server数据库中。镜像不能直接访问;它只用在错误恢复的情况下才可以被访问。

要进行数据库镜像所需的最小需求包括了两个不同的SQL Server运行环境。主服务器被称为“主机”,第二个服务器被称作“备机”。主机数据库就是你实际用着的数据库,镜像数据库就是你的数据库的备用拷贝。当事务写入你的基本服务器的时候,他们也同样被传送到并写入你的镜像数据库中。

除了基本和镜像之外,你还可以引入另一个可选的组件,名为“见证”。见证服务器是第三个SQL Server 2005运行实例,它是在判断什么时候进行错误恢复的时候,用于基本和镜像之间内部交流。只有当你想实现自动错误恢复的时候用到这个选项。它实现了2比1投票的能力,当我的一个组件不可达,并因此需要进行错误恢复的时候。见证服务器只有在你想实现自动错误恢复的时候才需要用到。

<>

下表是SQL Server可用性官方解决方案的一个对照表,现时我中心使用的恢复模式是“冷备份”中的“备份/恢复”,通常来说“热备份”比“冷备份”的可用性更高,恢复更快,更适合我中心现时的实际情况。如果不从成本考虑的话,“热备份”中的“故障转移群集”的可用性是最高的,但是故障转移群集需要借助磁盘阵列而且建设本身复杂性较高。数据库镜像的建立并没有太多的硬件要求,最起码没有像“故障转移群集”需要共享存储这么高的要求。

clip_image002

 

<>

(1)由于SQL Server是一个实例多个数据库的产品,数据库镜像技术是基于数据库级别的,因此每次主数据库新增数据库都必须为备机增加数据库并且为新增的数据库建立镜像关系。

(2)数据库的登录名和用户是存储在master数据库,master数据库是不能做镜像的,所以每次操作数据库的登录名和用户也是需要多维护一份,

(3)数据库作业不能得到相应的维护。

(4)微软号称镜像可以让客户端对故障透明,但是实际测试中发现只有满足特定的条件才能实现透明化,而且透明化得客户端支持才可行(.net Framework 2.0以上,Microsoft jdbc驱动 1.1以上)。

(5)跨数据库事务和分布式事务均不支持数据库镜像。

纵观其他几种方式,仅有“热备份”的“故障转移群集”没有这些问题。

 

<>

将主备数据库按照如图所示连接:

clip_image004
< Server 检查SQL>

只有SQL Server 2005 标准版、企业版和开发版才可以建立数据镜像。其他版本即Express只能作为见证服务器。如果实在不清楚什么版本,执行如下语句查看:

1 select  @@version;

若要对此数据库进行数据库镜像,必须将它更改为使用完整恢复模式。若要用 Transact-SQL 实现此目的,请使用 ALTER DATABASE 语句:

1  USE master;
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

--备机执行:

1 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

 

--主机执行:

 

1 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

--备机执行:

1 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

 

--主机执行:

 

1 BACKUP CERTIFICATE HOST_A_cert  TO  FILE  =  ' D:/SQLBackup/HOST_A_cert.cer ';

 --备机执行:

1 BACKUP CERTIFICATE HOST_B_cert  TO  FILE  =  ' D:/SQLBackup/HOST_B_cert.cer ';

 

将备份到D:/SQLBackup/的证书进行互换,即HOST_A_cert.cer复制到备机的D:/SQLBackup/。HOST_B_cert.cer复制到主机的D:/SQLBackup/

 

以下操作只能通过命令行运行,通过图形界面无法完成。(截至文档编写结束,SQL Server2005的不定号为SP2)

 

--主机执行:

1 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

--备机执行:

1 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次。

 

<>

在第一章中提到数据库镜像的缺点之一是无法维护登录名,所以需要我们手工维护登录。

通常来说数据库都将会有若干个用户作为访问数据库的用户,并且数据库会有相应的登录名,但是在备机中缺少与之相对应的登录名,例如某业务系统使用’myuser’作为登录名访问数据库,但是在备机中没有’myuser’这个登录名,因此一旦主备切换,业务系统就无法登录数据库了,这种情况称为"孤立用户"

在主数据库中执行如下语句:

1 USE master;
2 select sid,name  from syslogins;
3

查找出相应的用户名和sid,例如:上述的’myuser’

在备数据库中执行如下语句:

1 USE master;
2 exec sp_addlogin 
3 @loginame  =  ' <LoginName> '
4 @passwd  =  ' <Password> '
5 @sid  =  <sid > ;
6

这里的’LoginName’即主数据库中的登录名,sid即是上述通过SQL语句查找出的sid。

例如,查询得到的sid和name如下所示。

 

 

1 sid name
2
3 -- -------------------------------- -----------------
4
5 0x074477739DCA0E499C29394FFFC4ADE4 cz_account
6
7


则建立登录名的SQL语句:

1 USE master;
2 exec sp_addlogin 
3 @loginame  =  ' cz_account '
4 @passwd  =  ' password '
5 @sid  =  0x074477739DCA0E499C29394FFFC4ADE4;
6

到此为止可以认为备机数据库的环境已经与主机同步了,还差数据库内的数据未同步。

<>

承接上文,该节是描述如何同步主备数据库内的数据。

可以尝试从刚刚使用的全备文件进行还原,在还原数据的时候需要使用选上“with non recover”。如图所示:

clip_image006

 

如果执行成功数据库将会变成这个样子:clip_image008

<>

由于是实验,没有为服务器配置双网卡,IP地址与图有点不一样,但是原理一样。

--主机执行:

1 ALTER  DATABASE shishan  SET PARTNER  =  ' TCP://10.168.6.45:5022 ';

--如果主体执行不成功,尝试在备机中执行如下语句:

1 ALTER  DATABASE shishan  SET PARTNER  =  ' TCP://10.168.6.49:5022 ';

clip_image009

 

 

如果执行成功,则主备数据库将会呈现如上图所示的图标。

如果建立失败,提示类似数据库事务日志未同步,则说主备数据库的数据(日志)未同步,为保证主备数据库内的数据一致,应在主数据库中实施一次“事务日志”备份,并还原到备数据库上。备份“事务日志”如图所示:

clip_image011

 

还原事务日志时需在选项中选择“restore with norecovery”,如图所示:

clip_image013

 

clip_image015

 

成功还原以后再执行建立镜像的SQL语句。

--主机执行:

 

1 USE master;
2 ALTER  DATABASE  <DatabaseName >  SET PARTNER FAILOVER;
3

--备机执行:

1 USE master;
2 ALTER  DATABASE  <DatabaseName >  SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS;
3

1 -- 备机执行:
2 USE master;
3 ALTER  DATABASE  <DatabaseName >  SET PARTNER RESUME;  -- 恢复镜像
4 ALTER  DATABASE  <DatabaseName >  SET PARTNER FAILOVER;  -- 切换主备
5

--默认情况下,事务安全级别的设置为 FULL,即同步运行模式,而且SQL Server 2005 标准版只支持同步模式。

--关闭事务安全可将会话切换到异步运行模式,该模式可使性能达到最佳。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值