AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 252853
Accepted
Leonardo Lacerda
Leonardo Lacerda
Asked: 2019-11-09 10:32:04 +0800 CST2019-11-09 10:32:04 +0800 CST 2019-11-09 10:32:04 +0800 CST

数据库镜像 - 主机无法访问或不存在

  • 772

我尝试使用 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 t-sql
  • 3 3 个回答
  • 1931 Views

3 个回答

  • Voted
  1. Shekar Kola
    2019-11-10T00:03:44+08:002019-11-10T00:03:44+08:00

    与问题相关但与答案无关:虽然您获得了带有企业版的SQL Server 2017 ,但为什么要考虑一项正在维护且将来可能会删除的功能。

    但是,在您的情况下,我建议验证以下区域(如果尚未完成),希望它必须解决问题:

    • 确保所有 SQL 实例服务在同一个域帐户下运行
      • 该服务获得所有 SQL 实例的权限(如 OP 中所述)
    • 验证端点端口是否不同,如果一台服务器有多个 SQL 实例
      • 允许防火墙的端点端口(传入和传出),甚至禁用防火墙
    • 如果自上次更改密码后未重新启动所有 SQL 实例服务
      • 检查 SQL 错误日志以验证相同的端口号正在侦听
    • 1
  2. Best Answer
    Leonardo Lacerda
    2019-11-12T06:09:11+08:002019-11-12T06:09:11+08:00

    我通过管理> SQL Server日志>当前检查了日志,它显示该服务尝试使用SQL Server实例默认用户连接端点(在我的情况下为[DOMAIN\svc.ssms])

    数据库镜像登录尝试失败并出现错误:连接握手失败。登录 'DOMAIN\svc.ssms' 在端点上没有 CONNECT 权限。州 84。

    因此,我向该用户授予连接端点权限并且工作正常。

    遵循所有服务器中使用的命令:

    USE master
    GO
    CREATE LOGIN [DOMAIN\svc.ssms] FROM WINDOWS;
    GO
    GRANT CONNECT ON ENDPOINT::Mirroring to [DOMAIN\svc.ssms];
    GO 
    

    我很烦恼不要在连接尝试中使用用户 [DOMAIN\witness],甚至授予端点的连接权限。不是一个更优雅的解决方案,但解决了我的情况。但是,可能存在最佳实践或方法。如果你知道,我请你在下面发表评论。

    感谢大家!

    • 1
  3. rvsc48
    2019-11-09T13:03:44+08:002019-11-09T13:03:44+08:00

    不知道为什么,但尝试在辅助节点上运行 Alter database 命令,首先使用 5022 作为端口号。然后,在主节点上运行 Alter database 命令,接下来使用 5023 作为端口号。如果您继续遇到同样的错误,请告诉我。

    • 0

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve