RESTORE DATABASE 操作异常终止(转)

标签:
杂谈 |
分类: .Net |
在用Asp.net对备份的数据库文件进行还原的时候,有时候会出现下面的错误异常:
[因为数据库正在使用,所以未能获得对数据库的排它访问权。 RESTORE DATABASE 操作异常终止。已将数据库上下文改为 'master'。]
这个时候,自由等待其他进程释放对应权限后,才可还原成功!有没有解决办法呢?我参照【Java】对这个问题的解决方法,做了更新,问题解决。
[SQL代码]
[C#代码]
[因为数据库正在使用,所以未能获得对数据库的排它访问权。 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
create
[C#代码]
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE 操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" /> /// <summary>
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
/// 恢复数据库,可选择是否可以强制还原(即在其他人在用的时候,依然可以还原)
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
/// </summary>
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
/// <param
name="databasename">待还原的数据库名称</param>
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
/// <param
name="databasefile">带还原的备份文件的完全路径</param>
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
/// <param
name="errormessage">恢复数据库失败的信息</param>
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
/// <param
name="forceRestore">是否强制还原(恢复),如果为TRUE,则exec
killspid '数据库名' 结束此数据库的进程,这样才能还原数据库 </param>
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
/// <returns></returns>
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
public bool
RestoreDataBase(string databasename, string databasefile, ref
string errormessage,bool forceRestore)
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
{
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
bool success = true;
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
string path = databasefile;
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
string dbname = databasename;
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
string restoreSql = " use master;";
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
if (forceRestore) //如果强制回复
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
restoreSql += string.Format(" use master exec killspid '{0}';",databasename);
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
restoreSql += " restore database @dbname from disk = @path;";
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
SqlCommand myCommand = new SqlCommand(restoreSql,
conn);
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
myCommand.Parameters. Add("@dbname", SqlDbType.Char);
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
myCommand.Parameters ["@dbname"].Value = dbname;
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
myCommand.Parameters. Add("@path", SqlDbType.Char);
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
myCommand.Parameters ["@path"].Value = path;
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
try
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
{
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
myCommand.Connection. Open();
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
myCommand.ExecuteNonQuery();
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
}
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
catch (Exception ex)
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
{
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
errormessage = ex.Message;
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
success = false;
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
}
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
finally
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
{
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
myCommand.Connection. Close();
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
}
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
return success;
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE操作异常终止(转)" TITLE="RESTORE DATABASE 操作异常终止(转)" />
}
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE
http://www.cnblogs.com/Images/OutliningIndicators/None.gifDATABASE