当前位置: 代码迷 >> Sql Server >> 关于SQL热备有关问题
  详细解决方案

关于SQL热备有关问题

热度:67   发布时间:2016-04-27 11:05:39.0
关于SQL热备问题
求SQL不同版本兼容的批处理备份程序!后缀.BAT那种...用于每天执行的..
需求是:第1天,第2天备份的数据就生成多少月多少号的数据库备份文件...
第3天生成时就把第1天的数据删除,第4天生成时就把第2天删除第5天生成时就把第3天删除,第6天生成时就把第4天数据删除....依此下去....

------解决方案--------------------
你去改一下吧,这是我放到服务器上的脚本备份。删除旧备份可以使用维护计划来做,做完你生成脚本就可以了,下面的脚本不能直接用。参数要改
SQL code
/*注意:由于用GUI备份会导致备份链中断,而作业无法实现“仅复制备份”,所以使用脚本备份create by huangzj 20120510*/--定义备份时间,精确到秒DECLARE @date NVARCHAR(64)SELECT  @date = SUBSTRING(CONVERT(VARCHAR(20), GETDATE(), 121), 1, 4) + '_'        + SUBSTRING(CONVERT(VARCHAR(20), GETDATE(), 121), 6, 2) + '_'        + SUBSTRING(CONVERT(VARCHAR(20), GETDATE(), 121), 9, 2) + '_'        + CONVERT(CHAR(2), DATEPART(hh, GETDATE()))        + CONVERT(CHAR(2), DATEPART(mi, GETDATE()))        + CONVERT(CHAR(2), DATEPART(ss, GETDATE()))--定义要备份的数据库名DECLARE @db NVARCHAR(20)SET @db = '' + 'HK_ERP_BaTa' + ''--定义备份文件的全名DECLARE @bakname NVARCHAR(128)SELECT  @bakname = @db + '_' + @date--定义备份存放路径DECLARE @disk NVARCHAR(256)SELECT  @disk = N'DataBak' + @bakname + '.bak'--定义备份描述DECLARE @name NVARCHAR(128)SELECT  @name = @db + '-完整 数据库 备份'--定义错误信息DECLARE @error NVARCHAR(128)SELECT  @error = '验证失败。找不到数据库“' + @db + '”的备份信息。'BACKUP DATABASE @db TO  DISK = @disk WITH  COPY_ONLY, NOFORMAT, NOINIT,  NAME [email protected], SKIP, NOREWIND, NOUNLOAD,  STATS = 10, CHECKSUM ;DECLARE @backupSetId AS INTSELECT  @backupSetId = positionFROM    msdb..backupsetWHERE   database_name = @db        AND backup_set_id = ( SELECT    MAX(backup_set_id)                              FROM      msdb..backupset                              WHERE     database_name = @db                            )IF @backupSetId IS NULL     BEGIN        RAISERROR(@error, 16, 1)    ENDRESTORE VERIFYONLY FROM  DISK = @disk WITH  FILE = @backupSetId,  NOUNLOAD,  NOREWINDGO
------解决方案--------------------
回复真快,这个是我为公司编写的,但是由于只在2008R2上用,所以不一定2000能用,但是2000以上基本上没问题。只提供一个思路给你。其实改动一下就可以了。搞这个东西当初是有原因的,因为我有好几个需要导致备份做几次,如果不使用copy_only,会打算了主备份计划的日志链(日志备份如果日志链打断了,那就没用了)。但是【维护计划】那里没有【仅复制备份】。所以特意编程处理,同时这里免去了手动指定备份文件的名称,已经自动生成了日期后缀名。

说明一下,由于2008以前不存在copy_only,compress选项,所以如果你要用在2008之前,只需要把这两个选项去掉就可以了
------解决方案--------------------
bat直接调用SQLServer多不安全,你把东西存成sql文件,bat调用就行啦。而且我不建议用bat来直接弄,因为bat太容易看到内容了,而且基本上没啥安全性可言
------解决方案--------------------
SQL code
-- 建文件backup.sql, 内容:backup database [数据库名] to disk='[备份文件名]' with format,init-- 建批处理文件auto_backup.bat, 内容:sqlcmd -S [服务器名] -U sa -P [密码] -i [backup.sql]-- 建windows计划任务, 定期调用执行auto_backup.bat
  相关解决方案