USE master;
GO
ALTER DATABASE DXS
SET RECOVERY FULL;
GO
将数据库的恢复模式从 SIMPLE 更改为 FULL 之后,创建一个完整备份,以用于创建镜像数据库。 由于恢复模式已更改,因此指定了 WITH FORMAT 选项来创建新的介质集。 这对区分完整恢复模式下的备份与以前在简单恢复模式下创建的备份非常有用。 为了实现此示例的目的,在数据库所在的同一驱动器上创建备份文件 (C:\DXS.bak)。
在主体服务器实例 ( PARTNERHOST1) 上,创建主体数据库的完整备份,如下所示:
BACKUP DATABASE DXS
TO DISK = 'C:\DXS.bak'
WITH FORMAT
GO
使用 RESTORE WITH NORECOVERY,将完整备份还原到镜像服务器实例。 还原命令取决于主体数据库与镜像数据库的路径是否相同。
如果路径相同:
在 PARTNERHOST5的镜像服务器实例上,还原完整备份,如下所示:
RESTORE DATABASE DXS
FROM DISK = 'C:\DXS.bak'
WITH NORECOVERY
GO
如果路径不同:
如果镜像数据库的路径与主体数据库的路径不同(例如,它们所在的驱动器号不同),则创建镜像数据库要求还原操作包含 MOVE 子句。
重要
如果主体数据库与镜像数据库的路径名称不同,则无法添加文件。 原因是在接收添加文件操作所需的日志时,镜像服务器实例尝试将新文件放置在主体数据库所在的位置。
例如,以下命令将位于 C:\Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\Data\ 中的主体数据库备份还原到镜像数据库所在的另一个位置 D:\Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\Data\。
RESTORE DATABASE DXS
FROM DISK='C:\DXS.bak'
WITH NORECOVERY,
MOVE 'DXS_Data' TO
'D:\Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\Data\DXS_Data.mdf',
MOVE 'DXS_Log' TO
'D:\Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\Data\DXS_Log.ldf';
GO
BACKUP LOG DXS
TO DISK = 'C:\DXS.bak'
GO
例如,以下 Transact-SQL 语句还原 C:\DXS.bak 中的第一个日志:
RESTORE LOG DXS
FROM DISK = 'C:\DXS.bak'
WITH FILE=1, NORECOVERY
GO
如果在开始镜像之前进行任何其他日志备份,则还必须使用 WITH NORECOVERY 按顺序将所有这些日志备份还原到镜像服务器上。
例如,以下 Transact-SQL 语句还原 C:\DXS.bak 中的其他两个日志:
复制
RESTORE LOG DXS
FROM DISK = 'C:\DXS.bak'
WITH FILE=2, NORECOVERY
GO
RESTORE LOG DXS
FROM DISK = 'C:\DXS.bak'
WITH FILE=3, NORECOVERY
GO
1、为出站连接配置 DSX(生产库)
在 master 数据库中,创建数据库主密钥(如果需要)。
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '123456';
GO
为此服务器实例制作一个证书。
USE master;
CREATE CERTIFICATE HOST_A_cert
WITH SUBJECT = 'HOST_A certificate';
GO
使用该证书为服务器实例创建一个镜像端点。
CREATE ENDPOINT Endpoint_Mirroring
STATE = STARTED
AS TCP (
LISTENER_PORT=7024
, LISTENER_IP = ALL
)
FOR DATABASE_MIRRORING (
AUTHENTICATION = CERTIFICATE HOST_A_cert
, ENCRYPTION = REQUIRED ALGORITHM AES
, ROLE = ALL
);
GO
备份 DSX(生产库) 证书,并将其复制到其他系统,即 HOST_B。
BACKUP CERTIFICATE HOST_A_cert TO FILE = 'C:\HOST_A_cert.cer';
GO
使用任一安全的复制方法,将 C:\HOST_A_cert.cer 复制到 HOST_B。
2、为出站连接配置 DXS(数据库故障转移集群)
在 master 数据库中,创建数据库主密钥(如果需要)。
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '';
GO
为 DXS(数据库故障转移集群)服务器实例制作一个证书。
CREATE CERTIFICATE HOST_B_cert
WITH SUBJECT = 'HOST_B certificate for database mirroring';
GO
在 DXS(数据库故障转移集群)中为服务器实例创建一个镜像端点。
CREATE ENDPOINT Endpoint_Mirroring
STATE = STARTED
AS TCP (
LISTENER_PORT=7024
, LISTENER_IP = ALL
)
FOR DATABASE_MIRRORING (
AUTHENTICATION = CERTIFICATE HOST_B_cert
, ENCRYPTION = REQUIRED ALGORITHM AES
, ROLE = ALL
);
GO
备份DXS(数据库故障转移集群)证书。
BACKUP CERTIFICATE HOST_B_cert TO FILE = 'C:\HOST_B_cert.cer';
GO
使用任一安全的复制方法,将 C:\HOST_B_cert.cer 复制到 HOST_A。
3、配置入站连接
3.1、为入站连接配置 DSX(生产库)
在 DSX(生产库) 上为 DXS(数据库故障转移集群) 创建一个登录名。
USE master;
CREATE LOGIN HOST_B_login WITH PASSWORD = '1qaz@WSX';
GO
创建一个使用该登录名的用户。
CREATE USER HOST_B_user FOR LOGIN HOST_B_login;
GO
使证书与该用户关联。
CREATE CERTIFICATE HOST_B_cert
AUTHORIZATION HOST_B_user
FROM FILE = 'C:\HOST_B_cert.cer'
GO
授予对远程镜像端点的登录名的 CONNECT 权限。
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login];
GO
3.2、为入站连接配置 DXS(数据库故障转移集群)
在 DXS(数据库故障转移集群) 上为 DSX(生产库) 创建一个登录名。
USE master;
CREATE LOGIN HOST_A_login WITH PASSWORD = '=Sample#2_Strong_Password2';
GO
创建一个使用该登录名的用户。
CREATE USER HOST_A_user FOR LOGIN HOST_A_login;
GO
使证书与该用户关联。
CREATE CERTIFICATE HOST_A_cert
AUTHORIZATION HOST_A_user
FROM FILE = 'C:\HOST_A_cert.cer'
GO
授予对远程镜像端点的登录名的 CONNECT 权限。
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login];
GO
在 DXS(数据库故障转移集群) 的镜像服务器实例上,将 DSX(生产库) 上的服务器实例设置为伙伴(使其成为初始主体服务器实例)。
将 TCP://
--At HOST_B, set server instance on HOST_A as partner (principal server):
ALTER DATABASE AdventureWorks
SET PARTNER = 'TCP://HOST_A.Mydomain.Corp.Adventure-Works.com:7024';
GO
在 DSX(生产库) 的主体服务器实例上,将 DXS(数据库故障转移集群) 上的服务器实例设置为伙伴(使其成为初始镜像服务器实例)。
将 TCP://HOST_B.Mydomain.Corp.Adventure-Works.com:7024替换为有效的网络地址。
--At HOST_A, set server instance on HOST_B as partner (mirror server).
ALTER DATABASE AdventureWorks
SET PARTNER = 'TCP://HOST_B.Mydomain.Corp.Adventure-Works.com:7024';
GO