简单的还原:
restore database eat from 备份设备名
restore database eat from disk='d:/备份dmp文件名'
以上两种方法用一种就可以了,注意默认的数据库不能是要还原的数据库
以下是一段在SQL Server中强制还原已存在的数据库的代码:
/*
--强制还原已存在的数据库,基本原理是Kill掉数据库的所有会话
--原贴在http://www.sqlservercentral.com/scripts/contributions/827.asp
--在此基础上添加了with move选项,如果不提供新文件物理位置,则默认为SQL Server
--安装目录
--调用;
--use master
--go
--exec master..spForceRestoreDB 'test2'
,'c:/test.bak'
,'c:/db/test_data.mdf'
,'c:/db/test_log.mdf'
--vivianfdlpw 2005.9 引用请保留此信息
*/
CREATE PROCEDURE spForceRestoreDB
@DatabaseName varchar(50), --要恢复的数据库名
@BackupFile varchar(255), --备份文件路径
@NewDataFilePath varchar(255)=null, --新物理文件位置
@NewLogFilePath varchar(255)=null --新日志文件位置
WITH ENCRYPTION
AS
BEGIN
SET NOCOUNT ON
DECLARE @exists int
IF NOT EXISTS( select name from master.dbo.sysdatabases WHERE name = @DatabaseName)
BEGIN
PRINT ' Database ' + @DatabaseName + ' not found '
PRINT ' Enter valid Datbase name'
RETURN
END
EXEC master.dbo.xp_fileexist @BackupFile , @exists OUTPUT
if (@exists = 0)
BEGIN
PRINT ' File ' + @BackupFile + ' Does bot Exist'
PRINT ' Database cannot be restored'
PRINT ' Enter the valid Backup File'
RETURN
END
-- Cursor for all the spids running against this database
DECLARE SysProc CURSOR LOCAL FORWARD_ONLY DYNAMIC READ_ONLY FOR
SELECT spid
FROM master.dbo.sysprocesses
WHERE dbid = ( SELECT dbid FROM master.dbo.sysdatabases
WHERE name = @DatabaseName)
DECLARE @SysProcId smallint
-- Opens the Cursor
OPEN SysProc
-- Fetch the Process ID into the cursor
FETCH NEXT FROM SysProc INTO @SysProcId
DECLARE @KillStatement char(30)
WHILE @@FETCH_STATUS = 0
BEGIN
SET @KillStatement = 'KILL ' + CAST(@SysProcId AS char(30))
-- Kills the processes running against the database
EXEC (@KillStatement)
FETCH NEXT FROM SysProc INTO @SysProcId
END
WAITFOR DELAY '000:00:01'
create table #
(LogicalName varchar(255),
PhysicalName varchar(255),
Type varchar(20),
FileGroupName varchar(255),
Size varchar(20),
MaxSize varchar(20) )
declare @cmd varchar(200)
,@DataLogicName varchar(20)
,@logLogicName varchar(20)
select @cmd = 'RESTORE FILELISTONLY FROM disk = '''+ @BackupFile + ''''
insert # exec(@cmd)
select @DataLogicName=LogicalName from # where Type='D'
select @logLogicName=LogicalName from # where Type='L'
drop table #
if @NewDataFilePath is null
begin
select @NewDataFilePath=replace(filename,'master.mdf','') from master..sysdatabases
where dbid=db_id('master')
select @NewDataFilePath=@NewDataFilePath+@DatabaseName+'_Data.mdf'
end
if @NewLogFilePath is null
begin
select @NewLogFilePath=replace(filename,'master.mdf','') from master..sysdatabases
where dbid=db_id('master')
select @NewLogFilePath=@NewLogFilePath+@DatabaseName+'_Log.ldf'
end
DECLARE @strSql varchar(2000)
SET @strSql = 'RESTORE DATABASE '
SET @strSql = @strSql + QUOTENAME(@DatabaseName)
SET @strSql = @strSql + 'FROM DISK = N'+ '''' + @BackupFile + ''''
SET @strSql = @strSql + ' WITH FILE = 1, NOUNLOAD , STATS = 10, RECOVERY , REPLACE'
SET @strSql = @strSql + ',Move '''+@DataLogicName+''' to '''+@NewDataFilePath+''''
SET @strSql = @strSql + ',Move '''+@logLogicName+''' to '''+@NewLogFilePath+''''
--PRINT @strSql
-- Restore the Database
EXEC (@strSql)
SET NOCOUNT OFF
END
GO