急呀!为什么用exec sp_dboption 'FOE','single user','true'报错.

zfzhou 2004-08-24 04:56:12
错误信息:
Server: Msg 5070, Level 16, State 2, Line 1
Database state cannot be changed while other users are using the database 'FOE'
Server: Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE statement failed.
sp_dboption command failed.

更麻烦的是,我exec sp_dboption 'pubs','single user','true'也会出相同的错误,
...全文
582 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2004-08-24
  • 打赏
  • 举报
回复
--上面是设置数据库为单用户模式,下面是恢复多用户
alter database FOE set multi_user with ROLLBACK IMMEDIATE
zjcxc 2004-08-24
  • 打赏
  • 举报
回复
--用这样的语句就行了

alter database FOE set single_user with ROLLBACK IMMEDIATE
zfzhou 2004-08-24
  • 打赏
  • 举报
回复
是我所有的数据库都有这样的问题呀,不仅仅是FOE,还有PUBS都是这样的
zjmym 2004-08-24
  • 打赏
  • 举报
回复
重新启动服务
LoveSQL 2004-08-24
  • 打赏
  • 举报
回复
你可以把数据库先stop ,然后再start,再执行那段sql语句就没问题啦
netcoder 2004-08-24
  • 打赏
  • 举报
回复
--在查询分析器中,创建并调用下面的存储过程来断开用户连接

/*
断开所有用户打开的连接
*/
use master
go

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_killspid]
GO

create proc p_killspid
@dbname varchar(200) --要关闭进程的数据库名
as
declare @sql nvarchar(500)
declare @spid nvarchar(20)

declare #tb cursor for
select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)
open #tb
fetch next from #tb into @spid
while @@fetch_status=0
begin
exec('kill '+@spid)
fetch next from #tb into @spid
end
close #tb
deallocate #tb
go

--用法
exec p_killspid '数据库名'
子陌红尘 2004-08-24
  • 打赏
  • 举报
回复
先要断开其他用户与数据库之间的连接,然后用予 sysadmin、dbcreator 或 db_owner权限执行。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧