SQLServer 数据库镜像(二)域环境中完整镜像脚本配置

SQLServer 数据库镜像(一)单服务器无见证的镜像脚本配置

断断续续弄了几天,搭建了域,服务器加入域后再测试另一种情况。

测试环境:

主服务器:  

IP = 192.168.2.10

InstanceName = MSSQLSERVER

LISTENER_PORT = 5022

镜像服务器:   

IP = 192.168.2.10

InstanceName = MSSQLSERVERA

LISTENER_PORT = 5023

见证服务器:

IP = 192.168.2.11

InstanceName = MSSQLSERVER

LISTENER_PORT = 5022

【1. 数据库备份还原】

--	主体:设置数据库“恢复模式”为“完整”模式
USE master;
ALTER DATABASE [DBName] SET RECOVERY FULL
GO

--	主体:备份数据库
USE master;
BACKUP DATABASE [DBName]
TO DISK = 'C:\Databases\MSSQLSERVER\DBName.BAK' WITH INIT,FORMAT
GO  

--	镜像:还原数据库(NORECOVERY)
USE master;
RESTORE DATABASE [DBName]
FROM  DISK = N'C:\Databases\MSSQLSERVER\DBName.BAK'
WITH  FILE = 1,
MOVE N'DBName' TO N'C:\Databases\MSSQLSERVERA\DBName.mdf',
MOVE N'DBName_log' TO N'C:\Databases\MSSQLSERVERA\DBName_log.ldf',
NOUNLOAD, NORECOVERY, STATS = 10
GO

【2. 创建数据库主密钥和证书,备份交换证书】

--	主体:
USE master;

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '[email protected]';

CREATE CERTIFICATE Cert_kk_db1_mssqlserver
WITH SUBJECT = 'Cert_kk_db1_mssqlserver',
START_DATE = '2015-03-20';

BACKUP CERTIFICATE Cert_kk_db1_mssqlserver
TO FILE = 'C:\Databases\CERTIFICATE\Cert_kk_db1_mssqlserver.cer';

--	镜像:
USE master;

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '[email protected]';

CREATE CERTIFICATE Cert_kk_db1_mssqlserverA
WITH SUBJECT = 'Cert_kk_db1_mssqlserverA',
START_DATE = '2015-03-20';

BACKUP CERTIFICATE Cert_kk_db1_mssqlserverA
TO FILE = 'C:\Databases\CERTIFICATE\Cert_kk_db1_mssqlserverA.cer';

--	见证:
USE master;

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '[email protected]';

CREATE CERTIFICATE Cert_kk_db2_mssqlserver
WITH SUBJECT = 'Cert_kk_db2_mssqlserver',
START_DATE = '2015-03-20';

BACKUP CERTIFICATE Cert_kk_db2_mssqlserver
TO FILE = 'C:\Databases\CERTIFICATE\Cert_kk_db2_mssqlserver.cer';

--	交换证书(相互拷贝证书):
/*
主体证书(拷贝到)————>镜像、见证
镜像证书(拷贝到)————>主体、见证
见证证书(拷贝到)————>主体、镜像
*/

【3. 创建数据库登录账户和用户并还原证书】

--	创建域用户:UserForMirror
--	SQLServer 使用 [network service] 启动实例服务

--	主体(还原 镜像和见证 的证书):
USE master
GO
CREATE LOGIN [KK\UserForMirror] FROM WINDOWS;
GO
CREATE USER UserForMirror FOR LOGIN [KK\UserForMirror];
GO
CREATE CERTIFICATE [Cert_kk_db1_mssqlserverA]
AUTHORIZATION [UserForMirror]
FROM FILE = 'C:\Databases\CERTIFICATE\Cert_kk_db1_mssqlserverA.cer';
GO
GRANT CONNECT ON ENDPOINT::Endpoint_For_Mirror TO [KK\UserForMirror];
GO
CREATE CERTIFICATE [Cert_kk_db2_mssqlserver]
AUTHORIZATION [UserForMirror]
FROM FILE = 'C:\Databases\CERTIFICATE\Cert_kk_db2_mssqlserver.cer';
GO
GRANT CONNECT ON ENDPOINT::Endpoint_For_Mirror TO [KK\UserForMirror];
GO

--	镜像(还原 主体和见证 的证书):
USE master
GO
CREATE LOGIN [KK\UserForMirror] FROM WINDOWS;
GO
CREATE USER UserForMirror FOR LOGIN [KK\UserForMirror];
GO
CREATE CERTIFICATE [Cert_kk_db1_mssqlserver]
AUTHORIZATION [UserForMirror]
FROM FILE = 'C:\Databases\CERTIFICATE\Cert_kk_db1_mssqlserver.cer';
GO
GRANT CONNECT ON ENDPOINT::Endpoint_For_Mirror TO [KK\UserForMirror];
GO
CREATE CERTIFICATE [Cert_kk_db2_mssqlserver]
AUTHORIZATION [UserForMirror]
FROM FILE = 'C:\Databases\CERTIFICATE\Cert_kk_db2_mssqlserver.cer';
GO
GRANT CONNECT ON ENDPOINT::Endpoint_For_Mirror TO [KK\UserForMirror];
GO

--	见证(还原 主体和镜像 的证书):
USE master
GO
CREATE LOGIN [KK\UserForMirror] FROM WINDOWS;
GO
CREATE USER UserForMirror FOR LOGIN [KK\UserForMirror];
GO
CREATE CERTIFICATE [Cert_kk_db1_mssqlserver]
AUTHORIZATION [UserForMirror]
FROM FILE = 'C:\Databases\CERTIFICATE\Cert_kk_db1_mssqlserver.cer';
GO
GRANT CONNECT ON ENDPOINT::Endpoint_For_Mirror TO [KK\UserForMirror];
GO
CREATE CERTIFICATE [Cert_kk_db1_mssqlserverA]
AUTHORIZATION [UserForMirror]
FROM FILE = 'C:\Databases\CERTIFICATE\Cert_kk_db1_mssqlserverA.cer';
GO
GRANT CONNECT ON ENDPOINT::Endpoint_For_Mirror TO [KK\UserForMirror];
GO

【4. 创建数据库镜像端点】

--	主体:(域账户:KK\UserForMirror,UTHENTICATION = CERTIFICATE 证书)
USE master;
CREATE ENDPOINT [Endpoint_For_Mirror]
	AUTHORIZATION [KK\UserForMirror]
	STATE=STARTED
	AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
	FOR DATA_MIRRORING
	(ROLE = PARTNER, AUTHENTICATION = CERTIFICATE Cert_kk_db1_mssqlserver, ENCRYPTION = REQUIRED ALGORITHM AES)
GO

--	镜像(主体镜像同一服务器,端口不一样:LISTENER_PORT = 5023):
USE master;
CREATE ENDPOINT [Endpoint_For_Mirror]
	AUTHORIZATION [KK\UserForMirror]
	STATE=STARTED
	AS TCP (LISTENER_PORT = 5023, LISTENER_IP = ALL)
	FOR DATA_MIRRORING
	(ROLE = PARTNER, AUTHENTICATION = CERTIFICATE Cert_kk_db1_mssqlserverA, ENCRYPTION = REQUIRED ALGORITHM AES)
GO

--	见证(ROLE = WITNESS):
USE master;
CREATE ENDPOINT [Endpoint_For_Mirror]
	AUTHORIZATION [KK\UserForMirror]
	STATE=STARTED
	AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
	FOR DATA_MIRRORING
	(ROLE = WITNESS, AUTHENTICATION = CERTIFICATE Cert_kk_db2_mssqlserver, ENCRYPTION = REQUIRED ALGORITHM AES)
GO

【5. 开始镜像】

--	注意执行顺序:镜像——>主体——>见证

--	镜像:(PARTNER为主体服务器)
USE master;
ALTER DATABASE [DBName] SET PARTNER = 'TCP://192.168.2.10:5022'
GO

--	主体:(PARTNER为镜像服务器)
USE master;
ALTER DATABASE [DBName] SET PARTNER = 'TCP://192.168.2.10:5023'
GO

--	主体:(WITNESS为见证服务器)
USE master;
ALTER DATABASE [DBName] SET WITNESS = 'TCP://192.168.2.11:5022';
GO

配置完成!界面查看如图:

【6. 创建数据库镜像监视器作业】

--在主备执行
use msdb;
exec sys.sp_dbmmonitoraddmonitoring
--exec sys.sp_dbmmonitorhelpmonitoring
--exec sys.sp_dbmmonitorresults DBName,0,0
--exec sys.sp_dbmmonitorchangemonitoring
--exec sys.sp_dbmmonitordropmonitoring  

【7. 测试】

--	主体:随意更改,等下切换后是否已同步
USE DBName;
SELECT * FROM [dbo].[MyTable]

UPDATE [dbo].[MyTable] SET NAME = 'master'
DELETE TOP(1) FROM [dbo].[MyTable]  

--	主体:手动方式进行主备切换
USE [master]
GO
ALTER DATABASE DBName SET PARTNER FAILOVER;
GO

手动停止主体的服务,可以看到,“镜像”变为了“主体”

当原来主体的服务启动后,发现它变为了“镜像”。(此时也可以把它切换回主体)

【7. 相关脚本】

select * from sys.certificates
select * from sys.endpoints
select * from sys.database_mirroring_endpoints
select * from sys.database_mirroring
select * from sys.database_mirroring_witnesses 

USE master;
ALTER DATABASE [DBName] SET SAFETY FULL;		--设置为高安全模式
ALTER DATABASE [DBName] SET PARTNER RESUME;		--恢复镜像
ALTER DATABASE [DBName] SET PARTNER FAILOVER;	--切换主备
ALTER DATABASE [DBName] SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS;	--强制恢复镜像
ALTER DATABASE [DBName] SET ONLINE;		--在线数据库

【8. 问题】

/*以上可能出现的问题:

【问题】开始镜像时出现的问题(注:上面的脚本是正确的,这里为错误案例):
ALTER DATABASE [DBName] SET PARTNER = 'TCP://192.168.1.10:5023'

提示错误如下:
消息 1418,级别 16,状态 1,第 2 行
服务器网络地址 "TCP://192.168.1.10:5023" 无法访问或不存在。
请检查网络地址名称,并检查本地和远程端点的端口是否正常运行。

【问题】发现IP弄错了,把192.168.1.10改为192.168.2.10再执行:
USE master;
ALTER DATABASE [DBName] SET PARTNER = 'TCP://192.168.2.10:5022'
GO

提示错误如下:
已为数据库镜像启用数据库 "DBName"。

【解决】停止镜像,重新连接
ALTER DATABASE [DBName] SET PARTNER OFF;
GO
ALTER DATABASE [DBName] SET PARTNER = 'TCP://192.168.2.10:5022'
GO

【问题】链接镜像时又错误:(ip 和 端口都能连接到)
ALTER DATABASE [DBName] SET WITNESS = 'TCP://192.168.2.11:5022'

提示错误如下:
消息 1456,级别 16,状态 3,第 1 行
无法将 ALTER DATABASE 命令发送到远程服务器实例 'TCP://192.168.2.11:5022'。
数据库镜像配置未更改。请确保该服务器已连接,然后重试。

【解决】AUTHENTICATION当时为Windows授权,改为证书
CREATE ENDPOINT [Endpoint_For_Mirror]
……
 AUTHENTICATION = CERTIFICATE
*/
时间: 2024-10-10 07:35:52

SQLServer 数据库镜像(二)域环境中完整镜像脚本配置的相关文章

第三篇——第二部分——第五文 配置SQL Server镜像——域环境SQL Server镜像日常维护

本文接上面两篇搭建镜像的文章: 第三篇--第二部分--第三文 配置SQL Server镜像--域环境:http://blog.csdn.net/dba_huangzj/article/details/28904503第三篇--第二部分--第四文 配置SQL Server镜像--非域环境:http://blog.csdn.net/dba_huangzj/article/details/27652857 在搭建的过程中,可能你会遇到比较多的问题,下面介绍一些常见的问题及解决方案,另外把主要精力放到对

第三篇——第二部分——第四文 配置SQL Server镜像——非域环境

原文:第三篇--第二部分--第四文 配置SQL Server镜像--非域环境 本文为非域环境搭建镜像演示,对于域环境搭建,可参照上文:http://blog.csdn.net/dba_huangzj/article/details/28904503 原文出处:http://blog.csdn.net/dba_huangzj/article/details/27652857 前面已经演示了域环境下的镜像搭建,本文将使用非域环境来搭建镜像,同样,先按照不带见证服务器的高安全模式(同步)的方式搭建,然

在权限受限制的AD域环境中部署SQL Server AlwaysOn高可用性

最近在给一个客户部署基于微软TFS的软件生命周期管理平台时,客户要求数据库层实现高可用性,减少因数据库服务器故障影响软件开发进展. 客户现有域是一台搭建在Windows Server 2008上的级别为Windows 2008的企业域.为了符合客户企业域的安全规定,需要在部署数据库高可用性期间使用最低权限,即只赋予操作账户(tfsadmin)在AD目录中用于ALM的组织单元的完全权限.在综合考虑和调用的基础上,我们提出了以下方案,并附上了操作说明. 方案: 1. 在AD域中为ALM创建用于保存计

Linux运维系列一 CentOS 7桌面系统加入到Samba4 AD域环境中

这篇文章讲述了如何使用 Authconfig-gtk 工具将 CentOS 7 桌面系统加入到 Samba4 AD 域环境中,并使用域帐号登录到 CentOS 系统. 要求 1.在 Ubuntu 系统中使用 Samba4 创建活动目录架构 2.CentOS 7.3 安装指南 第一步:在 CentOS 系统中配置 Samba4 AD DC 1.在将 CentOS 7 加入到 Samba4 域环境之前,你得先配置 CentOS 系统的网络环境,确保在 CentOS 系统中通过 DNS 可以解析到域名

在非域环境中修改域用户密码的方法

前几天有个单位,新配置了一台服务器,做文件服务器,为网络中提供共享文件夹服务,该单位大约有50多个用户.服务器采用Windows Server 2008 R2操作系统,升级到Active Directory,为单位每个职工创建了一个用户名,在服务器上除了为每个用户创建一个"共享文件夹"保存个人数据外,还创建了"公共"共享文件夹,保存单位的数据,并且在公共文件夹中创建了若干子目录,通过用户权限,设置只让指定用户上传.修改其中的文件. 在开始规划的时候,是计划让单位的所

金蝶K3,域环境中,无本地用户管理员权限的域用户如何设置注册表权限?

如果该用户是属于Power Users组:只需要给用户添加注册表中的HKEY_LOCAL_MACHINE的SOFTWARE完全控制的权限.(勾选允许父项的继承权限和传播到该对象和所有子对象) 如果该用户是属于Users组:除了需要给用户添加注册表中的HKEY_LOCAL_MACHINE的SOFTWARE完全控制的权限以外,还需要给用户添加注册表中HKEY_CLASSES_ROOTD的APPID以及KdSvrmgr.clsAct完全控制的权限. 金蝶K3,域环境中,无本地用户管理员权限的域用户如何

linux环境中执行Mysql脚本

1.首先进入shell~ 2.进入服务器后,输入mysql -h localhost -u root -p,进入MySql: 3.输入MySql密码: 4.将脚本复制到服务器,具体怎么做,可以用Xftp; 5.例如,我执行的test.sql,在/usr/local/test.sql目录下,在shell中输入source /usr/local/test.sql linux环境中执行Mysql脚本,布布扣,bubuko.com

Production环境中iptables常用参数配置

production环境中iptables常用参数配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我相信在实际生产环境中有很多运维的兄弟跟我一样,很少用到iptables的这个命令.因为大家的服务器的防火墙都是关闭的,但是如果你的 服务器是有公网IP的话就会面临各种安全的问题呢,所以我建议大家还是开启防火墙,这个命令其实挺有意思的,就是配置起来比较繁琐,但是原理还 是很容易理解的,关于其原理百度上面一大堆,我这就不再废话啦~ 在配置之前,我们需要扫盲一下知识点: 一.ip

生产环境中jenkins主机ansible配置如下

生产环境中jenkins主机ansible配置如下: [defaults] hostfile = ./hosts library = /usr/share/ansible remote_tmp = $HOME/.ansible/tmp pattern = * transport = smart remote_port = 22 log_path = /home/jenkins/ansible/ansible.log pipelining = True module_lang = C gather