对于我们这些经常要备份和还原数据库的人来说,MSSQL 2000的企业管理器运行的速度真是慢,而我们日常都使用查询分析器编写脚本,来回撤换很是不方便(MSSQL 2005就不一样了,两个加在一起,多爽啊),闲来编写了个备份和还原数据库的脚本,那就不用再打开企业管理器了.
--------------------------------------------------------------
--数据库还原
--------------------------------------------------------------
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(100)
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 = 'F:/data_bak/demo_db.bak'
--数据库文件存放的路径
set @database_path = 'f:/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 + '''')
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 + ''''
)
--如果数据库是从7.0备份出来的话,可能还要执行下面的语句来updata一下
--这并不是必须的,但有系统说是会提高性能的,试试无妨啊~ ^O^
--EXEC(
--'USE '+ @database_name +
--'
--EXEC sp_updatestats '
--)
--------------------------------------------------------------
--备份数据库
--------------------------------------------------------------
declare @database_name varchar(1000)
declare @backup_file_name varchar(1000)
declare @backup_path varchar(1000)
declare @system_date varchar(1000)
set @system_date = substring(CONVERT (varchar(1000),getdate(),21) ,1,10)
print @system_date
-------------------------------------------------------------
/*要自行修改的部分*/
/*备份文件名生成的格式为“数据库名”+“日期”*/
--要备份的数据库名
set @database_name = 'demo_db'
--备份文件的路径
set @backup_path = 'F:/data_bak'
-------------------------------------------------------------
--设置备份文件的名字
set @backup_file_name = @database_name + '(' +@system_date + ').BAK'
set @backup_path = @backup_path + '/' + @backup_file_name
create table #tmp_backup_info
(
database_name varchar(1000),
backup_path varchar(1000)
)
insert into #tmp_backup_info
values(@database_name,@backup_path)
EXEC(
' USE MASTER'+
' EXEC sp_addumpdevice ''disk'', ''temp_backup_file'',' +
' ''' + @backup_path + '''' +
' BACKUP DATABASE ' + @database_name + ' TO temp_backup_file'
)
DROP TABLE #tmp_backup_info