[总结]Ms Sql 2000资料库备份方案
相关存储过程
/*-----------------------------------------------------------------------------------------------------------------------
名 称:收缩数据库
调用对像:
备注说明:
程序作者:
-------------------------------------------------------------------------------------------------------------------------
修改日期 修改内容
-------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------*/
CREATE PROCEDURE [dbo].[UP_ShrinkDb]
(
@DbName varchar(100) ----Database Name
)
AS
BEGIN
SET NOCOUNT ON
--DUMP TRANSACTION @DbName WITH NO_LOG
BACKUP LOG @DbName WITH NO_LOG
DBCC SHRINKDATABASE(@DbName)
SET NOCOUNT OFF
END
GO
/*-----------------------------------------------------------------------------------------------------------------------
名 称:备份资料库
调用对像:
备注说明:
程序作者:
-------------------------------------------------------------------------------------------------------------------------
--备份当前数据库 一星期做一次
EXEC UP_BackupDb
@DbName = 'Northwind',
@BakPath = 'C:\Northwind\',
@BakFileName = '\DBNAME\_\DATE\_Full.Bak',
@BakType = 'DB',
@AppendFile = 1
--差异备份当前数据库 一天做一次
EXEC UP_BackupDb
@DbName = 'Northwind',
@BakPath = 'C:\Northwind\',
@BakFileName = '\DBNAME\_\DATE\_Dif.Bak',
@BakType = 'DF',
@AppendFile = 1
--备份当前数据库日志 一个小时做一次
EXEC UP_BackupDb
@DbName = 'Northwind',
@BakPath = 'C:\Northwind\',
@BakFileName = '\DBNAME\_\DATE\_Log.Bak',
@BakType = 'Log',
@AppendFile = 1
-------------------------------------------------------------------------------------------------------------------------
修改日期 修改内容
-------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------*/
CREATE PROCEDURE [dbo].[UP_BackupDb]
(
@DbName SYSNAME='', --要备份的数据库名称,不指定则备份当前数据库
@BakPath NVARCHAR(260), --备份文件的存放目录
@BakFileName NVARCHAR(260)='', --备份文件名,文件名中可以用\DBNAME\代表数据库名,\DATE\代表日期,\TIME\代表时间
@BakType NVARCHAR(10)='DB', --备份类型:'DB'备份数据库,'DF' 差异备份,'LOG' 日志备份
@AppendFile BIT=1 --追加/覆盖备份文件
)
AS
BEGIN
SET NOCOUNT ON
DECLARE @Sql VARCHAR(8000)
IF ISNULL(@DbName,'')='' SET @DbName=DB_NAME()
IF ISNULL(@BakFileName,'')='' SET @BakFileName='\DBNAME\_\DATE\_\TIME\.BAK'
IF Right(@BakPath,1)<>'\' SET @BakPath=@BakPath+'\'
SET @BakPath = @BakPath + CAST(DATEPART(YEAR,GETDATE()) AS VARCHAR(10)) + '_' + CAST(DATEPART(Week,GETDATE()) AS VARCHAR(10))+'\'
DECLARE @Cmd VARCHAR(500)
SELECT @Cmd='MD '+ @BakPath
Exec master..xp_cmdshell @Cmd,no_output
SET @BakFileName=REPLACE(REPLACE(REPLACE(@BakFileName,'\DBNAME\',@DbName)
,'\DATE\',CONVERT(VARCHAR,GETDATE(),112))
,'\TIME\',REPLACE(CONVERT(VARCHAR,GETDATE(),108),':',''))
SET @Sql='BackUp ' + Case @BakType WHEN 'LOG' THEN 'Log ' Else 'DataBase ' End + @DbName +' To Disk=''' + @BakPath + @BakFileName + ''' With ' + Case @BakType WHEN 'DF' THEN 'DIFFERENTIAL,' Else '' End + Case @AppendFile WHEN 1 THEN 'NOINIT' Else 'INIT' END
SET @Sql = @Sql + ',Name=''' + Case @BakType WHEN 'DB' THEN 'DB Full Bak' WHEN 'DF' THEN 'DB Differential Bak' ELSE 'DB Log Bak' End + ''''
PRINT(@Sql)
EXEC(@Sql)
SET NOCOUNT OFF
END
GO
--做测试时新增数据的Sql declare @i int;set @i=1; while @i<=10000 begin INSERT INTO Test ( Name, CrUID, LastMoUID ) VALUES ( 'TEST','admin','admin' ) set @i=@i+1 end --显示行数、保留的磁盘空间以及当前数据库中的表所使用的磁盘空间,或显示由整个数据库保留和使用的磁盘空间。 exec sp_spaceused Test GO SELECT COUNT(*) FROM Test --30001 TRUNCATE TABLE Test
备份方案
/*
* 完整备份,因资料量大,建议一星期做一次,可以每星期天01:10开始处理
* 在做完整备份前建议先做好日志备份,再做数据库收缩,这样做完整备份会相对小
* 当然第一次做完整备份的时候可以不做日志备份,前面没有完整备份做这个也没有意义。
*
*
*/
EXEC UP_BackupDb
@DbName = 'Northwind',
@BakPath = 'C:\Northwind\',
@BakFileName = '\DBNAME\_\DATE\_\TIME\_Log.Bak',
@BakType = 'Log',
@AppendFile = 1
EXEC UP_ShrinkDb
@DbName = 'Northwind'
EXEC UP_BackupDb
@DbName = 'Northwind',
@BakPath = 'C:\Northwind\',
@BakFileName = '\DBNAME\_\DATE\_\TIME\_Full.Bak',
@BakType = 'DB',
@AppendFile = 1
/*
* 差异备份当前数据库,相对前一次完整备份的差异数据,建议一天做一次。
* 可以在每晚的23:10开始处理
* 在做差异备份前建议先做日志备份,再做数据库收缩。
* */
EXEC UP_BackupDb
@DbName = 'Northwind',
@BakPath = 'C:\Northwind\',
@BakFileName = '\DBNAME\_\DATE\_\TIME\_Log.Bak',
@BakType = 'Log',
@AppendFile = 1
EXEC UP_ShrinkDb
@DbName = 'Northwind'
EXEC UP_BackupDb
@DbName = 'Northwind',
@BakPath = 'C:\Northwind\',
@BakFileName = '\DBNAME\_\DATE\_\TIME\_Dif.Bak',
@BakType = 'DF',
@AppendFile = 1
/*
* 日志备份,建议一小时做一次。
* 每一个整点做一次日志备份,
* */
EXEC UP_BackupDb
@DbName = 'Northwind',
@BakPath = 'C:\Northwind\',
@BakFileName = '\DBNAME\_\DATE\_\TIME\_Log.Bak',
@BakType = 'Log',
@AppendFile = 1
如下图所示,点击相应菜单后会出现图二。
(图一)
(图二)
上图中很清楚的列出了数据库的备份数据,选择“数据库”还原方式时,很方便在这里恢复到还原点。
另外我们再说一说其它两种还原方式:
[从文件组或文件]方式还原:
文件和文件组备份只能恢复到其所属的数据库。您不能使用相同的结构和文件名创建一个新的空白数据库,然后尝试还原单个文件组备份 ;必须将它还原到现有的数据库,或在其他位置执行完整数据库还原。
[从设备]方式还原:
还原时需从完整备份再到最后一个差异备份,接著再还原日志备份,日志备份还原时需要从最早的到最晚的一个一个还原。
注意事项
1,不论是差异还是日志备份,前是都必需要有完整备份。
2,在截断日志前一定要做日志备份,同样遇到资料库问题时也需要先做日志备份。这样才可以保证恢复到故障点。
3,差异备份备份的是从上次完整备份后的差异数据。
4,日志备份备份的是自上次备份【无论是完整,差异,日志】后的日志
参考资料
http://www.cnblogs.com/Athrun/archive/2007/12/17/1003810.html
申明
非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!
博文欢迎转载,但请给出原文连接。