zoukankan      html  css  js  c++  java
  • sqlserver2014 发布与订阅

    环境:windowsserver2012+ sqlserver2014

    发布机       192.168.1.43    KC-DB01      

    订阅机       192.168.1.218    DB-Sync

    SqlServer发布订阅

    基础知识

    经验建议:

    1.在装系统后先把机器主机名、用户名修改好(装完数据库后修改会严重影响发布订阅),然后再安装数据库;ps:血与泪的教训!

    2.多个需要设置发布订阅的的数据库的sa用户名密码设置相同;(后来推送订阅测试不需要)

    一、准备工作

    1.确保发布机、订阅机器 Sql Server 代理 已经在运行并设置为自启动;

    2.保证 SqlServer的主机名和物理机的主机名相同;若不同请看后面问题记录

    3.确保发布机、订阅机1433端口能相互连接(互通);

    4.添加域名解析,一般配置文件在C:WindowsSystem32driversetc 在最后面添加解析,两台机器都需要添加同样的解析

    192.168.1.43    KC-DB01

    192.168.1.218    DB-Sync

    最后通过ping KC-DB01测试是否能正常解析到前面的43IP;

    二、创建发布

    建立测试表

    CREATE TABLE TB_1(Id int primary key,Name char(200),InsertTime datetime default getdate())
    
    insert into TB_1 select isnull(max(id),0)+1,'a'+ltrim(isnull(max(id),0)+1),getdate() from TB_1
    
    select * from TB_1

    发布数据库表增加sa权限

    USE [KCMirrorDB]
    
    GO
    
    sp_changedbowner 'sa'

    1、发布

     

    选择发布类型,自行选择,区别下面有介绍,我们这里选择“事物发布”

     

    选择要发布的项目

     

    可以勾选一些表,也可以发布存储过程视图等,但是下面的这些不能发布,原因也有说明

    右键表格属性

    其他选项默认

    如果需要订阅过去的表有索引和默认值:复制非聚集索引、复制默认值规范、复制默认值绑定同一改为True,如果没有更改为True这样订阅服务器同步不了这些索引和默认值。

    根据情况,勾选自己要发布的部分表后执行下一步,进入筛选表行选项,可以筛选以上选择的表中不想同步的一些列,这里我们不筛选,直接下一步

     取消立即创建快照并使用快照对订阅进行初始化

     

    这里先进入“快照代理-安全设置”按如下设置账号密码,然后同样的设置日志读取器代理

    最后更改快照的存储位置

    右键刚创建的发布-属性

     

    自此sqlserver的发布完成

    验证发布正确性

    发布完成后,查看发布是否成功、是否有错误;先确保发布成功,便于后面有问题时分析;

    正在生成快照,说明发布没有问题,等待快照生成完成;

    2、订阅

    订阅的形式可以选择推送订阅或者请求订阅,请求订阅降低分发服务器处理工作的开销。只有在有很多订阅服务器的时候才比较明显,推送订阅与请求订阅更大的区别是在管理方面的不同;

    这里推荐使用“推送订阅”

    2.1、请求订阅

    注意:请求订阅,需要订阅服务器有访问发布服务器快照目录的权限;

    远程登录192.168.1.91机器

    创建一个数据库,用于订阅同步到这个库里;

     

     

     选择同步类型,(经过测试两次使用请求订阅都不成功,问题多多)

     

    选择同步到本地的数据库(这个库可以是个空库,但若不是同库,里面不能有和要同步的表相同的表)

    然后没啥重要步骤 下一步默认“连续运行” 下一步默认初始化时间“立即” 下一步 点击完成

    右键订阅---查看同步状态:

    2.2、推送订阅

    推送订阅与请求订阅 下面的选项是不同的,注意

    验证订阅是否成功

    到发布机上查看发布订阅状态

    然后再到订阅机器上就可以看到刚才创建的订阅了

    在订阅服务器上查看同步状态

    问题记录

    同步部分表时,如果同步视图可能会导致同步失败,因为视图中可能有没有同步的表,导致整体同步失败;所以要注意同步视图;

    数据库与主机名不一致

    第一种情况下:

    在SQL SERVER里面执行下面语句:

    use master

    go

    select @@servername    --查看数据库里存的主机名

    select serverproperty('servername')

    使用上面的语句查询服务器的名称和实际计算机的名称,如果两者不一致,就需要修改。

    不一致就执行下面的语句:

    sp_dropserver 'WIN-43G4DVCEI6E'

    go

    sp_addserver 'WIN-F5','local'

    修改完后,重启SQL SERVER服务。

    数据库分离报错“该数据库正用于复制,不能删除或不能分离”

    解决办法:到该数据库下执行:sp_removedbreplication 'LiaoDB'

    LiaoDB为该数据库名;

    发布报错

    错误消息

    • 进程无法在“WIN-19G6EV4O1JP”上执行“sp_replcmds”。 (源: MSSQL_REPL,错误号: MSSQL_REPL20011)
      获取帮助: http://help/MSSQL_REPL20011
    • 无法作为数据库主体执行,因为主体 "dbo" 不存在、无法模拟这种类型的主体,或您没有所需的权限。 (源: MSSQLServer,错误号: 15517)
      获取帮助: http://help/15517

    进程无法在“WIN-19G6EV4O1JP”上执行“sp_replcmds”。 (源: MSSQL_REPL,错误号: MSSQL_REPL22037)
    获取帮助: http://help/MSSQL_REPL22037

     

    解决办法

    https://www.cnblogs.com/gaizai/p/3305879.html

     错误号:15517

    进程无法在“WIN-XXX”上执行“sp_replcmds” 无法作为数据库主体执行,因为主体 "dbo" 不存在、无法模拟这种类型的主体,或您没有所需的权限。 (源: MSSQLServer,错误号: 15517

    权限不够,解决方法

      ALTER AUTHORIZATION ON DATABASE::[数据库名] TO [sa]  ALTER AUTHORIZATION ON DATABASE::[数据库名] TO [分发账户]  USE 数据库名  GO  sp_changedbowner '分发账户'
    ALTER AUTHORIZATION ON DATABASE::[LiaoDB] TO [sa]
    
    ALTER AUTHORIZATION ON DATABASE::[LiaoDB] TO [fabu]
    
    USE LiaoDB
    
      GO
    
      sp_changedbowner 'sa'

     比如我的数据库名称为 test, 发布账户为sa,订阅账户也为sa

    ALTER AUTHORIZATION ON DATABASE::[test] TO [sa]
    
    USE test
    
      GO
    
      sp_changedbowner 'sa'

    订阅报错

    错误信息

    2017-01-04 10:24:44.394 初始化

    由于出现操作系统错误 3,进程无法读取文件“E:data_syncuncKC-DB01_KCMAINDB_FABU_KCMAINDB20170104162525GetMemberAccou4ce5f23b_109.pre”。

    Category:OS

    Source: 

    Number:  3

    Message: 系统找不到指定的路径。

     

    解决办法

    主要原因就是订阅服务器访问订阅目录快照"D:***假装如上报错路径***_109.pre"失败造成的。

    解决方式:1

    1.将存放快照的目录设置为共享,并设置读取的权限;

    1)发布服务器设置:

    在发布属性中,点击左侧的快照,在右边页面中的快照文件的位置默认为E:data_sync把该文件夹设置为共享,并且在安全项里,设置用户权限(我在系统添加了一个账户,并给这个账户访问该文件夹权限)

    2)订阅服务器设置:

    在订阅服务器,右击订阅的服务名,选择属性,设置属性参数如下

     a.快照位置修改为备用文件夹

     b.快照文件夹修改为 \发布服务器的ip epldata

     

    然后通过命令输入该路径,回车会提示输入账户密码,输入发布机创建的账户,并选择记住密码即可;最后在查看同步状态中 停止同步,然后重新初始化,最后在同步状态中启动同步即可;

    该方法参考链接:http://www.cnblogs.com/yf2011/p/5001326.html

    解决办法2.使用FTP验证传输快照文件,之前步骤都一样只是认证给订阅服务器权限为ftp

    参考链接:(测试过不好用,需要自己搭建ftp服务器)

    https://help.aliyun.com/knowledge_detail/40772.html?spm=5176.7842542.2.14.Fqg2xX

    解决方法3.请求订阅改成推送订阅;(该方式不需要订阅机访问发布机权限)

    “此订阅已存在”,但是在订阅服务器上却看不到该订阅

    解决:

    到发布服务器的订阅项目下,给当前订阅删除掉,再到订阅服务器重新创建订阅

     单发布多订阅

    服务器A : testpush库

    服务器B、服务器C 订阅服务器A 的testpush发布

    在B、C上创建好订阅之后,需要重启服务器A 的 testpush库的“日志快照”作业,以便生成新的发布快照

    参考:

    http://www.th7.cn/db/mssql/201802/263764.shtml

    https://www.cnblogs.com/TeyGao/p/3521109.html

    https://www.cnblogs.com/TeyGao/p/3521109.html

  • 相关阅读:
    基础算法:两数之和
    adb常用命令食用方法
    C语言面试题
    C语言经典笔试题目
    嵌入式01 51单片机实验02 sfr和sbit bit和int char
    C语言 01 volatile关键字
    C++ 01 基础知识点
    嵌入式02 STM32 实验11 NVIC和中断总结
    嵌入式02 STM32 实验10 定时器中断
    嵌入式02 STM32 实验09 独立/窗口看门狗
  • 原文地址:https://www.cnblogs.com/xiaoyou2018/p/10817748.html
Copyright © 2011-2022 走看看