客户端重定向(1): 自动重定向连接-->使用ADO.NET或者SQL Native Client能够自动连接到故障转移后的伙伴 连接字符串指定故障转移伙伴 ConnectionString = "Data Source=A;Failover Partner=B;
Initial Catalog=AdventureWorks;Integrated Security=True;"
客户端重定向(2): 非自动客户端重定向-->编写客户端代码实现重定向 使用NLB手动重定向客户端请求 客户端应用重定向的考虑-->数据库镜像是数据库级别的故障转移 跨数据库/多数据库应用的考虑
镜像数据库快照(1): 在镜像数据库上创建数据库快照-->会话中的镜像数据库直接不可访问 在镜像数据库上创建快照,提供只读访问 用户通过快照访问镜像实例上的数据 镜像数据库快照可以为报表应用提供数据 故障转移后快照仍然保留在原实例上
镜像数据库快照(2): 存在的数据库快照会影响镜像服务器的性能-->影响故障转移所花费的时间 及时删除不用的数据库快照 考虑使用数据库以复制获得更好的性能
首先介绍一下环境结构: 计算机名称: MIR-A是主体服务器 IP地址: 192.168.0.1 计算机名称: MIR-B是镜像服务器 IP地址: 192.168.0.2 计算机名称: MIR-W是见证服务器 IP地址: 192.168.0.3
如何使用镜像数据库快照呢?
我现在来到计算机名称叫做MIR-A这台主体服务器 在主体服务器上用户是可以很方便地连接到数据库进行访问的 1.全选在MIR-B上,尝试连接当前的镜像数据库,返回错误信息的语句 按执行之后是可以访问到数据库里面的内容 这是没有问题的 因为主体数据库始终是为用户提供服务的 但是在镜像数据库中用户是没有办法去连接并且访问的
我现在来到计算机名称叫做MIR-B这台镜像服务器 1.全选在MIR-B上,尝试连接当前的镜像数据库,返回错误信息的语句 按执行之后可以看到报了错误-->无法打开数据库 "Northwind"。因为该数据库充当镜像数据库。镜像数据库是处于一种还原的状态 所以客户端是没有办法进行访问的 我们可以为镜像数据库创建一种快照,访问快照数据
1.全选在MIR-B上,为镜像数据库创建数据库快照的语句 按执行之后 展开数据库--数据库快照--可以看到一个叫做Northwind_snap_1的数据库快照 那么这个数据库快照就可以为用户提供只读的数据了 那么这个数据是对于刚才创建快照那一个时刻点上数据库做了一个快照 所以就是那一个时刻点上的数据库情况 当你以后做了数据更改之后 数据库快照的数据是不变的
接下来在MIR-B这台镜像服务器上执行语句看看是不是能够使用刚才创建的数据库快照 2.全选在MIR-B上,查看并连接到创建的快照数据库,访问快照数据库中的数据语句 按执行之后就可以看到快照数据库里面的内容了
我现在到计算机名称叫做MIR-A这台主体服务器进行手动故障转移 3.全选在MIR-A,执行手动故障转移,MIR-B成为主体服务器的语句 按执行 手动故障转移完成之后Northwind这个数据库就显示成镜像,已断开连接 /正在恢复)的状态了 表示主体服务器变成镜像服务器也承载了镜像数据库 然后镜像服务器就变成了主体服务器了
我现在来到计算机名称叫做MIR-B这台主体数据库服务器 选定USE Northwind GO SELECT * FROM Employees GO按执行之后会看到现在镜像服务器成为主体服务器可以提供Northwind数据库的访问 选定USE Northwind_snap_1 GO SELECT * FROM Employees; GO按执行之后可以看到快照依然是可以进行访问到的
我们一般对不用的数据库快照要及时地删除从而避免镜像数据库的负荷太重 1.全选删除不再使用的数据库快照语句 按执行之后镜像数据库中的快照就被删除了 按F5键来刷新一下数据库 展开数据库--可以看到数据库快照已经被删除了
可用性场景分析: 高可用性模式情景-->服务器不可用 通讯链路中断 高保护级别模式情景 高性能模式情景
高级别保护模式: 只要有一台服务器不可用就会终止数据库服务
高性能模式: 在高性能模式中主体服务器的可用性不受镜像服务器状态的影响
监视数据库镜像: 数据库镜像相关的系统目录视图-->sys.database_mirroring_endpoints sys.database_mirroring sys.database_mirroring_witness sys.dm_db_mirroring_connections
Metadata列: mirroring_state_desc mirroring_role_desc mirroring_safety_level_desc mirroring_safety_seqence mirroring_failover_lsn
数据库镜像状态metadate-->sys.database_mirroring示例:
Metadata列名称 主体值: 服务器A 镜像值: 服务器B
db_name(database_id) AdventureWorks AdventureWorks
mirroring_role_desc PRINCIPAL MIRROR
mirroring_safety_level_desc FULL FULL
mirroring_state_desc SYNCHRONIZED SYNCHRONIZED
mirroring_safety_sequence 1 1
mirroring_role_sequence 1 1
mirroring_partner_instance TCP://B:5022 TCP://A:5022
mirroring_witness_name TCP://W:5022 TCP://W:5022
mirroring_witness_state_desc CONNECTED CONNECTED
mirroring_failover_lsn 95000000007300001 95000000007300001
数据库状态描述-->mirroring_state_desc可能的状态值: DISCONNECTED SYNCHRONIZED SYNCHRONIZING PENDING_FAILOVER SUSPENDED
监视数据库镜像性能: 在SQL 2005中提供了数据库镜像专用性能对象 常用的性能计数器-->主体服务器: Log Bytes Sent/sec Log Send Queue Transaction Delay 镜像服务器: Log Bytes Received/sec Redo Queue KB
估算时间花费: 估算故障恢复时间-->Redo时间≈(Redo Queue)/(Redo Bytes/sec) 估算镜像数据库追上主体事务的同步时间-->追赶时间≈(Log Send Queue)/(Log Bytes Received/sec)
使用GUI管理和监视数据库镜像-->通过数据库资源管理器可以完成: 创建和删除数据库镜像 查看数据库镜像状态 执行故障转移
如何管理和监视数据库镜像呢?
我现在来到计算机名称叫做MIR-B这台计算机执行USE master ALTER DATABASE Northwind SET PARTNER FAILOVER这条语句 执行完成之后MIR-B这台服务器就成为镜像服务器 计算机名称叫做MIR-A这台服务器就成为主体服务器了
如何去监视数据库镜像的过程和它的状态呢? 1.全选sys.database_mirroring_endpoints的语句 按执行之后就可以看到当前数据库镜像所使用的端点和端点的角色了 比如说这个端点当前的状态是不是启用的 它是作为那一种角色的
我们可以去查看当前数据库镜像的一些相关信息 2.全选sys.database_mirroring的语句 按执行之后就可以看到数据库镜像的一些相关信息了
3.全选sys.dm_db_mirroring_connections语句 按执行之后就可以看到当前数据库镜像所有的一些状态信息了 比如说它的登录名和它的用户名是什么 它登录的状态和加密的形式等等都可以看到的
配置中的常见问题: 镜像服务器无法追上主体服务器-->在镜像上恢复主体数据库的事务日志备份 由于账户权限导致不能创建镜像会话-->相互信任的服务账户 不可信连接中正确配置用户证书 镜像端点和伙伴的名称配置问题-->授予服务账户CONNECT权限 使用FQDN标识伙伴
运行时的常见问题: 镜像服务器Redo错误-->数据库状态显示为质疑(Suspect) 避免增加的数据库文件路径错误 确保镜像服务器上有足够的磁盘空间执行Redo 主体数据库无法连接-->在事务安全开启的情况下启动强制服务 设置SAFTEY = OFF
部署前测试数据库镜像: 部署数据库镜像过程中的测试 测试内容-->服务器不可用 通讯链路中断 Redo错误 日志buffer失败
可用性技术比较(1)-->见下图:
可用性技术比较(2)-->见下图:
数据库版本-->SQL Server 2005版本对数据库镜像的支持
数据库镜像功能 企业版 标准版 工作组版 学习版
伙伴服务器 √ √
见证服务器 √ √ √ √
Safety=FULL √ √
Safety=OFF √
故障转移后的undo过程可用 √ √
并行redo √
数据库快照 √