美文网首页
03-Sql Server 集群-数据同步补充

03-Sql Server 集群-数据同步补充

作者: 过桥 | 来源:发表于2020-04-13 16:13 被阅读0次

    简述发布订阅中遇到的问题

    问题一

    数据同步过程中发现部分表未能同步

    解决方案

    检查发布属性,发现部分表没有设置主键,导致无法选中发布


    无法选中表

    修改表结构,设置主键(自增),再次查看发布属性,选中表,确定,重新初始化订阅

    问题二

    自检所有未见主键表,并自建

    解决方案

        # 单表 建 id 主键 
        alter table xxx add constraint PK_xxx_ID primary key (id)
    
        # 检查所有表,自建主键
        declare @tablename sysname   
         
        declare @strsql nchar(500)   
         
        declare tableNameCursor cursor for  
         
        select b.name from sysobjects b where xtype='U' and  b.name not in   
         
        (select object_name(a.parent_obj)  from sysobjects a where xtype='PK' )   
         
        open tableNameCursor     
         
        fetch next from tableNameCursor into @tablename   
         
        while @@FETCH_STATUS = 0   
         
        begin  
         
        print @tablename   
         
        set @strsql= 'alter table [' + @tablename + '] add constraint PK_' + @tablename + '_ID primary key (id) '  
         
        print @strsql   
         
        exec (@strsql)   
         
        fetch next from tableNameCursor into @tablename   
         
        end  
         
        close tableNameCursor   
         
        deallocate  tableNameCursor 
    
    后续问题一

    id 列,或 id 列可为 NULL,创建识别,按提示修改即可

    消息 1911,级别 16,状态 1,第 1 行
    列名 'id' 在目标表或视图中不存在。
    消息 1750,级别 16,状态 0,第 1 行
    无法创建约束。请参阅前面的错误消息。
    
    消息 8111,级别 16,状态 1,第 1 行
    无法在表 'T_xxxx' 中可为 Null 的列上定义 PRIMARY KEY 约束。
    消息 1750,级别 16,状态 0,第 1 行
    无法创建约束。请参阅前面的错误消息。
    
    后续问题二

    主键列内有重复数据

    解决办法

    方案一,检查重复,后续手动修改

    SELECT   COUNT(ID) AS '重复次数', ID
    FROM      T_xxxx
    GROUP BY ID
    HAVING   (COUNT(*) > 1)
    ORDER BY ID DESC
    

    方案二,重置自增 ID

    DBCC CHECKIDENT (T_xxxx,reseed,0)
    

    相关文章

      网友评论

          本文标题:03-Sql Server 集群-数据同步补充

          本文链接:https://www.haomeiwen.com/subject/hzcgmhtx.html