我正在用Asp.net做备份Sql server数据库,可以正常备份,但是当我恢复时,出现以下错误:
因为数据库正在使用,所以未能获得对数据库的排它访问权。 RESTORE DATABASE 操作异常终止。
我时这样做的
备份
string ConnStr = "server=localhost;user id=sa;pwd=12;database=liuzm";
SqlConnection conn = new SqlConnection(ConnStr);
string backuptext="BACKUP DATABASE liuzm TO DISK ='e:\\liuzm.bak' WITH INIT";
SqlCommand backupcmd= new SqlCommand(backuptext,conn);
conn.open();
backupcmd.ExecuteNonQuery();
恢复只是把
把命令改为:
RESTORE DATABASE liuzm FROM DISK ='e:\\liuzm.bak'
错误可能是未断开与当前数据库得连接,可是我不会;而且不知道怎么判断并断开其他用户和该数据库的联接!!!
请各位指点!!!
---------------------------------------------------------------
string ConnStr = "server=localhost;user id=sa;pwd=12;database=master";--修改这里
SqlConnection conn = new SqlConnection(ConnStr);
string backuptext="RESTORE DATABASE liuzm FROM DISK ='e:\\liuzm.bak' ";
SqlCommand backupcmd= new SqlCommand(backuptext,conn);
conn.open();
backupcmd.ExecuteNonQuery();
恢复只是把
把命令改为:
---------------------------------------------------------------
可能是别人再调用你这个数据库的数据,你应该停止其它用户的使用才好做备份的恢复工作!
---------------------------------------------------------------
1 under master
2 disconnect any other connections
---------------------------------------------------------------
还有一个方法:
自己建一个存储过程,通过调用存储过程来备份
---------------------------------------------------------------
用 OpenVMS(半知半解) 的方法 就断开了所有连接!
---------------------------------------------------------------
string ConnStr = "server=localhost;user id=sa;pwd=12;database=liuzm";
SqlConnection conn = new SqlConnection(ConnStr);
你这样打开连接,就已经在使用数据库liuzm,当然告诉你有用户在使用。所以要连接到 master 。
如果这个时候没有别人使用这个数据库,那么就可以恢复。
不知道有没有方法断开其他连接。
---------------------------------------------------------------
--执行以下存储过程,再备份:
drop proc killspid
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
--用法
use master
exec killspid 'liuzm'