--1、
RESTORE DATABASE [JJ_FLGL] FILE = N'MBS_Data', FILE = N'MBS_Log' FROM DISK = N'D:\FLGL_backup_201109160200.bak'
WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10GO
--消息 3219,级别 16,状态 3,第 1 行
--不能选择文件或文件组 "MBS_Log" 用于此操作。
--消息 3013,级别 16,状态 1,第 1 行
--RESTORE DATABASE 正在异常终止。
--2、
USE master
RESTORE DATABASE [JJ_FLGL]
FROM DISK = 'D:\FLGL_backup_201109160200.bak'
WITH MOVE 'JJ_FLGL' TO 'G:\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\JJ_FLGL.mdf',
MOVE 'JJ_FLGL_Log' TO 'G:\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\JJ_FLGL_log.ldf',
STATS = 10, REPLACE
GO
--消息 3234,级别 16,状态 2,第 2 行
--逻辑文件 'JJ_FLGL' 不是数据库 'JJ_FLGL' 的一部分。请使用 RESTORE FILELISTONLY 来列出逻辑文件名。
--消息 3013,级别 16,状态 1,第 2 行
--RESTORE DATABASE 正在异常终止。
--3、
select * from sysfiles
--1 1 3095336 -1 10 1048578 0 MBS_Data G:\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\JJ_FLGL.mdf
--2 0 189088 -1 10 1048642 0 MBS_Log G:\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\JJ_FLGL_log.ldf
--4、
USE master
RESTORE DATABASE [JJ_FLGL]
FROM DISK = 'D:\FLGL_backup_201109160200.bak'
WITH MOVE 'MBS_Data' TO 'G:\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\JJ_FLGL.mdf',
MOVE 'MBS_Log' TO 'G:\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\JJ_FLGL_log.ldf',
STATS = 10, REPLACE
GO
--消息 3101,级别 16,状态 1,第 3 行
--因为数据库正在使用,所以无法获得对数据库的独占访问权。
--消息 3013,级别 16,状态 1,第 3 行
--RESTORE DATABASE 正在异常终止。
--5、转自网上
在还原数据库时,有时会出现“因为数据库正在使用,所以无法获得对数据库的独占访问权”的错误,这时就需要在还原数据库前先杀死正在使用数据库的线程。
以还原blog数据库为例,在还原数据库前执行下面语句即可:
由于该解决方案用到了系统表中的sysprocesses ,若要访问 sysprocesses,您必须位于 master 数据库上下文中
---需要定位到master 数据库
declare @dbname varchar(20)
set @dbname='jj_flgl' --这里给变量赋的值是要进行还原的数据库的名称
declare @sql nvarchar(500)
declare @spid int --SPID sqlserver进程ID int
set @sql='declare getspid cursor for
select spid from sysprocesses where dbid=db_id('''+@dbname+''')'--当前正由进程使用的数据库id int
exec (@sql)
open getspid
fetch next from getspid into @spid
while @@fetch_status<>-1 --如果FETCH 语句没有执行失败或此行不在结果集中。
begin
exec('kill '+@spid) --终止正常连接
fetch next from getspid into @spid
end
close getspid
deallocate getspid
--6、
执行 4 步骤。
USE master
BACKUP DATABASE jj_flgl
TO DISK = 'D:\FLGL_backup_201109170200.bak'
RESTORE FILELISTONLY
FROM DISK = 'D:\FLGL_backup_201109170200.bak'
RESTORE DATABASE jj_flgl
FROM DISK = 'D:\FLGL_backup_201109170200.bak'
WITH MOVE 'MBS_Data' TO 'G:\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\JJ_FLGL.mdf',
MOVE 'MBS_Log' TO 'G:\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\JJ_FLGL_log.ldf'
GO