sql server 2005 还原 备份 数据库
2011-09-16 09:24
946 查看
--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 = 10
GO
--消息 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 步骤。
备份数据jj_flgl 到.bak文件。然后利用此bak文件恢复一个新的数据库jj_flgl.
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
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 = 10
GO
--消息 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 步骤。
备份数据jj_flgl 到.bak文件。然后利用此bak文件恢复一个新的数据库jj_flgl.
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
相关文章推荐
- SQL Server 2005数据备份与还原
- 把一个用sql server 2005内置加密方法加密数据的DB从一台电脑备份后,还原到另外一台电脑上,出现的问题的处理办法
- SQL Server 2005还原数据库时出现“备份集中的数据库备份与现有的数据库不同”解决方法 (转载)
- SQL Server 2008数据库备份还原和数据恢复
- SQL Server 2008数据备份与还原(原理篇)
- SQL SERVER 2005还原差异备份、日志备份 2012-03-29 11:43
- sql server 2005数据库的备份及还原
- sql server 2005还原数据到sql server 2000
- 用Sql Server 2000的数据库备份还原到Sql Server 2005中的数据库
- SQL Server 2008数据备份与还原(原理篇)
- [Database] SqlServer: Sql Server 2005 数据库备份还原后出现“受限制用户”问题的解决
- SQL server 2005的备份与还原
- SQL Server 2005 安装,备份,还原,开通tcp/ip访问等问题记录。
- SQL Server 大数据搬迁之文件组备份还原实战
- 【Delphi学习】关于SQL Server 2008的数据备份及还原
- sql server 2000数据库备份文件还原成sql server 2005 /2008
- 在MSDB中清除SQL Server 还原备份历史数据(Purging MSDB Backup and Restore History from SQL Server)
- SQL SERVER 2005 使用命令备份数据库的方法(还原)
- SQL Server 2005 清除备份 还原历史记录
- Sql Server 2005 数据库备份还原后出现“受限制用户”问题的解决