已经可以确保数据库镜像服务器B和见证服务器C是可以通过网络互相访问的,我是让见证服务器C做 主体服务器,和先前的镜像服务器B组成一对镜像伙伴,从镜像监视器中可以看到,两台机器都可以互访.
但是一旦加入第3台机器,如我的主题,见证服务器C与镜像服务器B显示已断开连接.
在见证服务器C上打开sql server profiler,在主题服务器上执行
ALTER DATABASE Test1 SET witness = 'TCP://192.168.1.150:7039';
是没有捕获到任何追踪的
关于两个服务器的登录账户是否在对方服务器的端点上被授予了CONNECT的权限。
这个应该怎么检查?
我用
SELECT 'Metadata Check';
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
在见证服务器上运行,结果如下:
endpoint_mirroring G 20110407-0927\Administrator CO M_149
endpoint_mirroring G 20110407-0927\Administrator CO M_150
endpoint_mirroring G 20110407-0927\Administrator CO M_122
在见证服务器150上有一个创建帐号代码,其中M_122是主体服务器上的登录名,M_149是镜像服务器上的登录名,M_150是见证服务器上的登录名:
CREATE LOGIN M_122 WITH PASSWORD = 'M_Test';
CREATE USER M_122 for LOGIN M_122
CREATE CERTIFICATE T122_Cert
AUTHORIZATION M_122
FROM FILE = ''
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO M_122;
GO
CREATE LOGIN M_149 WITH PASSWORD = 'M_Test';
CREATE USER M_149 for LOGIN M_149
CREATE CERTIFICATE T149_Cert
AUTHORIZATION M_149
FROM FILE = ''
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO M_149;
GO
CREATE LOGIN M_150 WITH PASSWORD = 'M_Test';
CREATE USER M_150 for CERTIFICATE T150_Cert;
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO M_150;
GO
(后缀150表示见证服务器,后缀149是镜像服务器,后缀122是主题服务器)其它两台机器上也执行了上面类似的代码
能否帮我分析下,是哪里出了问题吗?