SQL Server 2005 镜像构建手册

时间:2022-09-06 19:17:20

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

SQL Server 2005 镜像构建手册

2、 缺点

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

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

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

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

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

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

一、配置主备机

1、 物理连接

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

SQL Server 2005 镜像构建手册

2、 检查SQL Server 2005数据库

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

1SQL Server 2005 镜像构建手册select @@version;

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

1 USE master;
2 ALTER DATABASE <DatabaeName> 
3 SET RECOVERY FULL;

二、主备实例互通

实现互通可以使用域或证书来实现,考虑实现的简单,以下选取证书的方式实现。注意:实现“主备数据库实例互通”的操作只需要做一次,例如为了将两个SQL Server 2005的实例中的5个数据库建成镜像关系,则只需要做一次以下操作就可以了;或者这样理解:每一对主备实例(不是数据库)做一次互通。

1、创建证书(主备可并行执行)

--主机执行:

1SQL Server 2005 镜像构建手册USE master;
2SQL Server 2005 镜像构建手册CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'killkill';
3SQL Server 2005 镜像构建手册CREATE CERTIFICATE HOST_A_cert WITH SUBJECT = 'HOST_A certificate' , 
4SQL Server 2005 镜像构建手册START_DATE = '01/01/2008';
5SQL Server 2005 镜像构建手册

--备机执行:

1SQL Server 2005 镜像构建手册USE master;
2SQL Server 2005 镜像构建手册CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'killkill';
3SQL Server 2005 镜像构建手册CREATE CERTIFICATE HOST_B_cert WITH SUBJECT = 'HOST_B certificate', 
4SQL Server 2005 镜像构建手册START_DATE = '01/01/2008';
5SQL Server 2005 镜像构建手册

2、创建连接的端点(主备可并行执行)

--主机执行:

1SQL Server 2005 镜像构建手册CREATE ENDPOINT Endpoint_Mirroring 
2SQL Server 2005 镜像构建手册STATE = STARTED 
3SQL Server 2005 镜像构建手册AS 
4SQL Server 2005 镜像构建手册TCP ( LISTENER_PORT=5022 , LISTENER_IP = ALL ) 
5SQL Server 2005 镜像构建手册FOR 
6SQL Server 2005 镜像构建手册DATABASE_MIRRORING 
7SQL Server 2005 镜像构建手册( AUTHENTICATION = CERTIFICATE HOST_A_cert , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL );
8SQL Server 2005 镜像构建手册

--备机执行:

1SQL Server 2005 镜像构建手册CREATE ENDPOINT Endpoint_Mirroring 
2SQL Server 2005 镜像构建手册STATE = STARTED 
3SQL Server 2005 镜像构建手册AS 
4SQL Server 2005 镜像构建手册TCP ( LISTENER_PORT=5022 , LISTENER_IP = ALL ) 
5SQL Server 2005 镜像构建手册FOR 
6SQL Server 2005 镜像构建手册DATABASE_MIRRORING 
7SQL Server 2005 镜像构建手册( AUTHENTICATION = CERTIFICATE HOST_B_cert , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL );
8SQL Server 2005 镜像构建手册

3、备份证书以备建立互联(主备可并行执行)

--主机执行:

1SQL Server 2005 镜像构建手册BACKUP CERTIFICATE HOST_A_cert TO FILE = 'D:\SQLBackup\HOST_A_cert.cer';

--备机执行:

1SQL Server 2005 镜像构建手册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)

--主机执行:

1SQL Server 2005 镜像构建手册CREATE LOGIN HOST_B_login WITH PASSWORD = 'killkill';
2SQL Server 2005 镜像构建手册CREATE USER HOST_B_user FOR LOGIN HOST_B_login;
3SQL Server 2005 镜像构建手册CREATE CERTIFICATE HOST_B_cert AUTHORIZATION HOST_B_user FROM FILE = 'D:\SQLBackup\HOST_B_cert.cer';
4SQL Server 2005 镜像构建手册GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login];
5SQL Server 2005 镜像构建手册

--备机执行:

1SQL Server 2005 镜像构建手册CREATE LOGIN HOST_A_login WITH PASSWORD = 'killkill';
2SQL Server 2005 镜像构建手册CREATE USER HOST_A_user FOR LOGIN HOST_A_login;
3SQL Server 2005 镜像构建手册CREATE CERTIFICATE HOST_A_cert AUTHORIZATION HOST_A_user FROM FILE = 'D:\SQLBackup\HOST_A_cert.cer';
4SQL Server 2005 镜像构建手册GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login];
5SQL Server 2005 镜像构建手册

三、建立镜像关系

以下步骤是针对每个数据库进行的,例如:现有主机中有5个数据库以下过程就要执行5次。

1、 手工同步登录名和密码

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

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

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

1SQL Server 2005 镜像构建手册USE master;
2SQL Server 2005 镜像构建手册select sid,name from syslogins;
3SQL Server 2005 镜像构建手册

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

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

1SQL Server 2005 镜像构建手册USE master;
2SQL Server 2005 镜像构建手册exec sp_addlogin 
3SQL Server 2005 镜像构建手册@loginame = '<LoginName>', 
4SQL Server 2005 镜像构建手册@passwd = '<Password>', 
5SQL Server 2005 镜像构建手册@sid = <sid> ;
6SQL Server 2005 镜像构建手册

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

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

1SQL Server 2005 镜像构建手册sid name
2SQL Server 2005 镜像构建手册
3SQL Server 2005 镜像构建手册---------------------------------- -----------------
4SQL Server 2005 镜像构建手册
5SQL Server 2005 镜像构建手册0x074477739DCA0E499C29394FFFC4ADE4 cz_account
6SQL Server 2005 镜像构建手册
7SQL Server 2005 镜像构建手册

则建立登录名的SQL语句:

1SQL Server 2005 镜像构建手册USE master;
2SQL Server 2005 镜像构建手册exec sp_addlogin 
3SQL Server 2005 镜像构建手册@loginame = 'cz_account', 
4SQL Server 2005 镜像构建手册@passwd = 'password', 
5SQL Server 2005 镜像构建手册@sid = 0x074477739DCA0E499C29394FFFC4ADE4;
6SQL Server 2005 镜像构建手册

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

2、 准备备机数据库

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

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

SQL Server 2005 镜像构建手册

如果执行成功数据库将会变成这个样子:SQL Server 2005 镜像构建手册

3、 建立镜像

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

--主机执行:

1SQL Server 2005 镜像构建手册ALTER DATABASE shishan SET PARTNER = 'TCP://10.168.6.45:5022';

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

1SQL Server 2005 镜像构建手册ALTER DATABASE shishan SET PARTNER = 'TCP://10.168.6.49:5022';
SQL Server 2005 镜像构建手册

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

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

SQL Server 2005 镜像构建手册

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

SQL Server 2005 镜像构建手册
SQL Server 2005 镜像构建手册

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

四、测试操作

1、主备互换

--主机执行:

1SQL Server 2005 镜像构建手册USE master;
2SQL Server 2005 镜像构建手册ALTER DATABASE <DatabaseName> SET PARTNER FAILOVER;
3SQL Server 2005 镜像构建手册

2、主服务器Down掉,备机紧急启动并且开始服务

--备机执行:

1SQL Server 2005 镜像构建手册USE master;
2SQL Server 2005 镜像构建手册ALTER DATABASE <DatabaseName> SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS;
3SQL Server 2005 镜像构建手册

3、原来的主服务器恢复,可以继续工作,需要重新设定镜像

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

4、原来的主服务器恢复,可以继续工作

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

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

1SQL Server 2005 镜像构建手册USE master;
2SQL Server 2005 镜像构建手册ALTER DATABASE <DatabaseName> SET PARTNER SAFETY FULL; --事务安全,同步模式
3SQL Server 2005 镜像构建手册ALTER DATABASE <DatabaseName> SET PARTNER SAFETY OFF; --事务不安全,异步模式
4SQL Server 2005 镜像构建手册

SQL Server 2005 镜像构建手册的更多相关文章

  1. 实战SQL Server 2005镜像配置全过程

    SQL Server 2005镜像配置基本概念 我理解的SQL Server 2005镜像配置实际上就是由三个服务器(也可以是同一服务器的三个 SQL 实例)组成的一个保证数据的环境,分别是:主服务器 ...

  2. SQL SERVER 2005镜像配置(有无见证服务器都行)

    我用的是没有见证的,但找的文章里有镜像,所以都做一下补充,两个网址做的参考, 之所以在从他们那再补充一次是为了怕有一天他们的文章被删了我这还有个备用的,这两篇写的不错 其他的都不行 特别乱,这是找的最 ...

  3. Sql Server 2005 镜像后收缩日志

    网站的一个数据库的日志文件已经到150个G的地步,数据文件才几十M,通过常规的操作去收缩日志: >数据库右键 → 任务 → 收缩 → 文件 , 在弹出的窗口中,文件类型选择"日志&qu ...

  4. SQL Server 2005高可用性模式下创建数据库镜像

    SQL Server 2005高可用性模式下创建数据库镜像   高可用性模式下创建数据库镜像 第一步: --创建镜像用数据库-在主服务器上操作 create database db_mirror on ...

  5. win7系统如何安装SQL Server 2005

    Microsoft Windows 7 旗舰版(32位) SQL Server 2005 简体中文开发板 方法/步骤   1 首先为了保证数据库的顺利安装,先启用IIS服务吧!Win7比XP好的一点是 ...

  6. SQL Server 2005 Service Broker

    一.引言 SQL Server 2005 的一个主要成就是可以实现可靠.可扩展且功能完善的数据库应用程序.与 .NET Framework 2.0 公共语言运行库 (CLR) 的集成使开发人员可以将重 ...

  7. SQL Server 2005 中实现通用的异步触发器架构

    在SQL Server 2005中,通过新增的Service Broker可以实现异步触发器的处理功能.本文提供一种使用Service Broker实现的通用异步触发器方法. 在本方法中,通过Serv ...

  8. 浅析SQL Server 2005中的主动式通知机制

    一.引言 在开发多人同时访问的Web应用程序(其实不只这类程序)时,开发人员往往会在缓存策略的设计上狠下功夫.这是因为,如果将这种环境下不常变更的数据临时存放在应用程序服务器或是用户机器上的话,可以避 ...

  9. SQL Server 2005 盛宴系列 经典教程

    SQL Server 2005 盛宴系列 经典教程  [复制链接]   发表于 2007-3-27 14:08 | 来自 51CTO网页 [只看他] 楼主     TECHNET  SQL serve ...

随机推荐

  1. mysql数据库中如何修改已建好的表中的【列名】【列的属性】

    sql命令:alter table tbl_name change old_col_name new_col_name data_type not null auto_increment primar ...

  2. Linux启动过程

    系统BIOS是当你点击开机键是第一个运行的程序.1. 首先主板需要接收到一个稳定的电源供给信号.如果没有得到稳定的电源供给系统自动关闭.2. 当接受到一个稳定的电源供给信号,处理器会启动,当处理器启动 ...

  3. 使用JDBC构建简单的数据访问层

    本教程的目的是使用Java编写的分离的层去访问数据库中的表,这一层通常称为数据访问层(DAL) 使用DAL的最大好处是通过直接使用一些类似insert()和find()的方法简化了数据库的访问操作,而 ...

  4. 给枚举加上Description,必要时,可以直接获取枚举类型代表的中文

    http://www.cnblogs.com/lyl6796910/p/3958768.html

  5. C51指针小结

    一. 指针变量的定义 指针变量定义与一般变量的定义类似,其形式如下: 数据类型 [存储器类型1] * [存储器类型2] 标识符: [存储器类型1] 表示被定义为基于存储器的指针.无此选项时,被定义为一 ...

  6. 认识到了x64程序的必要性

    假如我做一个程序,在运行过程中需要使用一个Map,然而这个Map存储了超多信息的话,系统内存不够就会崩溃了.以前的解决方案可能是把内容存储在一个文件/数据库里,但是有内存岂不是更方便.更直截了当!

  7. 初学python之路-day10

    基础部分先告一段落,今天开始学习函数. 一.函数:完成 特定 功能的代码块,作为一个整体,对其进行特定的命名,该名字就代表函数         -- 现实中:很多问题要通过一些工具进行处理 => ...

  8. linux(centos7)安装docker

    1.检查内核版本,必须是3.10及以上 uname ‐r 2.安装docker yum install docker 3.输入y确认安装 4.启动docker [root@localhost ~]# ...

  9. java web path

    1,request.getRealPath("/");这个方法已不推荐用 2,在Servlet 里用this.getServletContext().getRealPath(&qu ...

  10. 【UOJ &num;351】新年的叶子(树的直径,期望)

    题目链接 这的确是一道好题,我们不妨依循思路一步步推导,看问题是如何被解决的. 做一些约定,设$m$为树的叶子节点个数,设$len$为该树的直径(经过的点数). 毫无疑问,直径可能有多条,我们需要把所 ...