执行下面的语句:exec sp_renamedb 'test','测试更名'
报如下的错误,请问如何解决:先谢了,在线等
服务器: 消息 5030,级别 16,状态 2,行 1
未能排它地锁定数据库以执行该操作。

解决方案 »

  1.   

    此情况下肯定是正在操作要改名的数据库
    如果你确定有哪些连接打开了数据库,可以手工关掉连接,比如你正在设计一个表等。
    如果你不能确定有哪些连接,可以用以下语句
    alter database test set multi_user with rollback after 3
    意思是有3秒的时间来回滚你对数据库所作的操作,并将数据库设置在多用户模式下,此时就要以sp_renamedb了
      

  2.   

    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