关于禁用发布可能出现的问题处理
来源:互联网 发布:2016年最火的网络用语 编辑:程序博客网 时间:2024/04/29 00:33
SQL Server在订阅和发布是经常出现一些意想不到的问题,导致发布订阅无法使用,此时经常需要对发布订阅进行删除,笔者经过多次试验,发现直接删除发布和订阅时,经常会出现删除不彻底,表面现象就是因发布订阅而出现的触发器、rowguid列等仍然存在,从而影响数据库的正常使用,这样还需要进一步对数据库处理才能彻底清楚发布和订阅。
其实在发布和订阅的选项里面,有一个禁用发布,使用此功能,一般会完成发布订阅的处理,也不会有任何的残留,所以提示大家在做发布和订阅的处理时,尽量使用禁用功能,当然,这样处理有时候也会产生一些异常,对于遗留下的触发器、rowguid列的问题,我们可以用一些脚本处理掉,脚本如下:
-- drop rowguid indexes
select 'drop index '+ sysobjects.name+ '.' + sysindexes.name from
sysindexes
inner joinsysobjects
on sysindexes.id= sysobjects.id
where objectproperty(object_id(sysobjects.name),'IsMSShipped') = 0
and sysindexes.indid> 0 andsysindexes.indid <255 and (sysindexes.status &
64)=0
and index_col(sysobjects.name, sysindexes.indid, 1) = 'rowguid'
order bysysindexes.indid
-- remove rowguid default constraints
select 'alter table '+ b.name + ' drop constraint ' + a.name from
sysobjectsa
inner joinsyscolumns on syscolumns.id = a.parent_obj
inner joinsysobjects 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 joinsysobjects 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';
然后在使用禁用的方式
,就可以完成发布订阅的处理了。
- 关于禁用发布可能出现的问题处理
- ios发布可能出现的问题
- 关于域名解析可能出现的问题
- VB中IIS Application发布可能出现的问题
- 关于pojo发布webservice出现的问题
- 关于自定义迭代器类出现的问题可能解决方案
- [C++]实现--讨论关于实现中可能出现的问题
- 锁上可能出现的问题
- fifo可能出现的问题
- Hadoop可能出现的问题
- 关于IIS发布网站后出现3005错误的问题
- Qt发布可能遇到的问题
- Qt发布可能遇到的问题
- Qt发布可能遇到的问题
- socket.io使用netscaler作为代理服务器进行转发时可能出现的问题及其处理办法
- 关于VS调试时出现的找不到可执行文件问题的可能的解决办法
- 关于VS2010调试时出现的找不到可执行文件问题的可能的解决办法
- 关于图形化编程软件sikuli 初学者使用时可能容易出现的一些问题
- 神奇的汇编(八)
- 引用
- 10年3月总结
- Apache提示:通常每个套接字地址只允许使用一次
- VC++动态链接库编程之非MFC DLL
- 关于禁用发布可能出现的问题处理
- 勾起的记忆
- 我又一个愿望
- maven 生命周期
- Oracle 视图
- C/S 与 B/S 的区别
- 在星际译王中添加词典,zip合并解压的方法
- spring 剑走偏锋 mappingDirectoryLocations来配置Hibernate映射文件
- Ext_表单提交