sp_renamedb执行问题

puzzy 2008-03-14 01:42:58
执行下面的语句:exec sp_renamedb 'test','测试更名'
报如下的错误,请问如何解决:先谢了,在线等
服务器: 消息 5030,级别 16,状态 2,行 1
未能排它地锁定数据库以执行该操作。
...全文
251 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
puzzy 2008-03-14
  • 打赏
  • 举报
回复
use master
--一定要进入MASTER库先
create proc killspid (@dbname varchar(20))
as
begin
declare @sql nvarchar(500)
declare @spid int
set @sql='declare getspid cursor for
select spid from sysprocesses where dbid=db_id('''+@dbname+''')'
exec (@sql)
open getspid
fetch next from getspid into @spid
while @@fetch_status < >-1
begin
exec('kill '+@spid)
fetch next from getspid into @spid
end
close getspid
deallocate getspid
end
--建过程killspid于MASTER库
--用法
use master
exec killspid '待修改数据库名'
--之后就可以使用sp_renamedb
EXEC sp_renamedb '待修改数据库名', '新数据库名'

--kikkspid进程功能是客户端对数据库的连接,重新改名必须是在单用户环境下进行。
--另一个方法就是拔掉网线,重新启动服务器再改名。而且当前数据库必须是master才行。
--此外,如果该库当前有人在用,那么一定要等那个人用完了,才能杀掉进程的。
--http://topic.csdn.net/t/20031214/11/2561743.html
puzzy 2008-03-14
  • 打赏
  • 举报
回复
找到解决方法了,谢谢楼上的。
chuifengde 2008-03-14
  • 打赏
  • 举报
回复
此情况下肯定是正在操作要改名的数据库
如果你确定有哪些连接打开了数据库,可以手工关掉连接,比如你正在设计一个表等。
如果你不能确定有哪些连接,可以用以下语句
alter database test set multi_user with rollback after 3
意思是有3秒的时间来回滚你对数据库所作的操作,并将数据库设置在多用户模式下,此时就要以sp_renamedb了

34,591

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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