SQLServer 镜像功能完全实现

在域环境下我没配置成果,也许是域用户的原因,因为我在生产环境下搞的,更改域用户需要重启SQLServer ,所以这个方法放弃了,只能用证书形式。

环境:

主机:192.168.10.2 (代号A)

镜像:192.168.10.1 (代号B,为了一会说明方便)

(条件有限我没有搞见证服务器。)两台服务器上的都是SQLServer2005

首先配置主机

主机上执行以下SQL

代码如下:

--创建主机数据库主密钥
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';
GO
--在10.2上为数据库实例创建证书
CREATE CERTIFICATE As_A_cert
WITH SUBJECT = 'As_A_cert',
START_DATE = '09/02/2011',
EXPIRY_DATE = '01/01/2099';
GO
--在10.2上使用上面创建的证书为数据库实例创建镜像端点
CREATE ENDPOINT Endpoint_As
STATE = STARTED
AS TCP (
LISTENER_PORT=5022,
LISTENER_IP = ALL
)
FOR DATABASE_MIRRORING (
AUTHENTICATION = CERTIFICATE As_A_cert,
ENCRYPTION = REQUIRED ALGORITHM RC4,
ROLE = ALL
);
GO

注:这里要注意设置数据库的镜像端口。5022.

--备份10.2上的证书并拷贝到10.1上
BACKUP CERTIFICATE As_A_cert TO FILE = 'D:\As_A_cert.cer';
GO
注:备份证书A,并将证书A拷贝到镜像服务器B上。

配置镜像服务器


代码如下:

USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';
GO
--在10.1 B上为数据库实例创建证书
CREATE CERTIFICATE As_B_cert
WITH SUBJECT = 'As_B_cert',
START_DATE = '09/2/2011',
EXPIRY_DATE = '01/01/2099';
GO
--在10.1 B上使用上面创建的证书为数据库实例创建镜像端点
CREATE ENDPOINT Endpoint_As
STATE = STARTED
AS TCP (
LISTENER_PORT=5022
, LISTENER_IP = ALL
)
FOR DATABASE_MIRRORING (
AUTHENTICATION = CERTIFICATE As_B_cert
, ENCRYPTION = REQUIRED ALGORITHM AES
, ROLE = ALL
);
GO

--备份10.1 B上的证书并拷贝到10.2 A上
BACKUP CERTIFICATE As_B_cert TO FILE = 'D:\As_B_cert.cer';
GO
同样将备份的证书B 拷贝到A服务器上。

建立用于镜像登录的账户

在A上执行

--交换证书,
--同步 Login


代码如下:

CREATE LOGIN B_login WITH PASSWORD = 'password';

CREATE USER B_user FOR LOGIN B_login;

CREATE CERTIFICATE As_B_cert AUTHORIZATION B_user FROM FILE = 'D:\As_B_cert.cer';

GRANT CONNECT ON ENDPOINT::Endpoint_Bs TO [B_login];

在B上执行


代码如下:

--交换证书,
--同步 Login
CREATE LOGIN A_login WITH PASSWORD = 'password';

CREATE USER A_user FOR LOGIN A_login;

CREATE CERTIFICATE As_A_cert AUTHORIZATION A_user FROM FILE = 'D:\As_A_cert.cer';

GRANT CONNECT ON ENDPOINT::Endpoint_As TO [A_login];

记得两台服务器的端口5022是不被占用的,并且保证两个服务器可以连接

以后步骤执行没问题,镜像已经完成一半了。

接下来完整备份A服务器上的Test库


代码如下:

--主机执行完整备份
USE master;
ALTER DATABASE Test SET RECOVERY FULL;
GO
BACKUP DATABASE Test
TO DISK = 'D:\SQLServerBackups\Test.bak'
WITH FORMAT;
GO
BACKUP LOG Test TO DISK = 'D:\SQLServerBackups\Test.bak';
GO

--将备份文件拷贝到B上。
一定要执行完整备份。

在B服务器上完整欢迎数据库

这里问题多多。一个一个说。

如果我们直接执行如下SQL.

代码如下:

RESTORE DATABASE Test
FROM DISK = 'D:\Back\Test.bak'
WITH NORECOVERY
GO
RESTORE LOG Test
FROM DISK = 'D:\Back\Test_log.bak'
WITH FILE=1, NORECOVERY
GO
[code]
可能会报:

消息 3154,级别 16,状态 4,第 1 行
备份集中的数据库备份与现有的 'Test'数据库不同。
消息 3013,级别 16,状态 1,第 1 行

可能是两个数据库的备份集名称不同导致,找了半天原因未果,所以采用下面sp_addumpdevice方法来做。

用sp_addumpdevice来建立一个还原的设备。这样就保证了改备份文件是数据这个数据库的。
[code]
exec sp_addumpdevice 'disk','Test_backup',
'E:\backup\Test.bak'
exec sp_addumpdevice 'disk','Test_log_backup',
'E:\backup\Test_log.bak'
go

成功之后我们来执行完成恢复


代码如下:

RESTORE DATABASE Test
FROM Test_backup
WITH DBO_ONLY,
NORECOVERY,STATS;
go
RESTORE LOG Test
FROM Test_log_backup
WITH file=1,
NORECOVERY;
GO

这里如果之前备份过多次数据库的话,肯会产生多个备份集。所以这里的 file就不能指定为1了。

这个错误可能是:
消息 4326,级别 16,状态 1,第 1 行
此备份集中的日志终止于 LSN 36000000014300001,该 LSN 太早,无法应用到数据库
。可以还原包含 LSN 36000000018400001 的较新的日志备份。
可以通过这句话来查询该备份文件的备份集
restore headeronly from disk = 'E:\backup\Test_log.bak'
找到最后一个的序号就指定给file就可以。
还需要注意的是第一次完整恢复的时候需要指定NORECOVERY。
至此所有准备工作都已经完成我们开始执行镜像
先在镜像服务器上执行
ALTER DATABASE Test SET PARTNER = 'TCP://192.168.10.2:5022';
成功之后再在主机上执行
ALTER DATABASE Test SET PARTNER = 'TCP://192.168.10.2:5022';
这样两台服务器的镜像就同步了。

删除镜像:

ALTER DATABASE Test SET PARTNER OFF

如果主机出现问题,在主机执行


代码如下:

USE MASTER
Go
ALTER DATABASE Test SET PARTNER FAILOVER
Go

总结:

如果在建立镜像的时候中间的那个步骤出国,需要重新执行的时候一定要把该删得东西删除掉。

--查询镜像
select * from sys.endpoints
--删除端口
drop endpoint Endpoint_As
--查询证书
select * from sys.symmetric_keys
--删除证书,先删除证书再删除主键
DROP CERTIFICATE As_A_cert
--删除主键
DROP MASTER KEY
--删除镜像
alter database <dbname> set partner off
--删除登录名
drop login <login_name>
sp_addumpdevice 的语法

代码如下:

sp_addumpdevice [ @devtype = ] 'device_type'
, [ @logicalname = ] 'logical_name'
, [ @physicalname = ] 'physical_name'
]
其中参数有:
@devtype:设备类型,可以支持的值为disk和tape,其中disk为磁盘文件;tape为
windows支持的任何磁带设备。
@logicalname:备份设备的逻辑名称,设备名称。
@physicalname:备份设备的物理名称,路径

参考:
http://msdn.microsoft.com/zh-cn/library/ms187495(v=sql.90).aspx
http://msdn.microsoft.com/zh-cn/library/ms187014.aspx
http://msdn.microsoft.com/zh-cn/library/ms186289.aspx

(0)

相关推荐

  • SQL Server 2005 镜像构建手册(sql2005数据库同步镜像方案)

    一. 镜像简介 1. 简介 数据库镜像是将数据库事务处理从一个SQL Server数据库移动到不同SQL Server环境中的另一个SQL Server数据库中.镜像不能直接访问;它只用在错误恢复的情况下才可以被访问. 要进行数据库镜像所需的最小需求包括了两个不同的SQL Server运行环境.主服务器被称为"主机",第二个服务器被称作"备机".主机数据库就是你实际用着的数据库,镜像数据库就是你的数据库的备用拷贝.当事务写入你的基本服务器的时候,他们也同样被传送到并

  • SQL Server 2008 R2数据库镜像部署图文教程

    概述 "数据库镜像"是一种针对数据库高可用性的基于软件的解决方案.其维护着一个数据库的两个相同的副本,这两个副本分别放置在不同的SQL Server数据库实例中.建议使用不同位置的两台服务器来承载.在同一时刻,其中一台上的数据库用于客户端访问,充当"主体服务器"角色:而另一台则根据镜像会话的配置和状态,充当热备份服务器,即"镜像服务器角色",这两种角色不是绝对的. 优点 l 增强了数据保护功能 l 提高了数据库的可用性 l 提高了生产数据库在升级

  • SQL Server 2008 数据库镜像部署实例之三 配置见证服务器

    前面已经完成了镜像数据库的配置,并进行那个了故障转移测试.接下来将部署见证服务器,实现自动故障转移. 一.关于见证服务器 1.若要支持自动故障转移,必须在高安全性模式下配置数据库镜像会话,并且还要具有第三个服务器实例(也称为"见证服务器").见证服务器是 SQL Server 的可选实例,它能使高安全性模式会话中的镜像服务器识别出是否要启动自动故障转移.与这两个伙伴不同的是,见证服务器并不能用于数据库.见证服务器的唯一角色是支持自动故障转移. 2.为了给数据库设置见证服务器,数据库所有

  • SQL Server 2008 数据库镜像部署实例之二 配置镜像,实施手动故障转移

    上一篇文章已经为配置镜像数据库做好了准备,接下来就要进入真正的配置阶段 一.在镜像数据库服务器上设置安全性并启动数据库镜像会话 1.展开数据库,选择VirtualManagerDB,点击右键选择任务--镜像 2.点击配置安全性,点选是,包括见证服务器 3.去掉见证服务器,以后进行配置 4.设置主体服务器,填入端点名称为site1 5.添加镜像服务器,取端点名为site2 6.指定服务账户为域管理员账户(可以在域内事先配置) 7.创建成功,点击关闭 8.弹出对话框,选择不开始开始镜像 9.点选高性

  • SQL Server 2008 数据库镜像部署实例之一 数据库准备

    一.目标 利用Sql Server 2008 enterprise X64,建立异步(高性能)镜像数据库,同时建立见证服务器实现自动故障转移. 二.前提条件.限制和建议 2.1.伙伴双方(主体服务器和镜像服务器)及见证服务器必须使用相同版本的Sql Server 2.2.如使用见证服务器,择须确保其系统上安装 Sql Server 2005或更高版本 2.3.在镜像服务器上创建镜像数据库时,确保制定相同的数据库名称WITH NOREBOVORY来还原主题数据库备份.另外,还必须通过 WITH N

  • SQL Server中避免触发镜像SUSPEND的N种方法

    背景: 我们在使用数据库的过程中,很多时候要追求性能,特别在处理大批量数据的时候更希望快速处理.那么对SQL SERVER而言,数据库实现大批量插入的优化方案,这里特别介绍通过大容量插入的一种方式. 基本原理: 简单恢复模式按最小方式记录大多数大容量操作,对于完整恢复模式下的数据库,大容量导入期间执行的所有行插入操作被完整地记录到事务日志中.如果数据导入量较大,会导致迅速填满事务日志.对于大容量导入操作,按最小方式记录比完整记录更有效,并减少了大容量导入操作填满日志空间的可能性,所以性能会得到极

  • SQLServer 镜像功能完全实现

    在域环境下我没配置成果,也许是域用户的原因,因为我在生产环境下搞的,更改域用户需要重启SQLServer ,所以这个方法放弃了,只能用证书形式. 环境: 主机:192.168.10.2 (代号A) 镜像:192.168.10.1 (代号B,为了一会说明方便) (条件有限我没有搞见证服务器.)两台服务器上的都是SQLServer2005 首先配置主机 主机上执行以下SQL 复制代码 代码如下: --创建主机数据库主密钥 USE master; CREATE MASTER KEY ENCRYPTIO

  • SQLSERVER启动不起来(错误9003)的解决方法分享

    先说一下环境 客户环境:Windows2003企业版SP2 32位 SQL2005企业版 32位 SP4自己笔记本电脑环境:Windows7 SP1  32位  SQL2005个人开发者版 32位我的笔记本电脑的计算机名:joe客户电脑的计算机名:hs 客户那边的master数据库大小:几MB业务系统是winform系统客户的环境是单机系统没有使用到域网络环境:客户那边的网速比较慢,用远程协助的时候比较卡为什麽要说明我自己笔记本电脑的环境呢?请大家继续耐心看下去 检查 先打开SQLSERVER配

  • 系统盘精简 系统镜像制作的经验

    一.系统盘的精简 平时我们安装的系统中有很多的组件和服务是不需要的,平时根本就用不到,所以我们可以对XP(2000)的安装盘进行精简,去掉哪些对我们没有用的内容.这里我推荐使用"nlite",这个软件可以对各种2000.XP进行定制安装,最新版本是1.0 b6.安装前需要安装MicroSoft的.NET Framework,软件安装后可以选择简体中文,它提供的功能比较多,有"Service Pack整合"."修补程序包整合"."驱动整合

  • 浅谈宽带路由器功能的重要性

    都说宽带路由器内核够不够强很重要,这点很正确,但是不是路由器CPU够强就可以了吗?显然不是!路由器功能是否完整,能否满足特定应用的需求同样重要,而这一点,往往容易被人忽视,尤其是初建网络的中小企业和网吧业主. 就拿修建楼房来说,要产出优秀的住房,好的钢筋水泥,好的建筑材料当然很重要,但更需要出众的建设品质以及合理的结构设计.建筑材料好比前面提到的处理器.内存等路由器硬件,建设品质在宽带路由器上由工程师的设计能力体现,而结构设计好比路由器的软件功能.用劣质的建材修房一定产出豆腐渣,用好的建材也不见

  • Win XP系统镜像制作技巧大放送

    一.系统盘的精简 平时我们安装的系统中有很多的组件和服务是不需要的,平时根本就用不到,所以我们可以对XP(2000)的安装盘进行精简,去掉哪些对我们没有用的内容.这里我推荐使用"nlite",这个软件可以对各种2000.XP进行定制安装,最新版本是1.0 b6.安装前需要安装MicroSoft的.NET Framework,软件安装后可以选择简体中文,它提供的功能比较多,有"Service Pack整合"."修补程序包整合"."驱动整合

  • linux确认已经卸载数据盘并可以新建自定义镜像

    自定义镜像 FAQ 如何查看数据盘? 您可以通过 df 命令查看数据盘的使用情况,以及文件系统被挂载的位置.例如:df –lh 您可以通过 fdisk 命令获取数据盘的分区情况.例如:fdisk -l 如何卸载和删除 disk table 里的数据? 假设 /dev/hda5 已经挂载在 /mnt/hda5 上,您可以使用下列任一命令卸载已挂载的文件系统: umount /dev/hda5 umount /mnt/hda5 umount /dev/hda5 /mnt/hda5 /etc/fsta

  • Docker部署Mysql,.Net6,Sqlserver等容器

    Centos8安装Docker 1.更新一下yum [root@VM-24-9-centos ~]# yum -y update 2.安装containerd.io # centos8默认使用podman代替docker,所以需要containerd.io [root@VM-24-9-centos ~]# yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2

  • Windows2012配置SQLServer2014AlwaysOn的图解

    SQLserver 2014 AlwaysOn增强了原有的数据库镜像功能,使得先前的单一数据库故障转移变成以组(多个数据)为单位的故障转移.同时可以支持多达9个复制伙伴,可读性辅助副本服务器等多个特性.对于以组为单位的数据库,主要是解决应用对于多个数据库之间存在的依赖性,从而进行整体转移.其次,可以将那些报表或者只读需求转移到只读辅助副本,从而大大减少主副本的负载,使得主副本更加容易扩展,更好地支持生产负载,以及对请求提供更快的响应. 本文描述了基于虚拟环境Windows 2012 + SQLs

  • Discuz!NT数据库读写分离方案详解

    目前在Discuz!NT这个产品中,数据库作为数据持久化工具,必定在并发访问频繁且负载压力较大的情况下成 为系统性能的'瓶颈'.即使使用本地缓存等方式来解决频繁访问数据库的问题,但仍旧会有大量的并发请求要访问动态数据,虽然 SQL2005及2008以上版本中性能不断提升,查询计划和存储过程运行得越来越高效,但最终还是 要面临'瓶颈'这一问 题.当然这也是许多大型网站不断研究探索各式各样的方案来有效降低数据访问负荷的原 因, 其中的'读写分离'方案就是一种被广泛采用的方案.      Discuz

  • oracle常见故障类别及规划解析

    前言: 上一篇文章中我们了解了oracle分区索引的失效和重建代码示例的相关内容,接下来我们要看的内容是: 对任何数据库系统而言,对显而易见的故障,应当避免发生本文列出了Oracle常见的故障并给出了解决方案,同时列出了一些日常规划. 一.数据库高可用性的几个目标 MTBF(Mean-Time-Between-Failures) 平均失败时间,即数据库出现失败的频繁度,应尽可能增大该值            应对措施 RAC集群技术:位于多台计算机上的多个实例打开一个物理数据库,降低因一个或多实

随机推荐