您的位置:首页 > 编程语言 > ASP

ASP.NET恢复SqlServer数据库还原失败

2010-03-02 13:52 381 查看
在用Asp.net对备份的数据库文件进行还原的时候,有时候会出现下面的错误异常:
[因为数据库正在使用,所以未能获得对数据库的排它访问权。 RESTORE DATABASE 操作异常终止。已将数据库上下文改为 'master'。]
这个时候,自由等待其他进程释放对应权限后,才可还原成功!有没有解决办法呢?我参照【Java】对这个问题的解决方法,做了更新,问题解决。
[SQL代码]

--还原数据库时数据库正在使用导致数据库无会还原,此存储过存在msater数据库下创建。exec killspid 'dbname' 结束此数据库的进程,这样才能还原数据库
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

[C#代码]


/// <summary>


/// 恢复数据库,可选择是否可以强制还原(即在其他人在用的时候,依然可以还原)


/// </summary>


/// <param name="databasename">待还原的数据库名称</param>


/// <param name="databasefile">带还原的备份文件的完全路径</param>


/// <param name="errormessage">恢复数据库失败的信息</param>


/// <param name="forceRestore">是否强制还原(恢复),如果为TRUE,则exec killspid '数据库名' 结束此数据库的进程,这样才能还原数据库</param>


/// <returns></returns>


public bool RestoreDataBase(string databasename, string databasefile, ref string errormessage,bool forceRestore)


{


bool success = true;


string path = databasefile;


string dbname = databasename;




string restoreSql = "use master;";




if (forceRestore)//如果强制回复


restoreSql += string.Format("use master exec killspid '{0}';",databasename);




restoreSql += "restore database @dbname from disk = @path;";




SqlCommand myCommand = new SqlCommand(restoreSql, conn);




myCommand.Parameters.Add("@dbname", SqlDbType.Char);


myCommand.Parameters["@dbname"].Value = dbname;


myCommand.Parameters.Add("@path", SqlDbType.Char);


myCommand.Parameters["@path"].Value = path;




try


{


myCommand.Connection.Open();


myCommand.ExecuteNonQuery();


}


catch (Exception ex)


{


errormessage = ex.Message;


success = false;


}


finally


{


myCommand.Connection.Close();


}




return success;


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: