SQL SERVER2008 镜像全攻略
--在非域控环境中创建数据库镜像, 我们必须使用证书来创建数据库镜像。 大致的步骤包括:
--在为数据库镜像配置的每个服务器实例上执行下列步骤:
--在 master 数据库中,创建数据库主密钥。
--在 master 数据库中,为服务器实例创建加密证书。
--使用服务器实例的证书为该服务器实例创建端点。
--将证书备份到文件,并将其安全地复制到其他系统。
--然后,对为数据库镜像配置的每个伙伴执行这些步骤。在 master 数据库中:
--为其他系统创建登录名。
--创建一个使用该登录名的用户。
--获取其他服务器实例的镜像端点的证书。
--将该证书与在步骤 2 中创建的用户相关联。
--授予对该镜像端点的登录名的 CONNECT 权限。
/*查询所有当前数据库名
select SERVERPROPERTY(N'servername')
SELECT
dtb.name AS [Name]
FROM
master.sys.databases AS dtb
ORDER BY
[Name] ASC
*/
-------------------------------------------------------前期准备
-- 查看数据库版本
SELECT @@VERSION
-----配置数据库镜像事务安全级别
ALTER DATABASE TestMirroring SET SAFETY FULL
-----更改主数据库为使用完整恢复模式(如果非完整恢复模式则 可以使用下面SQL更改为 完整恢复模式)
USE master
ALTER DATABASE TestMirroring
SET RECOVERY FULL WITH no_wait
/*跨数据库事务和分布式事务均不支持数据库镜像
*/
--主服务器 见证服务器 镜像服务器的数据库版本必须相同
--备份主数据库(完整备份)
BACKUP DATABASE [TestMirroring] TO DISK = N'C:/wenzhongfiles/TestMirror.bak' WITH NOFORMAT, NOINIT,
NAME = N'TestMirroring-完整 数据库 备份', SKIP, NOREWIND, NOUNLOAD, STATS = 10
--备份主数据库的完整日志文件
BACKUP LOG [TestMirroring] TO DISK = N'C:/wenzhongfiles/TestMirrorlog.bak' WITH NOFORMAT, NOINIT,
NAME = N'TestMirroring-事务日志 备份', SKIP, NOREWIND, NOUNLOAD, STATS = 10
--在镜像服务器上还原(还原选项 norecovery(即不对数据库执行任何操作))
RESTORE DATABASE [TestMirroring] FROM DISK = N'F:/TestMirror.bak' WITH FILE = 1, MOVE N'TestMirror'
TO N'E:/Program Files/Microsoft SQL Server/MSSQL10.MSSQLSERVER/MSSQL/DATA/TestMirroring.mdf', MOVE N'TestMirror_log'
TO N'E:/Program Files/Microsoft SQL Server/MSSQL10.MSSQLSERVER/MSSQL/DATA/TestMirroring_1.ldf', NORECOVERY, NOUNLOAD, REPLACE, STATS = 10
--将备份的完整日志文件在 镜像服务器上执行 日志文字间恢复(还原选项 norecovery(即不对数据库执行任何操作))
RESTORE LOG [TestMirroring] FROM DISK = N'F:/TestMirrorlog.bak' WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 10
--------------正式开始(代码仅仅是举例主服务器上的)
--------------------------------------------------------------------------在 主、镜像、见证服务器上 分别执行:
------创建数据库对称密钥
USE master;
--DROP MASTER KEY
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'wenzhong';
GO
------创建数据库证书(注意:证书失效日期)
--DROP CERTIFICATE host_A_cert
CREATE CERTIFICATE host_A_cert
WITH SUBJECT = 'host_A certificate',START_DATE = '01/01/2011',EXPIRY_DATE = '12/31/2099';
GO
------利用创建的证书为服务器实例创建镜像端点
--DROP ENDPOINT Endpoint_Mirroring
CREATE ENDPOINT Endpoint_Mirroring
STATE = STARTED
AS TCP (
LISTENER_PORT=5022
, LISTENER_IP = ALL
)
FOR DATABASE_MIRRORING (
AUTHENTICATION = CERTIFICATE host_A_cert
, ENCRYPTION = REQUIRED ALGORITHM AES
, ROLE = PARTNER
)
GO
------将证书分别备份出来,然后互换(即:主服务器上保证存在 镜像和见证服务器上创建的证书;镜像服务器上 存在 主服务器和见证服务器上创建的证书;
-- 见证服务器上存在 主服务器和镜像服务器上创建的证书)
BACKUP CERTIFICATE host_A_cert TO FILE = 'F:\Host_A_cert.cer'
------在各自的服务器上为其他两个服务器分别创建一个登陆名
USE master;
--DROP LOGIN host_B_login
CREATE LOGIN host_B_login WITH PASSWORD = 'wenzhong'
GO
USE master;
--DROP LOGIN host_C_login
CREATE LOGIN host_C_login WITH PASSWORD = 'wenzhong'
GO
------创建一个使用上面创建的登录名的用户
--DROP USER host_B_user
CREATE USER host_B_user FOR LOGIN host_B_login;
GO --DROP USER host_C_user
CREATE USER host_C_user FOR LOGIN host_C_login;
GO
------使得证书和用户进行关联
--DROP CERTIFICATE host_B_cert
CREATE CERTIFICATE host_B_cert
AUTHORIZATION host_B_user
FROM FILE = 'F:/host_B.cer'
GO
--DROP CERTIFICATE host_C_cert
CREATE CERTIFICATE host_C_cert
AUTHORIZATION host_C_user
FROM FILE = 'F:/host_C.cer'
GO
------将对远程镜像端点的连接(CONNECT)权限授予该登录名
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [host_B_login]
GO
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [host_C_login]
GO
-----------------避免“孤立用户”。镜像服务器的缺点就是不能自动维护登录名,需要手动维护。
-------在主服务器中查找相应的用户名和对应的SID号
USE master
select sid,name from syslogins
-------在镜像服务器上(备机上)将对应的用户名和SID创建起来
USE master
exec sp_addlogin
@loginame = '<LoginName>',
@passwd = '<Password>',
@sid = <sid>
-------可以在此时进行备份主数据库和日志并进行还原操作,也可以在正式开始前执行备份和还原操作(sql见前面)
-----------------------------------------------------------------------------最后
--------在镜像服务器上将主数据库设置为其伙伴(必须首先执行,顺序不能颠倒)
ALTER DATABASE TestMirroring
SET PARTNER = 'TCP://192.168.0.211:5022'
GO
--------在主数据库服务器上将镜像服务器设置为其伙伴
ALTER DATABASE TestMirroring
SET PARTNER = 'TCP://192.168.0.111:5022'
GO
--------在主数据库服务器上设置见证服务器。
ALTER DATABASE TestMirroring
SET WITNESS = 'TCP://192.168.0.192:5022'
GO
-----------------------------------------------------------------------------对设置是否成功进行测试
--------由于镜像 的缺点:在镜像服务器上无法查询数据。需要测试是否可以成功。(数据库复制功能则可以)
--------通过在镜像数据库上创建数据库快照可以间接读取某一个时刻点的镜像数据库
--------测试过程:
--------主机上执行:
USE master;
ALTER DATABASE TestMirroring SET SAFETY FULL;-----切换到高安全模式否则执行手动切换会失败
GO
ALTER DATABASE TestMirroring SET PARTNER FAILOVER ---手动进行主备切换
------镜像服务器上执行:
USE master;
ALTER DATABASE TestMirroring SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS ---在镜像机上执行强制切换(当主服务器数据宕机时)
-------如果原来的主服务器恢复,可以继续工作,需要重新设定镜像
----备机(镜像服务器)上执行:
--恢复镜像
USE master;
ALTER DATABASE TestMirroring SET PARTNER RESUME
--切换主备
ALTER DATABASE TestMirroring SET PARTNER FAILOVER
------------------------删除数据库镜像
ALTER DATABASE TestMirroring SET PARTNER OFF
-----------暂停数据库镜像会话
ALTER DATABASE TestMirroring SET PARTNER SUSPEND
-----恢复数据库镜像会话
ALTER DATABASE TestMirroring SET PARTNER RESUME
ALTER DATABASE TestMirroring SET PARTNER SUSPEND
-----关闭见证服务器
ALTER DATABASE TestMirroring SET WITNESS OFF
/*
默认情况下,事务安全级别的设置为 FULL,即同步运行模式,而且SQL Server 2005 标准版只支持同步模式。
关闭事务安全可将会话切换到异步运行模式,该模式可使性能达到最佳。
*/
--事务安全,同步模式
USE master;
ALTER DATABASE TestMirroring SET PARTNER SAFETY FULL
--事务不安全,异步模式
ALTER DATABASE TestMirroring SET PARTNER SAFETY OFF;
--------在高性能模式下,见证服务器对可用性会有不利影响。如果见证服务器是针对数据库镜像会话而配置,则主体服务器必须至少连接到一个其他服务器实例,
-- 即镜像服务器或见证服务器,或者是连接到这两个服务器。否则,将无法使用数据库,并且不能进行强制服务(可能丢失数据)。
-- 因此,对于高性能模式,建议始终将见证服务器设置为 OFF。
-- 见证服务器的唯一角色是支持自动故障转移。并不能用于数据库,是 SQL Server 的可选实例。
-- 它能使高安全性模式会话中的镜像服务器识别出是否要启动自动故障转移(见证服务器的角色就是启动自动故障转移)。
ALTER DATABASE TestMirroring SET PARTNER OFF
/*
自动故障转移所需条件
A、数据库镜像会话必须在高安全性模式下运行,并且必须处理见证服务器。
B、镜像数据库必须已经同步。这将保证发送到镜像服务器的所有日志都已写入磁盘。
C、主体服务器已中断了与其余数据库镜像配置的通信,而镜像服务器和见证服务器将保留仲裁。但是,如果所有服务器实例都已中断通信,
而见证服务器和镜像服务器稍后重新建立通信,则不会发生自动故障转移。
D、镜像服务器已检测到丢失了主体服务器
E、镜像服务器检测主体服务器故障的方式取决于故障是硬故障还是软故障。
自动故障转移原理
A、如果主体服务器仍在运行中,则将主体数据库的状态更改为 DISCONNECTED 并断开所有客户端与主体数据库的连接。
B、见证服务器和镜像服务器将主体服务器注册为不可用。
C、如果重做队列中有任何等待的日志,则镜像服务器将完成前滚镜像数据库的操作
D、前一个镜像数据库作为新的联机主体数据库,恢复通过尽快回滚未提交的事务将这些事务全部清除。锁将隔离这些事务。
E、当前一个主体服务器重新联接到会话时,它将认定其故障转移伙伴现在拥有主体角色。前一个主体服务器接管镜像角色,并将其数据库作为镜像数据库。
新的镜像服务器会尽快将新的镜像数据库与主体数据库同步。新的镜像服务器重新同步数据库后,就可以再次执行故障转移,但按反向执行。。
*/
--------------------外延
-----使用ADO.NET或者SQL Native Client能够自动连接到故障转移后的伙伴,连接字符串如下所示:
ConnectionString="DataSource= A;Failover Partner=B;Initial Catalog=AdventureWorks;Integrated Security=true;
--如果没有镜像服务器的建设,或环境无法实现镜像服务器的建设。通过下面的代码一样可以实现类似镜像的功能
-----C# code
Imports System.Data.SqlClient
Imports System.Data
Public Class dbConn
Private primaryServerLocation As String="SERVER=primaryAddress;DATABASE=yourDB;User id=youruserID;Password=yourPassword;"
Private secondaryServerLocationAsString="SERVER=secondaryAddress;DATABASE=yourDB;User id=youruserID;Password=yourPassword;"
Public sqlConnection AsSqlConnection
Public cmd AsSqlCommand
Public Sub primaryConnection()
Try
sqlConnection = New System.Data.SqlClient.SqlConnection(primaryServerLocation)
cmd = NewSystem.Data.SqlClient.SqlCommand()
'test connection
sqlConnection.Open()
sqlConnection.Close()
Catch ex As Exception
secondaryConnection()
End Try
End Sub
Public Sub secondaryConnection()
'Used as the failover secondary serverif primaryis down.
Try
sqlConnection = New System.Data.SqlClient.SqlConnection(secondaryServerLocation)
cmd = NewSystem.Data.SqlClient.SqlCommand()
'test connection
sqlConnection.Open()
sqlConnection.Close()
Catch ex As Exception
End Try
End Sub
-----C# code
--=================查看数据库镜像的配置状态=================
-- 1.通过Management studio 对象资源管理器,查看主体数据库、镜像数据库状态
-- 2.通过Management studio 对象资源管理器中的数据库属性查看状态
-- 3.通过系统目录视图查看数据库镜像配置情况
use master
go
SELECT * FROM sys.database_mirroring_endpoints
SELECT * FROM sys.database_mirroring
WHERE database_id =(SELECT database_id FROM sys.databases
WHERE name = 'TestMirroring')
SELECT * FROM sys.database_mirroring_witnesses
镜像的运行模式有三种:
1、 高性能(异步):先提交主服务器上的更改,然后将其传输到镜像服务器上。
2、不带自动故障转移功能的高安全(同步): 过程始终提交主服务和镜像服务器上的更改。
3、带自动故障转移功能的高安全(同步):需要见证服务器实例。如果主服务器和镜像服务器都可用,则提交在它们上面所做的更改并镜像。如果主服务器不可用,则见证服务器就会控制自动故障转移到镜像服务器上。
SQL SERVER2008 镜像全攻略的更多相关文章
- SQL Server 备份和还原全攻略
原文:SQL Server 备份和还原全攻略 一.知识点 完全备份: 备份全部选中的文件夹,并不依赖文件的存档属性来确定备份那些文件.(在备份过程中,任何现有的标记都被清除,每个文件都被标记为已备份, ...
- Moon.Orm3.8技术全攻略
Moon.ORM技术全攻略 一.绪论 本文主要是针对Moon.ORM的技术的讨论及其使用使用指导.如有其它疑问,请留言.本文主要针对Moon.ORM3.9版本,同时将会对4.0做一个技术预览.本文从 ...
- 取代奶瓶Minidwep-gtk破解WPA 全攻略
取代奶瓶Minidwep-gtk 破 WPA 全攻略 目录 1. CDlinux 下使用 minidwepgtk 获取握手包并使用自带的字典破解 2. 自带的字典破解不出密码时使用 U 盘外挂字典继 ...
- Android-x86虚拟机安装配置全攻略
转自Android-x86虚拟机安装配置全攻略 注:这里安装从简,具体请参考虚拟机Vmware安装运行安卓4.0详细教程 Android-x86虚拟机安装配置网上有很多,但是全部说明白的确不多,希望这 ...
- 用友U8客户端连接不上服务器全攻略
用友U8客户端连接不上服务器全攻略 http://www.enet.com.cn2009年09月23日09:26 来自论坛 [导读]:如果网络不通,就让用户查找网络原因 检查步骤: 1.网络是否通? ...
- VS2013全攻略(安装,技巧,快捷键,插件)!
工欲善其事,必先利其器.VS2013全攻略(安装,技巧,快捷键,插件)! 之前一篇<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥>承蒙大家喜爱和编辑推荐,在此 ...
- EhLib DBGridEh组件在Delphi中应用全攻略总结(转)
EhLib DBGridEh组件在Delphi中应用全攻略总结(转) http://blog.sina.com.cn/s/blog_94b1b40001013xn0.html 优化SQL查询:如何写出 ...
- 开发小白也毫无压力的hexo静态博客建站全攻略 - 躺坑后亲诉心路历程
目录 基本原理 方法1 - 本机Windows下建站 (力荐) 下载安装node.js 用管理员权限打开命令行,安装hexo-cli和hexo 下载安装git 初始化hexo 使用hexo gener ...
- [C#]画图全攻略(饼图与柱状图)(转)
http://blog.chinaunix.net/uid-15481846-id-2769484.html 首先建立一个c#的类库. 打开vs.net,建立一个名为Insight_cs.WebC ...
随机推荐
- CentOS 7安装zabbix-2.4.8监控
说明: 操作系统:CentOS 7 Web环境:Nginx+MySQL+PHP zabbix版本:zabbix-2.4.8.tar.gz 备注:Linux下安装zabbix需要有LAMP或者LNMP运 ...
- 使用EntitysCodeGenerate
http://bbs.csdn.net/topics/360256700 public DataSet xxx(DateTime start, DateTime end, string type) ...
- getopt_long
http://blog.csdn.net/lanyan822/article/details/7692013 在程序中难免需要使用命令行选项,可以选择自己解析命令行选项,但是有现成的,何必再造轮子.下 ...
- 【Asp.net入门07】第一个ASP.NET 应用程序-创建数据模型和存储库
1.理解概念 先理解一下两个概念. 模型 模型是指数据的结构类型,以及可调用的方法.对面向对象编程方法来说,其实就是类.模型类就是一个描述数据的类.只有把数据按一定方式描述出来,我们才能在程序中方便地 ...
- maven添加docker插件无法引入,运行时报错 No plugin found for prefix 'docker'
maven 安装不上docker插件,运行 提示:docker:bulid时No plugin found for prefix 'docker' 原因是maven不能识别 docker-maven- ...
- webpack的基础入门
webpack的基础入门 这里对于 webpack 的基础入门进行一些总结,可以参考 github 上的 webpack-demo ,链接是 https://github.com/RealAndMe/ ...
- 数据结构编程实验——chapter10-应用经典二叉树编程
二叉树不仅结构简单.节省内存,更重要是是这种结构有利于对数据的二分处理.之前我们提过,在二叉树的基础上能够派生很多经典的数据结构,也是下面我们将进行讨论的知识点: (1) 提高数据查找效率的二叉排 ...
- Codeforces Round #476 (Div. 2) [Thanks, Telegram!] C
http://codeforces.com/contest/965/problem/C 题目大意:n个糖,k个人,每次最多只能拿M个糖,从第一个人开始拿,可以循环D次.问Arkady最多可以拿几块糖? ...
- swiper隐藏再显示出现点击不了情况
//初始化swiper var swiper = new Swiper('.swiper-container', { pagination: '.swiper-pagination', nextBut ...
- Personal idea
我的设想是在android上开发一款应用程序,整体上是一个指南针的样式,或许你可以称之为一个圆盘,在不同的场景下可以作为不同的功能,指南针,游戏转盘,数字转盘等等.界面可以在不同的情境下更换样式.