尝试运行以下命令:
ALTER DATABASE myDB SET WITNESS = 'TCP://myServer.local:7024';
我不断收到以下错误:
消息 1456,级别 16,状态 3,第 21 行 ALTER DATABASE 命令无法发送到远程服务器实例“TCP://myServer.local:7024”。数据库镜像配置未更改。验证服务器是否已连接,然后重试。
尝试检查防火墙端口,确保证书有效,确保端点被授予访问权限。
SQL 日志显示以下消息:
数据库镜像登录尝试失败并出现错误:'连接握手失败。没有兼容的身份验证协议。状态 21。
我的合作伙伴法定人数工作正常,但需要见证人才能达到完全法定人数。使用证书进行身份验证(无域)。有没有人遇到过这个?
不幸的是,我没有评论的声誉,实际上我宁愿将其添加为评论并首先询问您的 sys.database_mirroring_endpoints DMV 的输出......
我假设您已经使用 telnet 或 PS Test-NetConnection 验证了连接是否正常工作...
这听起来像端点没有配置相同的身份验证类型和算法。
跑
在您的主体和辅助实例上。验证 STATE_DESC 以读取“已启动”并记下以下项目,这些项目在两个实例上都应相同。
在见证实例上运行相同的语句,并记下 db_principal_name(最后一列)。
比较委托人/镜像和见证人的价值观。如果 Witness 具有除您的镜像之外的任何值,请相应地更改 Witness 上的端点。还要验证证书的指纹在您的实例上是否相同。
警告:更改 Witness 上的端点可能会破坏那里的任何可用性组或其他数据库镜像配置,因此请谨慎使用。在更改任何内容(服务器对象 --> 端点 --> 数据库镜像)之前,您可以在对象资源管理器中编写现有端点配置的脚本。
例如,如果 Principal/Mirror 上的 connection_auth_desc 使用证书 SomeCert 显示“CERTIFICATE”和 encryption_algorithm_desc“AES”:
还应允许 db_principal_name 中规定的用户登录名连接到您的端点。验证这一点,例如使用 GUI 转到 Security --> Logins --> 双击登录名,在 Securables 下,您应该会看到您的端点具有“CONNECT”权限。
如果不是,并且您的登录名被命名为“SomeLogin”: