导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

一个关于数据还原的问题,请帮帮我这个帅哥吧

georgehappy 2003-12-17 03:09:20
use master
RESTORE DATABASE ddd FROM DISK = 'D:\Microsoft SQL Server\MSSQL\BACKUP\MyBak1.dat'

执行时报错:
服务器: 消息 3101,级别 16,状态 2,行 2
因为数据库正在使用,所以未能获得对数据库的排它访问权。
服务器: 消息 3013,级别 16,状态 1,行 2
RESTORE DATABASE 操作异常终止。
我前台用delphi中的Adoquery写入这句话时应该怎么做?以上是在查询分析器中执行的。要断开连接吗?
...全文
7 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
hothoke 2003-12-17
基于你这种情况,我想是你有客户端软件连在数据库上,请关闭这些客户端软件,接着禁用网卡,防止他人在你操作时连接数据库,然后恢复数据库,完成后再开启网卡。这样万无一失哦。
回复
w_rose 2003-12-17
“杀进程”在传统的数据库系统中很常见,因为如果一个终端意外地离线了,数据库不知道自动终端与用户的连线,白白消耗了服务器联结资源。在SQL server中,这个现象大概不会发生,否则就是“确实”有客户端正在操作数据库。
回复
w_rose 2003-12-17
别人正在处理数据,您就restore数据库?够胆大的!
回复
gmlxf 2003-12-17
重新启动服务器。
use master
RESTORE DATABASE ddd FROM DISK = 'D:\Microsoft SQL Server\MSSQL\BACKUP\MyBak1.dat'

或者隔几分钟。

或者用上面提供的p_killspid
回复
如果程序中,一定要断开当前连接,并连接到master数据库执行上面的操作.
回复
--查询分析器中用下面的方法恢复
/*
关闭用户打开的进程处理
*/
use master
go

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_killspid]
GO

create proc p_killspid
@dbname varchar(200) --要关闭进程的数据库名
as
declare @sql nvarchar(500)
declare @spid nvarchar(20)

declare #tb cursor for
select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)
open #tb
fetch next from #tb into @spid
while @@fetch_status=0
begin
exec('kill '+@spid)
fetch next from #tb into @spid
end
close #tb
deallocate #tb
go

--用法
exec p_killspid 'ddd'
go

RESTORE DATABASE ddd FROM DISK = 'D:\Microsoft SQL Server\MSSQL\BACKUP\MyBak1.dat'
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告