我尝试使用 GUI 和 T-SQL 镜像数据库,但在这两种情况下我都遇到了问题。
以下是有关基础架构和 SSMS 的一些信息:
基础设施
- 带有 SQL Server 2017 企业版的主体服务器
- 带有 SQL Server 2017 企业版的镜像服务器
- 带有 SQL Server 2017 Express Edition 的见证服务器
- 所有服务器 SO:Windows Server 2016 Standard
- 所有禁用防火墙的服务器
- 公共域中的所有服务器
- 所有服务器具有相同的用户和权限
- Telnet 与所有服务器中的端口 5022 完美配合
- 我使用GRANT CONNECT ON ENDPOINT::Mirroring创建了用户来管理所有服务器中的服务
SQL Server Management Studio 信息 - SSMS:
Microsoft SQL Server Management Studio 14.0.17289.0
Microsoft Analysis Services Client Tools 14.0.1016.283
Microsoft Data Access Components (MDAC) 10.0.14393.0
Microsoft MSXML 3.0 6.0
Microsoft Internet Explorer 9.11.14393.0
Microsoft .NET Framework 4.0.30319.42000
Operating System 6.3.14393
我将使用 GUI 和 T-SQL 解释这两种错误情况。
使用图形用户界面:
所有服务器中的成功配置端点
但是当我尝试开始镜像时出现此错误
这很混乱,因为数据库必须在镜像服务器中处于恢复状态。但是我阅读了一些关于此的帖子,建议使用 T-SQL 进行配置,所以
使用 T-SQL:
使用 T-SQL 我遇到了这个问题:
消息 1418,级别 16,状态 1,第 54 行服务器网络地址“TCP://HML-SQLS-01-TST.domain.br:5022”无法访问或不存在。检查网络地址名称以及本地和远程端点的端口是否可操作。
让我逐步解释我遵循的步骤:
主服务器
CREATE DATABASE mirror
GO
ALTER DATABASE mirror
SET RECOVERY FULL
GO
USE mirror
GO
CREATE TABLE TESTE(
id INT IDENTITY(1,1),
descricao VARCHAR(255)
);
BACKUP DATABASE mirror
TO DISK = 'F:\Backup\mirror-full.bak'
GO
BACKUP LOG mirror
TO DISK = 'F:\Backup\mirror-log.bak'
GO
CREATE ENDPOINT Mirroring
STATE = started
AS TCP (listener_port=5022)
FOR database_mirroring (role=partner)
GO
USE MASTER
GO
CREATE LOGIN [DOMAIN\svc.witness] FROM WINDOWS
GO
GRANT CONNECT ON ENDPOINT::Mirroring TO [DOMAIN\svc.witness];
GO
镜像服务器
CREATE ENDPOINT Mirroring
STATE = started
AS TCP (listener_port=5022)
FOR database_mirroring (role=partner)
GO
RESTORE DATABASE mirror
FROM DISK = 'F:\Backup\mirror-full.bak'
WITH NORECOVERY
GO
RESTORE DATABASE mirror
FROM DISK = 'F:\Backup\mirror-log.bak'
WITH NORECOVERY
GO
USE MASTER
GO
CREATE LOGIN [DOMAIN\svc.witness] FROM WINDOWS
GO
GRANT CONNECT ON ENDPOINT::Mirroring TO [DOMAIN\svc.witness];
GO
见证服务器
create endpoint Mirroring
state = started
as tcp (listener_port=5022)
for database_mirroring (role=WITNESS)
go
USE MASTER
GO
CREATE LOGIN [DOMAIN\svc.witness] FROM WINDOWS
GO
GRANT CONNECT ON ENDPOINT::Mirroring TO [DOMAIN\svc.witness];
GO
镜像服务器
alter database mirror
set partner = 'TCP://HML-SQLS-01.domain.br:5022'
GO
PRINCIPAL SERVER(此执行中弹出错误)
--The error pops in this execution:
alter database mirror
set partner = 'TCP://HML-SQLS-01-TST.domain.br:5022'
GO
消息 1418,级别 16,状态 1,第 54 行服务器网络地址“TCP://HML-SQLS-01-TST.domain.br:5022”无法访问或不存在。检查网络地址名称以及本地和远程端点的端口是否可操作。
但是如果我在 CMD 中尝试这个命令,它的工作就完美了:
telnet hml-sqls-01-tst.domain.br 5022
服务器中的端点:
有没有人经历过这个或可以提出前进的道路?
与问题相关但与答案无关:虽然您获得了带有企业版的SQL Server 2017 ,但为什么要考虑一项正在维护且将来可能会删除的功能。
但是,在您的情况下,我建议验证以下区域(如果尚未完成),希望它必须解决问题:
我通过管理> SQL Server日志>当前检查了日志,它显示该服务尝试使用SQL Server实例默认用户连接端点(在我的情况下为[DOMAIN\svc.ssms])
因此,我向该用户授予连接端点权限并且工作正常。
遵循所有服务器中使用的命令:
我很烦恼不要在连接尝试中使用用户 [DOMAIN\witness],甚至授予端点的连接权限。不是一个更优雅的解决方案,但解决了我的情况。但是,可能存在最佳实践或方法。如果你知道,我请你在下面发表评论。
感谢大家!
不知道为什么,但尝试在辅助节点上运行 Alter database 命令,首先使用 5022 作为端口号。然后,在主节点上运行 Alter database 命令,接下来使用 5023 作为端口号。如果您继续遇到同样的错误,请告诉我。