zoukankan      html  css  js  c++  java
  • sqlserver 实时同步(发布订阅)

    配置发布订阅手册

    不同版本须知:https://www.sqlmanager.net/en/articles/1548

    向后兼容性:参考https://docs.microsoft.com/zh-cn/sql/relational-databases/replication/replication-backward-compatibility?view=sql-server-2017

    1.环境介绍

      两台在同一局域网的PC机,这里PC1是作为分发服务器,PC2作为订阅服务器

    2.操作前准备

      检查几个设置,这是操作的关键,PC1和PC2都要进行相同的配置

      1)开共享

     

    在任务栏的计算机图标右键->打开网络和共享中心->更改高级共享设置

    在高级共享里面开启共享

     

    2)防火墙开1433 端口

    打开控制面板,选择系统与安全;打开防火墙设置中的高级设置

     

    新建一个入站规则

     

    点击新建规则->端口

     

    端口->填写开放的端口号

     

                          填写开放的端口号->选择允许连接

         

    下面的全部默认就可以

     

    3)配置管理器设置TCP/IP启用

     

    打开配置管理器,网络配置->协议->TCP/IP开启

     

    选中TCP/IP右键“属性”,在属性中把对应的ip 本机ip的Enabled设置为“是”,端口号为默认的1433

     

    4)Sql Server Browser 服务开启

    如果在SSMS工具中找不到局域网内的其他数据库服务器,可以开启这个功能

     

    5)两台机有相同的账户(用户名和密码要一致)

     

    6)数据库添加windows账户访问

    打开SSMS添加上面新建的windows账户SqlServer

     

    7)数据库开启允许远程连接

    在SSMS中开启数据库允许远程连接

     

    8)测试网络是否连接成功

    这是最关键的一步,也是下面订阅同步操作的前提,打开cmd命令窗口(windows+R 输入cmd回车)。

    先使用ping命令测试网络连接是否有问题(PC1和PC2都要ping测试是否互通)

     

    就算能ping通,只能说明局域网内存在这台机,也不代表能实现同步,还要测试端口是否可用。

    使用telnet命令测试端口是否可用 telnet 192.168.0.62 1433

    出现这个窗口表示可用

     

    3.订阅设置

    已经在PC1新建了一个新的数据库Test1,Test1里面有一张表Table_1, Table_1插入了几条测试数据,把数据库Test1备份复制到PC2机器上还原。

    1)配置PC1作为分发服务器

                    打开数据库的 复制->本地发布,右键新建发布

                   

    下面的步骤按照截图来,这里的发布数据库选择的是测试用的Test1,我们的实验就是要把PC1的Test1数据库同步到PC2的数据库Test1

     

     

     

     

    下一步。选择“在以下windows账户下运行”,填写PC1机windows账户(这里要填域账户),连接发布服务器使用的是sa账户。(这里选择“在sqlserver代理账户下运行”经过测试也是可以的)

     

     

    2)配置PC2作为订阅服务器

                设置订阅可以在分发服务器上也可以在订阅服务器上,结果是一样的,这里我们在分发服务器上设置

    右键本地订阅,新建订阅

     

    选择PC1机发布服务器的发布任务

    下一步,有两个选项,这次实验是在分发服务器运行推送订阅,选择第一项

     

    下一步,点击“添加订阅服务器”,服务器名称选择的是PC2机的名称,使用windows身份验证,这里能连接上的原因是我们两台机都有相同的用户名和密码,也是上面说明中要配置相同windows账户的原因(这里也可以使用数据库的账户登录)

     

    要订阅的是PC2机上的Test1数据库

     

    下一步,设置订阅属性

     

    选择“在以下windows账户下运行”,填写PC1机windows账户,因为我们在发布服务器上进行分发。

     

    后面的设置默认就行

     

     

     

     

    4. 测试同步订阅

                    当前PC1的Test1数据库表内容为

     

    我们插入几条数据

     

    查看PC2机的数据库Test1的表数据有没有变化

     

    详细的内容还可以查看同步状态信息,选中订阅服务器右键,查看同步状态

     

    点击“监视”

     

    还有代理状态

     

    双击右表的状态条可以查看同步的各种参数

     

    到这里同步订阅功能测试完成

    5.常见问题汇总

                1SQL Server replication requires the actual server name to make a connection to the server

     

    解决方法:(之前改过名字)

    SELECT @@SERVERNAME

    先看清楚,名称是不是和现在的名称一样。

    sp_dropserver 'old_server_name'
    GO
    sp_addserver 'current_computer_name', 'local'

    GO 

    如果不是,去掉老名字,换成新名字。

    然后,重启SQL,搞定之~~

    2)进程无法连接到 Subscriber“***”

    进程无法连接到 Subscriber“***”。 (源: MSSQL_REPL,错误号: MSSQL_REPL0)
    获取帮助: http://help/MSSQL_REPL0
    SQL Server 网络接口: 定位指定的 Server/Instance 时出错 [xFFFFFFFF].  (源: MSSQLServer,错误号: -1)
    获取帮助: http://help/-1
    与 SQL Server 建立连接时发生了与网络相关的或特定于实例的错误。找不到或无法访问服务器。请检查实例名称是否正确以及 SQL Server 是否配置为允许远程连接。有关详细信息,请参阅 SQL Server 联机丛书。 (源: MSSQLServer,错误号: -1)
    获取帮助: http://help/-1
    登录超时已过期 (源: MSSQLServer,错误号: HYT00)
    获取帮助: http://help/HYT00

         最可能的原因:发布服务器与订阅服务器之间ping不通,可能是防火墙的问题,首先ping下对应机器ip,找出ping不通的机器,再调整对应防火墙

    3)发布时出现“无法开始执行步骤 2 (原因: 验证代理 XXXX的身份时出错,系统错误: 登录失败: 未知的用户名或错误密码。).  该步骤失败。

    解决办法打SP2以上补丁。

    或者直接用内置服务

    4)使用SQL Server发布数据库快照遇到错误:对路径“xxxxx”访问被拒绝的解决方法

                    开始-> 所有程序 -> SQL Server 配置管理器 -> 在左边栏选择”SQL Server服

    务“->在右侧面板中"SQL Server 代理”一行上右击,选择“属性”,

    在弹出的对话框中选择"内置账户“->LocalSystem即可。    

    5)遇到“拒绝了对对象的 EXECUTE 权限”和“无法作为数据库主体执行,因为主体 "dbo" 不存在、无法模拟这种类型的主体,或您没有所需的权限”的问题

    USE 出问题的库名; 
    EXEC sp_changedbowner 'sa';

    6)发布 'xx' 的并发快照不可用,因为该快照尚未完全生成,或者日志读取器代理未运行,无法激活它。如果并发快照的生成过程中断,则必须重新启动用于该发布的快照代理,直到生成完整的快照。

    删除相关的发布订阅

    执行下列查询,如果还是存在'xx'相关的行

            select * from msdb..MSdistpublishers

            select * from distribution..MSpublisher_databases

            select * from distribution..MSpublications

            select * from distribution..MSarticles

            select * from distribution..MSsubscriptions

    删掉所有与'xx'先关的行(记得先备份表)

      delete from distribution..MSarticles where publisher_db = '<NameOfDatabase>'

      delete from distribution..MSsubscriptions where publisher_db = '<NameOfDatabase>'

    重建分发

    参考 stackoverflow

    如果没有修改过密码,就是删除分发复制时由于某些原因没删干净(上边的那些表)
    经测试,删除发布、订阅时MSsubscriptions表中的数据会自动被删掉,
    如果还存在之前的‘xx’那就是未删除干净

     

  • 相关阅读:
    Java+7入门经典 -1 简介
    优化算法动画演示Alec Radford's animations for optimization algorithms
    如何写科技论文How to write a technical paper
    开始学习深度学习和循环神经网络Some starting points for deep learning and RNNs
    用500行Julia代码开始深度学习之旅 Beginning deep learning with 500 lines of Julia
    用10张图来看机器学习Machine learning in 10 pictures
    ICLR 2013 International Conference on Learning Representations深度学习论文papers
    ICLR 2014 International Conference on Learning Representations深度学习论文papers
    卷积神经网络CNN(Convolutional Neural Networks)没有原理只有实现
    卷积神经网络Convolutional Neural Networks
  • 原文地址:https://www.cnblogs.com/xiaoping1993/p/8794192.html
Copyright © 2011-2022 走看看