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

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写入这句话时应该怎么做?以上是在查询分析器中执行的。要断开连接吗?
...全文
57 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
zjcxc 元老 2003-12-17
  • 打赏
  • 举报
回复
如果程序中,一定要断开当前连接,并连接到master数据库执行上面的操作.
zjcxc 元老 2003-12-17
  • 打赏
  • 举报
回复
--查询分析器中用下面的方法恢复
/*
关闭用户打开的进程处理
*/
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'

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧