--------------------------------------------------------------
--数据库还原
--------------------------------------------------------------
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'restore_database_proc' AND type = 'P')
DROP PROCEDURE restore_database_proc
GO
CREATE PROCEDURE restore_database_proc
@database_bak_path varchar(1000)
AS
exec( 'RESTORE FILELISTONLY FROM DISK = N''' + @database_bak_path + '''')
GO
--DROP TABLE #tmp_file
create table #tmp_file
(
LogicalName nvarchar(128), --文件的逻辑名称
PhysicalName nvarchar(260), --文件的物理名称或操作系统名称
Type char(1), --数据文件 (D) 或日志文件 (L)
FileGroupName nvarchar(128), --包含文件的文件组名称
Size numeric(20,0), --当前大小(以字节为单位)
MaxSize numeric(20,0) --允许的最大大小(以字节为单位)
)
--数据库的名字
declare @database_name varchar(1000)
--数据库备份文件的路径
declare @database_bak_path varchar(1000)
--数据库和日志存放文件
declare @database_path varchar(1000)
--数据库文件完整路径
declare @database_mdf_path varchar(1000)
--数据库日志完整路径
declare @database_log_path varchar(1000)
--数据库原来文件名字
declare @database_mdf_oldname varchar(1000)
--数据库日志原来文件名
declare @database_log_oldname varchar(1000)
--------------------------------------------------------------
/*需要修改的参数*/
--------------------------------------------------------------
--还原的数据库名
set @database_name = 'demo_db'
--数据库备份文件的完整路径
set @database_bak_path = 'D:/hotop100.bak'
--数据库文件存放的路径
set @database_path = 'D:/data'
--------------------------------------------------------------
--------------------------------------------------------------
set @database_mdf_path = @database_path + '/' + @database_name + '.mdf'
set @database_log_path = @database_path + '/' + @database_name + '_Log.ldf'
INSERT INTO #tmp_file EXEC ('restore_database_proc N''' + @database_bak_path + '''')
--NSERT INTO #tmp_file RESTORE FILELISTONLY FROM DISK = N'' + @database_bak_path + ''
set @database_mdf_oldname = (select LogicalName from #tmp_file where Type = 'D')
set @database_log_oldname = (select LogicalName from #tmp_file where Type = 'L')
exec(
'
RESTORE DATABASE ' + @database_name +
'
FROM DISK = ''' + @database_bak_path + '''' +
'
WITH
MOVE ''' + @database_mdf_oldname + ''' TO ''' + @database_mdf_path + ''',' +
'
MOVE ''' + @database_log_oldname + ''' TO ''' + @database_log_path + ''''
)
DROP TABLE #tmp_file
--如果数据库是从7.0备份出来的话,可能还要执行下面的语句来updata一下
--这并不是必须的,但有系统说是会提高性能的.
--EXEC(
--'USE '+ @database_name +
--'
--EXEC sp_updatestats '
--)