· 版本号 |
sql server 2005 版本 |
9.00.1399 |
sql server 2005(初始版本) |
9.00.2047 |
sql server 2005 SP1 |
9.00.3042 |
sql server 2005 SP2 |
我们这里直接打SP2补丁:略
准备数据库:
条件 很重要:
主体数据库必须是完全恢复模式
创建镜像数据库
在主体数据库上做一个完全备份,在镜像服务器上使用NORECOVER选项恢复主体数据库。
继续恢复后续日志备份(NORECOVER) NORECOVER 很重要
配置数据库镜像端点 (ENDPOINT)
数据库镜像端点实现镜像会话的通讯,也就是各个服务器的入口点,有点类似于端口号。但不是。也就是说你创建了这个端点之后,各个服务器之间就可以使用TCP协议进行实例间的通讯。每个镜像端点上都在一个唯一的TCP端口号上侦听,一般大家都使用5022号端口。
创建数据库镜像端点:
需要在每个实例上创建
只有管理员组的成员才能权限。
设置端点角色 即有的是伙伴端点,有的是见证端点,所以必须要指定。
激活端点 默认是不能使用的,所以要激活。
下面我们看一下使用T-SQL 语句创建端点
CREATE ENDPOINT DBMIRRORING
AS TCP(LISTENER_PORT=5022)当然也可以使用其他端口,只要没有被使用
FOR DATABASE_MIRRORING(ROLE=PARTNER,ENCRYPTION=SUPPORTED) GO
-- 创建的是一个数据库镜像端点,角色是伙伴,通讯过程是通过加密的。
ALTER ENDPOINT DBMIRRORING STATE=STARTED GO --激活
此时这个端点就开始侦听了。
创建见证服务器的端点:创建的时候激活端点。
CREATE ENDPOINT DBMIRRORING
STATE=STARTED AS TCP(LISTENER_PORT=5022)
For DATABASE_MIRRORING (ROLE=WITNESS,ENCRYPTION=SUPPORTED)
配置安全性:
数据库镜像中的实例之间必须可信 都使用WINDOWS 身份验证或是基于证书的身份验证(非信任域),为了简单为例,我们使用WINDOWS身份验证。
赋予服务帐户对端点的连接权限。
在这里我们都使用相同的用户名口令
下面我们创建完端点后就要启动数据库镜像,注意顺序很重要
指定镜像数据库的伙伴 在镜像服务器上操作
指定主体数据库伙伴 在主体服务器上操作
指定见证服务器 在见证服务器上操作
指定事务安全选项 FULL 还是 OFF
对应语句分别是:
ALTER DATABASE NOTHWIND SET PARTNER=N'TCP:/SERVER1H:
–-在SERVER2(镜像)上执行
ALTER DATABASE NOTHWIND SET PARTNER=N'TCP:/SERVER2:
--在SERVER1(主体)上执行
ALTER DATABASE NOTHWIND SET WITNESS=N'TCP:/SERVER3:
--在SERVER1(主体)上执行
ALTER DATABASE NOTHWIND SET SAFETY FULL;
--在SERVER1(主体)上执行 高可用性
当然也可以使用SMSS
那么完成之后怎么来查看数据库镜像是否完成,可以通过以下两种方法:
SMSS 数据库属性---镜像状态
T-SQL
SELECT * FROM SYS.DATABASE——MIRRORING
SELECT * FROM SYS.DATABASE——MIRRORING——WITNESS
下面我们具体看一下配置高可用性数据库镜像
我们使用T-SQL 可以很明显的看到配置的过程。
下面我来介绍一下我们所使用的环境:
SERVER1为主体服务器
SERVER2为镜像服务器
SERVER3 为见证服务器
首先我们要
准备数据库:一个是备份主体数据库,一个是在镜像服务器上恢复。
所以
在SERVE1上:
BACKUP DATABASE NORTHWIND TO DISK='C:\NW.BAK'
在 SERVER2上:
RESTORE DATABASE NORTHWIND FROM DISK='C:\NW.BAK' WITH NORECOVERY
创建数据库端点:
1. 在SERVER1上创建数据库镜像端点,用于伙伴通讯
Create endpoint dbmirrep as tcp (listener_port=5022)
For database_mirroring (role=partner,encryption=supported );
Alter endpoint dbmirrep state=started
通过图形界面可以查看到
2. 在SERVER2上创建数据库端点,也是用于伙伴通讯
Create endpoint dbmirrep as tcp (listener_port=5022)
For database_mirroring (role=partner,encryption=supported)
Alter endpoint dbmirrep state=started
3. 在SERVER3上创建镜像端点,用于见证通讯
CREATE ENDPOINT DBMIRREP AS TCP (LISTENER_PORT=5022)
FOR DATABASE_MIRRORING (role=witness,encryption=supported)
4. 检查端点配置
SELECT * FROM SYS.DATABASE_MIRRORING_ENDPOINTS
也可以通过图形界面查看
配置数据库镜像安全性:也就是指定哪些用户可以使用这个端点。肯定是管理员,一般用户不让他访问。
分别执行:
Grant connect on endpoint::"dbmirrep" to "server1\dufei"
Grant connect on endpoint::"dbmirrep" to "server2\dufei"
Grant connect on endpoint::"dbmirrep" to "server3\dufei"
最后一个就是启动数据库镜像。注意:顺序 首先要从镜像服务上配置
在SERVER2上,指定伙伴端点:
ALTER DATABASE ITET SET PARTNER='TCP://SERVER1:5022'
在SERVER1上,指定伙伴端点:
ALTER DATABASE itet SET PARTNER='TCP://SERVER2:5022' –查看数据库
--到此为止,就是咱们前面所介绍的高级别保护模式。可以实现数据完整性,但是不能实现高可用性。所以还要继续,也就是说到这里为止,不要见证服务器也可以,但是不能实现故障的自动转移:
在 SERVER1上,指定见证服务器端点:
Alter database ITET set wiTness=N'TCP://SERVER3:5022'
设置数据库镜像事务安全级别:
ALTER DATABASE ITET SET SAFETY FULL
实验结束,但一定要注意细节
最后看一下数据库镜像角色切换:也就是如何实现故障转移
自动故障转移:
只针对高可用性模式
SAFETY=FULL
测试:禁用主服务器的网卡,查看库状态,再启用再查看
我们到这里已经知道了如何实现数据库镜像,那么用户如何来使用:客户端都是连接到主体服务器上进行工作的。那么如果主体服务器不可用了,那么就会造成用户连接的失败,它怎么知道去自动连接镜像服务器,这里一般使用ADO技术,如ASP.NET 或是微软所提借的连接工具。
我们这里借助WINDOWS 的集群功能:来进行测试:
SERVER1与SERVER2配置成WINDOWS集群:
实验到此结束!
本文出自 “杜飞” 博客