热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mssql2005数据库镜像搭建教程

数据库镜像是SQLSERVER2005用于提高数据库可用性的新技术其优势是以在不丢失已提交数据的前提下进行快速故障转移,无须专门的硬件,并且易于配置和管理,本文将如介绍,有需求的朋友可以参考下

数据库镜像是SQL SERVER 2005用于提高数据库可用性的新技术其优势是以在不丢失已提交数据的前提下进行快速故障转移,无须专门的硬件,并且易于配置和管理,本文将如介绍,有需求的朋友可以参考下

一 概述

数据库镜像是SQL SERVER 2005用于提高数据库可用性的新技术。数据库镜像将事务日志记录直接从一台服务器传输到另一台服务器,并且能够在出现故障时快速转移到备用服务器。可以编写客户端程序自动重定向连接信息,这样一旦出现故障转移就可以自动连接到备用服务器和数据库。

优势:数据库镜像可以在不丢失已提交数据的前提下进行快速故障转移,无须专门的硬件,并且易于配置和管理。

二 环境准备

操作系统:Window 2003 enterprise sp2(至少两台,如要启用自动故障转移,必需三台)

SQL版本:MSSQL SERVER 2005 SP3

检查SQL SERVER版本:

exec xp_msver

select SERVERPROPERTY('productlevel')

数据库准备:准备一个数据库:ccerp_jzt ,备份此数据库还原到另外一台机器上,另外一台必须是with no recovery

这里我假设服务器A,B,C

A为主体服务器,B为镜像服务器,C为见证服务器

A服务器

use master

go

restore filelistonly from disk=N'f:\databak\ccerp_jzt_backup_200911250100.bak'

restore database ccerp_jzt from disk=N'f:\databak\ccerp_jzt_backup_200911250100.bak' with replace,recovery,

move 'ccerp_ydswzip_Data' to 'd:\data\ccerp_jzt.mdf',

move 'ccerp_ydswzip_Log' to 'd:\data\ccerp_jzt_log.ldf'

exec sp_helpdb 'ccerp_jzt'

backup database ccerp_jzt to disk =N'f:\databak\sk.bak' with init

--更改恢复模式

alter database ccerp_jzt set recovery full

B服务器:

CREATE DATABASE ccerp_jzt

ON

( NAME = Sales_dat,

FILENAME = 'd:\data\ccerp_jzt.mdf',

SIZE = 10

)

LOG ON

( NAME = 'ccerp_jzt_log',

FILENAME = 'd:\data\ccerp_jzt_log.ldf',

SIZE = 5MB

)

GO

restore filelistonly from disk=N'f:\xxzx\data\sk.bak'

use master

go

restore database ccerp_jzt from disk=N'f:\xxzx\data\sk.bak' with replace,norecovery,

exec sp_helpdb 'ccerp_jzt'

C服务器只要装上SQL SERVER 2005就可以,无需其他准备

准备完成后如下图所示:

三 三种模式的搭建

数据库镜像要建立必需得建立信任关系,那么在WIN环境下建立信任关系可以通过三种方式:域帐户,证书信任,windows 匿名登陆,现就前两种模式做配置说明.

3.1 域帐户模式:

3.1.1 更改mssqlserver服务的的登陆方式为域帐户登陆方式:

进入windows服务管理控制台,更改服务登陆帐户,使域账户有更改MSSQL SERVER服务状态的权限.三台机器都做同样设置

将域帐户赋予sysadmin角色

3.1.2 建立端点:

通过图形界面建立端点:

启动SQLWB,按图一直下一步


用域帐户登陆

如果成功则:

3.2 证书模式

3.2.1建立证书&端点

参与数据库镜像会话的服务器必须彼此信任。对于本地通信而言,例如一个域内的通信,信任意味着SQL Server实例登陆账号必须有权限连接到其他镜像服务器,也包括endpoints。首先在每个服务器上使用CREATE LOGIN命令,然后使用GRANT CONNECT ON ENDPOINT命令.非信任域之间的通信必须使用证书。如果使用CREATE CERTIFICATE语句创建自签名的证书,基本上所有数据镜像证书的要求都可以满足。确认在CREATE CERTIFICATE语句中将证书标记为ACTIVE FOR BEGIN_DIALOG。

一 建立证书:

镜像服务器上执行:

USE master;

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'TEST';

CREATE CERTIFICATE HOST_A_cert WITH SUBJECT='HOST_A certificate', START_DATE='2010-03-10';

主体服务器上执行:

USE master;

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'TEST';

CREATE CERTIFICATE HOST_B_cert WITH SUBJECT='HOST_B certificate', START_DATE='2010-03-10';

见证服务器上执行:

USE master;

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'TEST';

CREATE CERTIFICATE HOST_C_cert WITH SUBJECT='HOST_C certificate', START_DATE='2010-03-10';

二 建立端点:

镜像服务器上执行:

--create mirror endpoint on primary A

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 = ALL );

主体服务器上执行:

--Create endpoint on mirror server B

CREATE ENDPOINT Endpoint_Mirroring

STATE = STARTED

AS

TCP ( LISTENER_PORT=5022 , LISTENER_IP = ALL )

FOR

DATABASE_MIRRORING

( AUTHENTICATION = CERTIFICATE HOST_B_cert , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL );

见证服务器上执行:

--Create endpoint on witness server C

CREATE ENDPOINT Endpoint_Mirroring

STATE = STARTED

AS

TCP ( LISTENER_PORT=5022 , LISTENER_IP = ALL )

FOR

DATABASE_MIRRORING

( AUTHENTICATION = CERTIFICATE HOST_C_cert ,

ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = witness );

SELECT * FROM sys.database_mirroring_endpoints;

证书互备:

镜像服务器上执行:

--backup certificate

BACKUP CERTIFICATE HOST_A_cert TO FILE = 'e:\HOST_A_cert.cer'

主体服务器上执行

--backup certificate

BACKUP CERTIFICATE HOST_B_cert TO FILE = 'e:\HOST_B_cert.cer'

见证服务器上执行:

BACKUP CERTIFICATE HOST_c_cert TO FILE = 'e:\HOST_C_cert.cer'

将备份到的证书进行互换,即HOST_A_cert.cer复制到B机的e:\ 将HOST_B_cert.cer复制到A机的E:\,也就是每台服务器有三个证书

三:建立登陆用户:

镜像服务器上执行:

--Create user

CREATE LOGIN HOST_B_login WITH PASSWORD = 'test';

CREATE USER HOST_B_user FOR LOGIN HOST_B_login;

CREATE CERTIFICATE HOST_B_cert AUTHORIZATION HOST_B_user FROM FILE = 'e:\HOST_B_cert.cer';

GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login];

CREATE LOGIN HOST_C_login WITH PASSWORD = 'test';

CREATE USER HOST_C_user FOR LOGIN HOST_c_login;

CREATE CERTIFICATE HOST_c_cert AUTHORIZATION HOST_c_user FROM FILE = 'e:\HOST_c_cert.cer';

GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_c_login];

GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login];

--query user sid

select loginname,name,sid From syslogins

主体服务器上执行:

--Create user

CREATE LOGIN HOST_A_login WITH PASSWORD = 'test';

CREATE USER HOST_A_user FOR LOGIN HOST_A_login;

CREATE CERTIFICATE HOST_A_cert AUTHORIZATION HOST_A_user FROM FILE = 'e:\HOST_A_cert.cer';

GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login];

-- add witness user

CREATE LOGIN HOST_C_login WITH PASSWORD = 'test';

CREATE USER HOST_C_user FOR LOGIN HOST_c_login;

CREATE CERTIFICATE HOST_c_cert AUTHORIZATION HOST_c_user FROM FILE = 'e:\HOST_c_cert.cer';

GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_c_login];

GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login];

--query sid

select loginname,name,sid From syslogins

见证服务器上执行:

--Create user

CREATE LOGIN HOST_A_login WITH PASSWORD = 'test';

CREATE USER HOST_A_user FOR LOGIN HOST_A_login;

CREATE CERTIFICATE HOST_A_cert AUTHORIZATION HOST_A_user FROM FILE = 'e:\HOST_A_cert.cer';

GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login];

--add user host_b_login to have pemission to access witness

CREATE LOGIN HOST_B_login WITH PASSWORD = 'test';

CREATE USER HOST_B_user FOR LOGIN HOST_B_login;

CREATE CERTIFICATE HOST_B_cert AUTHORIZATION HOST_B_user FROM FILE = 'e:\HOST_B_cert.cer';

GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login];

grant connect on endpoint::endpoint_mirroring to HOST_C_login

USE master;

exec sp_addlogin

@loginame = 'HOST_B_login',

@passwd = 'test',

@sid = 0x1A914CA3D1D00C4793EBC96E4C4F4352 ;

ALTER DATABASE ccerp_jzt SET PARTNER = 'TCP://192.168.137.32:5022';

四.建立镜像:

先在镜像服务器上执行:

ALTER DATABASE ccerp_jzt SET PARTNER = 'TCP://192.168.137.44:5022';

接着主体服务器执行:

ALTER DATABASE ccerp_jzt SET PARTNER = 'TCP://192.168.137.32:5022';

ALTER DATABASE ccerp_jzt SET witness = 'TCP://192.168.137.49:5022';

至此引证书建立完毕

、主备互换

--主机执行:

1USE master;
2ALTER DATABASE SET PARTNER FAILOVER;

、主服务器Down掉,备机紧急启动并且开始服务

--备机执行:

1USE master;
2ALTER DATABASE SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS;

、原来的主服务器恢复,可以继续工作,需要重新设定镜像

1--备机执行:
2USE master;
3ALTER DATABASE SET PARTNER RESUME; --恢复镜像
4ALTER DATABASE SET PARTNER FAILOVER; --切换主备

、原来的主服务器恢复,可以继续工作

--默认情况下,事务安全级别的设置为 FULL,即同步运行模式,而且SQL Server 2005 标准版只支持同步模式。

--关闭事务安全可将会话切换到异步运行模式,该模式可使性能达到最佳。

1USE master;
2ALTER DATABASE SET PARTNER SAFETY FULL; --事务安全,同步模式
3ALTER DATABASE SET PARTNER SAFETY OFF; --事务不安全,异步模式

错误说明:
消息1498,级别16,状态3,第1 行

默认情况下,数据库镜像是被禁用的。当前提供的数据库镜像仅供评估使用,并不应使用于生产环境中。若要以评估为目的启用数据库镜像,请在启动过程中使用跟踪标志1400。有关跟踪标志和启动选项的详细信息,请参阅SQL Server 联机丛书。

解决办法:没打SP1以上补丁.强烈建议打SP3

消息1475,级别16,状态2,第1 行

由于"ccerp_jzt" 数据库可能有尚未备份的大容量日志记录更改,所以无法启用数据库镜像。必须在镜像上还原主体数据库的上一次日志备份。

主体上:backup log ccerp_jzt to disk ='e:\log.trn' with no_truncate

镜像上:restore log ccerp_jzt from disk='e:\log.trn' with norecovery

推荐阅读
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
author-avatar
蔡心怡湖人永蓉
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有