在我恢复备份的时候,总是提示我,数据库正在使用!
我用
restore database恢复!
能不能通过代码把数据库(MyServer)关闭掉?
怎么实现?
我用
restore database恢复!
能不能通过代码把数据库(MyServer)关闭掉?
怎么实现?
解决方案 »
- VISTA*在这个系统使用对文件(夹)改名, 移动,失败了,寻找原因。。。
- 使用Mediaplayer控件,为什么不能播放*.rm,*.rmvb等常用格式的媒体,而且发现播放时图像很卡,怎么解决?
- 一个组件开发,各位高手帮帮忙!
- indy 的idhttp代理的问题!
- 请问在Delphi中如何操作Excel控件中的一些高级属性?100分求教!
- 问题:HBitmap转为TJpeg
- 高分求救!!!QRREPORT中如何对每页的数据用SUMMARYBAND进行统计!最后再合计!!!急急
- 菜鸟的问题(请来指教)
- 可以把一个WORD文件导入程序中吗?
- 寻找,帮忙!
- 冤枉呀!!!
- 有关DriveComboBox使用的问题?
用另外一个adoconnection2连接数据库master,执行备份EXEC sp_addumpdevice 'disk', 'MyNwind_1',
DISK ='c:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\MyNwind_1.dat'-- Back up the full MyNwind database.
BACKUP DATABASE MyNwind TO MyNwind_1
你说的我看不大明白,可否解释一下!或者将备份恢复的完整代码贴出来?你的方法可以关闭掉名为myServer数据库吗?To gardenyang:
如果我停止了SQLServer,我的备份恢复如何执行?To whiteiger8:
组件.close不可行!如果我通过企业管理器或者查询分析器正在使用某数据库,该怎么办?
我知道如何备份和恢复!假如我在恢复数据库时,使用查询分析器或者企业管理器正在对该数据库进行操作,恢复时,会提示该数据库正在使用,我想通过代码把该库关闭掉,然后执行恢复数据库代码!我的问题是如何关闭该库(通过代码),可能沃问题表达的不够清楚!抱歉!
上面很多大哥说关闭数据控件( .close),呵呵,各位作过没有阿?不行的,SQLserver里面关闭数据控件后连接还是没断开,状态为sleeping,各位可以通过SP_Who验证一下,
还有大哥说use master,呵呵,这个我不敢说一定不行,但至少我用这种方法,程序中没有报错了,看上去也是在恢复(时间上),但是恢复完毕看了一下数据库,啥都没恢复出来,虽然没有报错(未出现什么数据库正在被占用的异常)了完美解决:
在恢复前先执行下面这段存储过程,注意这段存储过程要放在Master下!!
CREATE Procedure killspid (@dbname varchar(50))
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这段存储过程是关闭当前数据库的所有连接,执行完后就可以进行恢复操作了,
这种方法一点问题都没有!!!
try
Connection.Connected:=false;
Connection.close;
// 在master里建一个存储过程 killspid
SPConnection.open
SP.Close;
SP.ProcedureName:='killspid';
SP.Parameters.Refresh;
SP.Parameters.ParamByName('@dbname').Value:=你的数据库名称
SP.ExecProc;
with BakQuery do
begin
close;
SQl.Clear;
SQl.Append('USE master');
SQL.Append('RESTORE DATABASE 你的数据库名称 FROM '+备份点名称);
SQL.Append('WITH FILE = 1 ');
EXECSQL;
end;
Connection.Connected:=true;
SPConnection.Close;
MEssagedlg('恢复成功!!',mtinformation,[mbok],0); except
Connection.Connected:=true;
SPConnection.Connected:=false;
Messagedlg('恢复失败!!',mterror,[mbok],0);
end;
揭帖!