1.    概述

数据库镜像维护一个数据库的两个副本,这两个副本必须驻留在不同的 SQL Server 数据库引擎 服务器实例上。通常,这些服务器实例驻留在不同位置的计算机上。启动数据库上的数据库镜像操作时,在这些服务器实例之间形成一种关系,称为“数据库镜像会话”。其中一个服务器实例使数据库服务于客户端(“主体服务器”),另一个服务器实例则根据镜像会话的配置和状态,充当热备用或温备用服务器(“镜像服务器”)。同步数据库镜像会话时,数据库镜像提供热备用服务器,可支持在已提交事务不丢失数据的情况下进行快速故障转移。未同步会话时,镜像服务器通常用作热备用服务器(可能造成数据丢失)。在“数据库镜像会话”中,主体服务器和镜像服务器作为“伙伴”进行通信和协作。两个伙伴在会话中扮演互补的角色:“主体角色”和“镜像角色”。在任何给定的时间,都是一个伙伴扮演主体角色,另一个伙伴扮演镜像角色。每个伙伴拥有其当前角色。拥有主体角色的伙伴称为“主体服务器”,其数据库副本为当前的主体数据库。拥有镜像角色的伙伴称为“镜像服务器”,其数据库副本为当前的镜像数据库。如果数据库镜像部署在生产环境中,则主体数据库即为“生产数据库”。数据库镜像涉及尽快将对主体数据库执行的每项插入、更新和删除操作“重做”到镜像数据库中。重做通过将活动事务日志记录的流发送到镜像服务器来完成,这会尽快将日志记录按顺序应用到镜像数据库中。与逻辑级别执行的复制不同,数据库镜像在物理日志记录级别执行。从 SQL Server 2008 开始,在事务日志记录的流发送到镜像服务器之前,主体服务器会先将其压缩。在所有镜像会话中都会进行这种日志压缩。

2.      目的

发生灾难时,在具有自动故障转移功能的高安全性模式下,自动故障转移可快速使数据库的备用副本联机(而不会丢失数据)。在其他运行模式下,数据库管理员可以选择强制服务(可能丢失数据),以替代数据库的备用副本

3.      测试环境

3.1.       主服务器

Windows 2008R2 64bit,2G Mem,CPU 2.0GHz,局域网,IP:192.168.102.4x

3.2.       镜像服务器

Windows 2008R2 64bit,2G Mem,CPU 2.0GHz,局域网,IP:192.168.102.4y

3.3.       见证服务器

Windows 2008R2 64bit,2G Mem,CPU 2.0GHz,局域网,IP:192.168.102.4z

4.      配置镜像

4.1.       准备工作

4.1.1.  账户建立

Windows账户建立:分别在”主服务器”,”镜像服务器”,”见证服务器”,上建立本地帐号”public”,密码设置相同。

4.1.2.  端口开放

保持三台服务器端口5022端口可用,可用telnet命令测试,telnetIP 5022(建立完通讯端点后测试)

4.2.       配置镜像(基于工作组模式)

4.2.1.  主服务器上执行

use master
  go
  --创建登陆账户
  create login [TestServer1\public] from windows
  go
  --创建通讯端点
  create endpoint endpointmirror
  state=started --创建的同时激活端点
  as
  tcp(listener_port=5022)
  for 
  database_mirroring(encryption=supported,role=partner)
  go
  --授予账户[TestServer1\public]对端点的connect权限
  grant connect on endpoint::endpointmirror to [TestServer1\public]
  go
  --数据库模式确认
  alter database Northwind set Recovery full with no_wait
  go
  --在主服务器上进行数据库备份
  backup database Northwind
  to disk='d:\dbbackup\Northwind.bak'

4.2.2.  镜像服务器上执行

use master
  go
  --创建登陆账户
  create login [TestServer2\public] from windows
  go
  --创建通讯端点
  create endpoint endpointmirror
  state=started --创建的同时激活端点
  as
  tcp(listener_port=5022)
  for 
  database_mirroring(encryption=supported,role=partner)
  go
  --授予账户[TestServer2\public]对端点的connect权限
  grant connect on endpoint::endpointmirror to [TestServer2\public]
  go
  
  --在镜像服务器上还原数据库(前提数据库备份已拷贝)
  restore database Northwind
  from disk='d:\dbbackup\Northwind.bak'
  with file=1,norecovery

4.2.3.  启动镜像

4.2.3.1.      镜像服务器执行

--启动镜像
  alter database Northwind
  set partner='TCP://192.168.102.4x:5022'

4.2.3.2.      主体服务器执行

--启动镜像
  alter database Northwind
  set partner='TCP://192.168.102.4y:5022'

4.2.4.  测试镜像效果

4.2.4.1.      主体服务器执行

use Northwind
  go
  create table table12(id int)

4.2.4.2.      镜像服务器执行

use master
  go
  if exists(select 1 from sys.databases 
                     where name='snap_Northwind')
  drop database snap_Northwind
  go
  create database  snap_Northwind
  on
  (name=Northwind,filename='C:\....\snap_Northwind.snap')
  as snap of Northwind
  go
  use  snap_Northwind
  go
  select name from sys.tables

4.2.4.3.      通过镜像监视器查看镜像状态

4.2.4.4.      使用系统视图查看镜像的状态

select * from sys.database_mirroring
  go
  select * from sys.database_mirroring_endpoints
  go
  select * from sys.database_mirroring_witness

4.2.5.  加入见证服务器

4.2.5.1.      见证服务器执行

use master
  go
  --创建登陆账户
  create login [TestServer3\public] from windows
  go
  --创建通讯端点
  create endpoint endpointmirror
  state=started --创建的同时激活端点
  as
  tcp(listener_port=5022)
  for 
  database_mirroring(encryption=supported,role=witness)
  go
  --授予账户[TestServer3\public]对端点的connect权限
  grant connect on endpoint::endpointmirror to [TestServer3\public]
  go

4.2.5.2.      主体服务器执行

--加入见证服务器
  alter database Northwind
  set witness='TCP://192.168.102.4z:5022'

5.      故障模拟

5.1.       数据库损坏

5.1.1.  停止主服务器的SQLServer服务。

5.1.2.  此时辅助服务器自动切换为主体角色(主体已断开连接)(192.168.102.4y)

5.1.3.  启动原主体数据库的SQLServer服务(192.168.102.4x)

5.1.4.  此时192.168.102.4y变为(主体/已同步)状态,192.168.102.4x变成(镜像/已经同步)

5.2.       手动切换

5.2.1.  主体服务器执行

alter database Northwind
  set partner failover

5.2.2.  主体及镜像角色自动实现了切换

6.      总结

6.1.       注意点

6.1.1.  基于工作组的镜像,需要在各服务器上建立相同的本地帐号,且密码相同

6.1.2.  启动镜像必须从镜像服务器开始执行

6.1.3.  见证服务器需要在主体服务器上加入

6.1.4.  数据库模式需要为完整模式

6.1.5.  各服务器的版本必须相同

6.1.6.  保证镜像数据库有足够的空间容纳镜像数据库

6.1.7.  在镜像服务器上还原数据库,要用Norecovery选项

6.1.8.  如果数据库镜像已经停止,则必须将对主体数据库执行的所有后续日志备份应用到镜像数据库中,然后才可以重新启动镜像

6.2.       结论

6.2.1.  基于工作组的镜像操作起来比基于证书的要简单,切换容易

6.2.2.  SQLAgent对于镜像来说是非必须的,不同于Log Shipping

6.3.       知识点

6.3.1.  修改数据库的所有者

alter authorization on Database::Northwind to [sa]

DatabaseMirroring搭建的更多相关文章

  1. SQL Server非域(跨域)环境下镜像(Mirror)的搭建步骤及注意事项

    在实际的生产环境下,我们经常需要跨域进行数据备份,而创建Mirror是其中一个方案.但跨域创建Mirror要相对复杂的多,需要借助证书进行搭建. 下面我们将具体的步骤总结如下: 第一部分 创建证书 S ...

  2. 非域环境下SQL Server搭建Mirror(镜像)的详细步骤

    1.测试验证环境 服务器角色 机器名 IP SQL Server Ver 主体服务器 WIN-TestDB4O 172.83.XXX.XXX SQL Server 2012 - 11.0.5058.0 ...

  3. Online Judge(OJ)搭建(第一版)

    搭建 OJ 需要的知识(重要性排序): Java SE(Basic Knowledge, String, FileWriter, JavaCompiler, URLClassLoader, Secur ...

  4. Angular2入门系列教程1-使用Angular-cli搭建Angular2开发环境

    一直在学Angular2,百忙之中抽点时间来写个简单的教程. 2016年是前端飞速发展的一年,前端越来越形成了(web component)组件化的编程模式:以前Jquery通吃一切的田园时代一去不复 ...

  5. 总结:Mac前端开发环境的搭建(配置)

    新年新气象,在2016年的第一天,我入手了人生中第一台自己的电脑(大一时好友赠送的电脑在一次无意中烧坏了主板,此后便不断借用别人的或者网站的).macbook air,身上已无分文...接下来半年的房 ...

  6. Angular企业级开发(5)-项目框架搭建

    1.AngularJS Seed项目目录结构 AngularJS官方网站提供了一个angular-phonecat项目,另外一个就是Angular-Seed项目.所以大多数团队会基于Angular-S ...

  7. 【分享】标准springMVC+mybatis项目maven搭建最精简教程

    文章由来:公司有个实习同学需要做毕业设计,不会搭建环境,我就代劳了,顺便分享给刚入门的小伙伴,我是自学的JAVA,所以我懂的.... (大图直接观看显示很模糊,请在图片上点击右键然后在新窗口打开看) ...

  8. 一起学微软Power BI系列-使用技巧(4)Power BI中国版企业环境搭建和帐号问题

    千呼万唤的Power BI中国版终于落地了,相信12月初的微软技术大会之后已经铺天盖地的新闻出现了,不错,Power BI中国版真的来了,但还有些遗憾,国际版的一些重量级服务如power bi emb ...

  9. 从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)

    从0开始搭建SQL Server AlwaysOn 第一篇(配置域控) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnb ...

随机推荐

  1. spring过滤器

    什么是过滤器 Spring 中不能处理用户请求,但可以用来提供过滤作用的一种Servlet规范.在请求进入容器之后,还未进入Servlet之前进行预处理,并且在请求结束返回给前端这之间进行后期处理.具 ...

  2. 命令:tr

    参考资料:https://www.thegeekstuff.com/2012/12/linux-tr-command/ 简介 tr命令用于转换.删除或者去除重复字符.它从STDIN中读取数据并且将其写 ...

  3. vue组件之间通信传值

    原文链接:https://blog.csdn.net/lander_xiong/article/details/79018737 我认为这位博主的这篇文章写的非常详细,通俗易懂, 我们这次的vue项目 ...

  4. VC6微软正则表达式greta使用案例

    #include <string> #include "regexpr2.h" using namespace std; using namespace regex;/ ...

  5. letter-spacing造成文字无法居中的问题

    在使用letter-spacing增加字体间距时,发现字体间距被扩大的同时,字体无法完全居中在div中,如下: 原因:letter-spacing是在字中间产生的间隔,第一个字旁边没有间隔,所以导致不 ...

  6. MySQL_事务没有提交导致 锁等待 Lock wait timeout exceeded

    java.lang.Exception:### Error updating database.  Cause: java.sql.SQLException: Lock wait timeout ex ...

  7. 使用Automation将Azure SQL DB容灾到本地

    前段时间有个客户有如下需求,将Azure SQL Database数据库容灾到本地(备份频率1小时/次). 那么对于这样的需求,我们可以使用Azure Automation来实现自动化备份到本地. 大 ...

  8. Sublime Text下使用SFTP/FTP插件

    一.前言 本文主要记录了Sublime Text编辑器下的SFTP/FTP的安装使用,方便linux和windows下的文件编辑,只是简单的记录,有不足之处,还望指教. 二.Linux和windows ...

  9. [原创]用Charles模拟App各种网络带宽测试介绍

    [原创]用Charles模拟App各种网络带宽测试介绍 相信每个测试在进行自己公司App测试时,都会碰到一个问题,如何去模拟各种App在各种带宽下的测试情况,估计很少有公司直接去采用2g/3g/4g卡 ...

  10. python脚本后台执行

    在Linux中,可以使用nohup将脚本放置后台运行,如下: nohup python myscript.py params1 > nohup.out 2>&1 & 1 但 ...