※天道酬勤※

§水至清则无鱼,人至察则无徒§
posts - 65, comments - 11, trackbacks - 0, articles - 0
  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

SQL SERVER关于MSG:3724问的解决

Posted on 2006-08-01 20:03 五指魅力 阅读(2175) 评论(0)  编辑 收藏 引用

近日机器上的一个SQL被弄成了正在加载状态,试图删除,提示“错误3724,无法删除数据库,因为其正用于复制”,MSDN上的说法是:
解释

数据库中的对象经复制后,通常会在系统表 sysarticles(用于快照和事务性发布)或 sysmergearticles(用于合并发布)中标记为已复制。尝试删除复制的对象时,会引发此错误。

用户操作

尝试删除对象之前,请确保数据库对象未经复制。例如:

如果此错误发生在发布数据库中,则先从发布中删除项目,然后再删除对象。有关详细信息,请参阅向现有发布添加项目和从中删除项目。

如果此错误发生在订阅数据库中,则先删除订阅,然后再删除对象。有关详细信息,请参阅订阅发布。对于事务性发布的订阅,可以删除单个项目的订阅,而不用删除整个发布。有关详细信息,请参阅 sp_dropsubscription (Transact-SQL)。

如果此错误发生在未复制的数据库中,请执行 sp_removedbreplication (Transact-SQL),以确保此数据库中的对象不被标记为已复制


sp_removedbreplication的用法:
从数据库中删除所有复制对象。此存储过程在发布服务器上对发布数据库执行,或者在订阅服务器上对订阅数据库执行。在发布服务器上对发布数据库执行时,将尝试删除与分发服务器和订阅服务器上已发布的数据库相关的对象。

语法

sp_removedbreplication [ [ @dbname = ] 'dbname' ]
    [ , [ @type = ] type ]

参数

[ @dbname=] 'dbname'
数据库的名称。dbname 的数据类型为 sysname,默认值为 NULL。此参数值为 NULL 时,将使用当前数据库。

[ @type = ] type
要为其删除数据库对象的复制的类型。type 的数据类型为 nvarchar(5),可以是下列值之一。

 
tran
 删除事务复制发布对象。
 
merge
 删除合并复制发布对象。
 
both(默认值)
 删除所有复制发布对象。
 


备注

sp_removedbreplication 用于所有复制类型。

如果要还原的复制数据库没有需要还原的复制对象,sp_removedbreplication 将很有用。

sp_removedbreplication 不能用于标记为只读的数据库。

返回代码值

0(成功)或 1(失败)

权限

只有 sysadmin 固定服务器角色的成员才能执行 sp_removedbreplication。

试图执行:
DECLARE @subscriptionDB AS sysname
SET @subscriptionDB = N'AdventureWorksReplica'

-- Remove replication objects from a subscription database (if necessary).
USE master
EXEC sp_removedbreplication @subscriptionDB

提示错误为:
服务器: 消息 927, 14 级别、 状态 2, 行 1
无法打开数据库 ' msdb '。 是中间的还原。


查MSDN的结果:
症状
将对 msdb 系统数据库还原使数据库处于加载状态 (unrecovered) 并不应用差异中更改和日志备份如果下列条件为真: ? 从企业管理器 (SEM) 执行还原。 
? 还原操作是的组合:

a.  完整数据库备份和差异备份。 
b.  完整数据库备份和事务日志备份。 
c.  完整数据库备份和结合了差异和事务日志备份。 
 
注意 : 要在 SQL Server 2000, 执行的 msdb 数据库事务日志备份必须更改恢复模型来记录 " 容量 " 或 " 全部 "。 在 SQL Server 7.0, 必须 " trunc。 关闭 chkpt 登录 " 设置用于 msdb 数据库。


解决方案
要解决此问题, 获取最新服务包对于 Microsoft SQL Server 7.0。 有关其他信息, 请单击下列文章编号以查看 Microsoft 知识库中相应:
301511 (http://support.microsoft.com/kb/301511/EN-US/) INF: 如何获取最新 SQL Server 7.0 Service Pack


替代方法
要变通解决此问题, 从查询分析器还原 msdb 数据库通过 SEM. 代替 Transact-SQL RESTORE 命令


状态
Microsoft 已确认这是处本文列出 Microsoft 产品中问题。 早在 Microsoft SQL Server 7.0 Service Pack 4 中首先得到了解决此问题。
 

更多信息
从企业管理器, 还原 msdb 数据库时它报告以下错误信息:
无法打开数据库 ' msdb '。 它是中间的还原
无法插入备份或还原 msdb 数据库中历史记录 / 明细记录。 这可能表明 msdb 数据库有问题。 备份/还原操作仍成功。
以秒计 2.268 (4.392 MB / 秒) RESTOREDATABASE 成功处理 1217 页。
因为还原操作在 msdb restorehistory 表中插入项预计两初始行。 但是, 当还原 msdb , 还原操作无法将插入该表因为中间的还原 msdb 数据库是。 注意上述错误消息三行中报告还原处理一个备份文件, 即初始完整数据库备份。 当您单击 确定 返回到对话框中, 还原数据库 而且必须单击 取消 要从此对话框退出。 问题是差异更改或日志备份不适用于 msdb 和数据库, 是处于加载状态 (unrecovered)。 要恢复数据库可以在查询分析器中运行以下代码: RESTORE DATABASE msdb WITH RECOVERY
    
当从查询分析器, 还原 msdb 它报告错误 927 并为每个还原操作 3009 最后一个除外。 请记住所有下列还原操作, 除最后, 使用 WITHNORECOVERY 选项。 msdb 数据库但是, 是不处于加载状态。

执行RESTORE DATABASE msdb WITH RECOVERY后问题解决

只有注册用户登录后才能发表评论。