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. 前端自动化grunt轻松入门

    如果你还不了解grunt,或者只是听过它的名字而没有去研究过它,那么这篇入门级的文章就是为你写的,相信看完你就会爱上grunt! grunt是什么? grunt是一个非常好的自动化工具,你只管code ...

  2. [教程] Spring+Mybatis环境配置多数据源

    一.简要概述 在做项目的时候遇到需要从两个数据源获取数据,项目使用的Spring + Mybatis环境,看到网上有一些关于多数据源的配置,自己也整理学习一下,然后自动切换实现从不同的数据源获取数据功 ...

  3. Java 持久化之 -- IO 全面整理(看了绝不后悔)

    目录: 一.java io 概述 什么是IO? IO包括输入流和输出流,输入流指的是将数据以字符或者字节形式读取到内存 分为字符输入流和字符输入流 输入流指的是从内存读取到外界 ,分为字符输入流和字节 ...

  4. Java中实现多线程的两种方式之间的区别

    Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象.每个Thread对象描述了一个单独的线程.要产生一个线 ...

  5. 【HDU 5382】 GCD?LCM! (数论、积性函数)

    GCD?LCM! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

  6. android 横竖屏 切换

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 横竖屏切换 会重新凋用 activity的 生命周期,再次oncreat() 如果清单文 ...

  7. Nginx报Primary script unknown的错误解决

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 改成红色部分变量 root   /usr/local/nginx/h ...

  8. MongoDB数组修改器更新数据(转)

    MongoDB数组修改器更新数据    这里,我们将了解一下数组修改器.数组,是我们经常看到和使用到的且非常有用的数据结构:它不仅可以通过索进行引用,还可以作为集合来使用.数组修改器,顾名思义,它是用 ...

  9. Visual studio 2010出现“error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏”解决方式

    本来自己的电脑上装了VS2010,因为开发Cocos2d-x 3.x,所以就在自己的机器上装了一个VS2012. 但是.这不装不要紧,debug一下自己原来的程序,结果出现了"error L ...

  10. USBDM RS08/HCS08/HCS12/Coldfire V1,2,3,4/DSC/Kinetis Debugger and Programmer -- Driver Install

    Installation of USBDM USB drivers for Windows There are four installers provided: USBDM_Drivers_x_x_ ...