tes*_*ing 13 sql-server-2005 sql-server-2008 sql-server mirroring
我安装了 SQL Server 2008 R2。它包含三个实例。
所有这些都是作为网络服务登录..
默认实例是主体服务器第一个实例是镜像第二个实例是见证服务器
我最初对我的主体数据库进行了完整备份和事务日志备份。通过保持相同的数据库名称将其恢复到第一个实例,恢复状态为无恢复
最后,我启动了镜像,并收到如下所示的两条错误消息。


Cra*_*ein 12
尝试一些基本的连接测试。
从命令行:
netstat -an
Run Code Online (Sandbox Code Playgroud)

在我的服务器上,您可以看到 5022 正在侦听。
接下来确保您可以通过 telnet 连接到这些端口
telnet fully-qualified-server-name 5022
Run Code Online (Sandbox Code Playgroud)
正如它在镜像属性 GUI的“注释”部分中提到的,就在见证字段下方,服务器名称必须是完全限定的 tcp 地址。

您应该只看到黑屏。在这个例子中,我选择了一个会导致连接失败的名称。如果您看到“无法打开连接”,则表示无法访问定义为镜像、主体和见证的服务器,或者您使用的名称不正确。
telnet 客户端可以在 Windows 2008 的功能下添加。
在 Windows 2008 中,当您右键单击“计算机”时,您可以看到完整的计算机名称。您也应该能够从命令行 ping 它。例如:ping myservername
更新
请在每个 SQL Server 实例上运行以下查询并将结果放在您的问题中。许多这些故障排除技巧来自:http : //msdn.microsoft.com/en-us/library/ms189127.aspx
显示 tcp 端点
SELECT type_desc, port FROM sys.tcp_endpoints;
Run Code Online (Sandbox Code Playgroud)
显示镜像端点的状态
SELECT state_desc FROM sys.database_mirroring_endpoints;
Run Code Online (Sandbox Code Playgroud)
检查 ROLE 是否正确
SELECT role FROM sys.database_mirroring_endpoints;
Run Code Online (Sandbox Code Playgroud)
显示端点的权限
SELECT EP.name, SP.STATE,
CONVERT(nvarchar(38), suser_name(SP.grantor_principal_id))
AS GRANTOR,
SP.TYPE AS PERMISSION,
CONVERT(nvarchar(46),suser_name(SP.grantee_principal_id))
AS GRANTEE
FROM sys.server_permissions SP , sys.endpoints EP
WHERE SP.major_id = EP.endpoint_id
ORDER BY Permission,grantor, grantee;
GO
Run Code Online (Sandbox Code Playgroud)
从其他服务器实例登录服务帐户需要 CONNECT 权限。确保来自其他服务器的登录具有 CONNECT 权限。要确定谁对端点具有 CONNECT 权限,请在每个服务器实例上使用以下 Transact-SQL 语句。
示例输出:
name STATE GRANTOR PERMISSION GRANTEE
TSQL Local Machine G sqladmin CO public
TSQL Named Pipes G sqladmin CO public
TSQL Default TCP G sqladmin CO public
TSQL Default VIA G sqladmin CO public
Mirroring G SERVERNAME\Grantor CO SERVERNAME\Grantee
Run Code Online (Sandbox Code Playgroud)
Grantor 是分配(CO)连接权限的账户,Grantee 是具有连接权限的账户
从命令行运行ipconfig /all并注意主机名返回的内容。