zoukankan      html  css  js  c++  java
  • 数据库镜像出现“无法访问或不存在"故障的原因和解决方案

    如果两个服务器不是在同一个域中, 并且sql server服务不是用域用户做为启动服务的身份。那么在做数据库镜像很可能收到如标题所示的错误。

    这时,你就必须改用证书做端点的身份验证才能将运行起数据库镜像。

    现在假设环境:
    Host_A为主服务器,Host_B为镜像服务器。
    已经按要求进行将Host_A的目标数据库备份,并在Host_B中还原。
    通过UI界面已经配置好镜像,端点的端口两边都是5022,名称都为[镜像]。
    防火墙的相关端口已经打开,SQL Server的TCP/IP协议已经启用。

    步骤一
    在Host_A上执行
    USE master;
    GO
    //在 master 数据库中,创建数据库主密钥(如果需要)。
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';
    GO
    CREATE CERTIFICATE HOST_A_cert 
       
    WITH SUBJECT = 'HOST_A certificate';
    GO
    /****** Object:  Endpoint [镜像]    Script Date: 09/01/2009 17:44:54 ******/
    IF  EXISTS (SELECT * FROM sys.endpoints e WHERE e.name = N'镜像'
    DROP ENDPOINT [镜像]
    GO
    /****** Object:  Endpoint [镜像]    Script Date: 09/01/2009 17:44:54 ******/
    CREATE ENDPOINT [镜像] 
        
    AUTHORIZATION [sa]
        STATE
    =STARTED
        
    AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
        
    FOR DATA_MIRRORING (ROLE = PARTNER, AUTHENTICATION = CERTIFICATE HOST_A_cert
    , ENCRYPTION 
    = REQUIRED ALGORITHM RC4)
    GO
    BACKUP CERTIFICATE HOST_B_cert TO FILE = 'D:\Data\HOST_A_cert.cer';

    步骤二
    在Host_B上执行
    //在 master 数据库中,创建数据库主密钥(如果需要)。
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';
    GO
    CREATE CERTIFICATE HOST_B_cert 
       
    WITH SUBJECT = 'HOST_B certificate';
    GO
    /****** Object:  Endpoint [镜像]    Script Date: 09/01/2009 17:44:54 ******/
    IF  EXISTS (SELECT * FROM sys.endpoints e WHERE e.name = N'镜像'
    DROP ENDPOINT [镜像]
    GO
    /****** Object:  Endpoint [镜像]    Script Date: 09/01/2009 17:44:54 ******/
    CREATE ENDPOINT [镜像] 
        
    AUTHORIZATION [sa]
        STATE
    =STARTED
        
    AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
        
    FOR DATA_MIRRORING (ROLE = PARTNER, AUTHENTICATION = CERTIFICATE HOST_B_cert
    , ENCRYPTION 
    = REQUIRED ALGORITHM RC4)
    GO
    BACKUP CERTIFICATE HOST_B_cert TO FILE = 'D:\Data\HOST_B_cert.cer';
    GO

    步骤三
    复制HOST_A_cert.cer到Host_B,复制复制HOST_B_cert.cer到Host_A

    步骤四
    在Host_A上执行
    USE master;
    CREATE LOGIN HOST_B_login WITH PASSWORD = 'password';
    GO
    CREATE USER HOST_B_user FOR LOGIN HOST_B_login;
    GO
    CREATE CERTIFICATE HOST_B_cert
       
    AUTHORIZATION HOST_B_user
       
    FROM FILE = 'D:\backup\HOST_B_cert.cer'
    GO
    GRANT CONNECT ON ENDPOINT::[镜像]   TO [HOST_B_login];

    步骤五
    在Host_B上执行
    USE master;
    CREATE LOGIN HOST_A_login WITH PASSWORD = 'password';
    GO
    CREATE USER HOST_A_user FOR LOGIN HOST_A_login;
    GO
    CREATE CERTIFICATE HOST_A_cert
       
    AUTHORIZATION HOST_A_user
       
    FROM FILE = 'D:\backup\HOST_A_cert.cer'
    GO
    GRANT CONNECT ON ENDPOINT::[镜像]   TO [HOST_A_login];
    启动镜像!
  • 相关阅读:
    【分布计算环境学习笔记】4 Enterprise Java Bean
    超详细的秒杀架构设计,运维,了解一下【转】
    Redis的监控指标【转】
    Windows netstat 查看端口、进程占用 查看进程路径
    wireshark抓包新手使用教程【转】
    关于设置sftp 指定端口【转】
    简单聊一聊Ansible自动化运维【转】
    tomcat启动报错SEVERE: Exception loading sessions from persistent storage【转】
    彻底搞懂 Kubernetes 的底层网络,看这几张图就够了【转】
    Java设计模式之(五)——代理模式
  • 原文地址:https://www.cnblogs.com/goodspeed/p/1558252.html
Copyright © 2011-2022 走看看