zoukankan      html  css  js  c++  java
  • 关于禁用发布可能出现的问题处理

          SQL Server在订阅和发布是经常出现一些意想不到的问题,导致发布订阅无法使用,此时经常需要对发布订阅进行删除,笔者经过多次试验,发现直接删除发布和订阅时,经常会出现删除不彻底,表面现象就是因发布订阅而出现的触发器、rowguid列等仍然存在,从而影响数据库的正常使用,这样还需要进一步对数据库处理才能彻底清楚发布和订阅。

          其实在发布和订阅的选项里面,有一个禁用发布,使用此功能,一般会完成发布订阅的处理,也不会有任何的残留,所以提示大家在做发布和订阅的处理时,尽量使用禁用功能,当然,这样处理有时候也会产生一些异常,对于遗留下的触发器、rowguid列的问题,我们可以用一些脚本处理掉,脚本如下:

     

    -- drop rowguid indexes

    select 'drop index ' + sysobjects. name + '.' + sysindexes. name from

    sysindexes

    inner join sysobjects

    on sysindexes. id = sysobjects. id

    where objectproperty ( object_id ( sysobjects. name), 'IsMSShipped' ) = 0

    and sysindexes. indid > 0 and sysindexes. indid < 255 and ( sysindexes. status &

    64)= 0

    and index_col ( sysobjects. name, sysindexes. indid, 1) = 'rowguid'

    order by sysindexes. indid

     

    -- remove rowguid default constraints

    select 'alter table ' + b. name + ' drop constraint ' + a. name from

    sysobjects a

    inner join syscolumns on syscolumns. id = a. parent_obj

    inner join sysobjects b on syscolumns. id = b. id

    where syscolumns. name = 'rowguid'

    and objectproperty ( object_id ( b. name), 'IsMSShipped' ) = 0

    and a. xtype = 'D'

     

    -- remove rowguid columns

    select 'alter table ' + sysobjects. name + ' drop column ''rowguid'' ' from

    syscolumns

    inner join sysobjects on syscolumns. id = sysobjects. id

    where syscolumns. name = 'rowguid'

    and objectproperty ( object_id ( sysobjects. name), 'IsMSShipped' ) = 0

     

     

    有时候 ,还会出现一下提示,

    “标题: Microsoft SQL Server Management Studio
    ------------------------------

    无 法删除发布“XXXX”。

    有关帮助信息,请单击: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.0.1600.22&EvtSrc=Microsoft.SqlServer.Management.UI.VSIntegration.ObjectExplorer.Replication.ReplicationMenuItem&EvtID=CantDeletePublication&LinkId=20476

    ------------------------------
    其 他信息:

    执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)

    ------------------------------

    无法作为数据库主体执行,因为主体 "dbo" 不存在、无法模拟这种类型的主体,或您没有所需的权限。
    已将数据库上下文更改为 'XXXX'。 (Microsoft SQL Server,错误: 15517
    )

    有关帮助信息,请单击: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.00.1600&EvtSrc=MSSQLServer&EvtID=15517&LinkId=20476

    其实产生上述问题的主要原因是两方面:

    1、可能是因为孤立用户引起的,其处理方式如下:

    USE
     出问题的库名;
    
    GO
    -- 查看孤立用户
    EXEC sp_change_users_login ' Report ' ;
    GO
    -- 修复孤立用户
    EXEC sp_change_users_login ' Auto_Fix ' , ' 孤立用户名 ' , NULL , ' 用户密码 ' ;

    还有一种情况是因为数据库的owner出现异常引起了
    ,解决方案如下:

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

    然后在使用禁用的方式

    ,就可以完成发布订阅的处理了。

  • 相关阅读:
    找出2n+1个数中不成对的那个(升级版)
    找出2n+1个数中不成对的那个
    随手记,完美的记账软件
    NOD32强制卸载工具使用方法【转】
    中医养生重在养“气”【灵枢针灸-袁医生】
    美国大学对本科生培养的12条标准【转】
    Windows软件使用Q&A集锦【持续更新】
    VLSI和ASIC的区别(转)
    Verilog 模块参数重定义(转)
    FPGA技术的一些基本概念(综合、BlackBox)(转)
  • 原文地址:https://www.cnblogs.com/Gaojier/p/2783535.html
Copyright © 2011-2022 走看看