SQLServer 多点及时备份技巧

SQLServer 多点及时备份技巧,第1张

概述为了保证数据库的安全性,我们都会规划数据库的容灾策略,包括本地备份、异地备份、raid,或者使用高可用性(如 日志传送、镜像、复制等)进行异地容灾。由于 SqlServer 数据库的备份只有一个备份策略(如 完整-差异-日志),对某个数据库中,只创建一个完整的策略,不要创建多个,否则备份链对不上,备份各在一方。对于备份,一般使用 完整备份+差异备份+日志备份,或者 完整备份+差异备份+日志传送,但

为了保证数据库的安全性,我们都会规划数据库的容灾策略,包括本地备份、异地备份、raID,或者使用高可用性(如 日志传送、镜像、复制等)进行异地容灾。由于 sqlServer 数据库的备份只有一个备份策略(如 完整-差异-日志),对某个数据库中,只创建一个完整的策略,不要创建多个,否则备份链对不上,备份各在一方。对于备份,一般使用 完整备份+差异备份+日志备份,或者 完整备份+差异备份+日志传送,但是备份只有一个文件。为了在异地也保存有相同的备份,sqlServer 有几种参数可设置多地保存,如 MIRROR TO ,copY_ONLY ,但只对完整备份有效。所有其他情况下,都使用 windows 命令拷贝到其他地方做冗余存储。


以前也用过一种方法,拷贝N天内的数据到其他地方(参考 forfiles 和 xcopy 在windows下拷贝N天内更改过的文件),但是使用windows 作业的方法拷贝,并不及时。这里就介绍一种方法,及时异地存储到网络路径中,也就是数据库备份完成后,立即把文件拷贝到异地中。



在一个文件夹中,有众多的备份文件,怎么筛选出刚刚备份出来的文件呢? 

用 windows 命令批处理应该可以完成,但是出来会太麻烦。那就在 sqlServer 寻找吧!~

sqlServer 中每个备份都会有记录,备份的名称、路径、时间 等待都可以从备份历史中找出。


以master 完整备份为例:

SELECT top(1) media_set_ID,nameFROM msdb.dbo.backupset WHERE database_name = 'master' and type = 'D'ORDER BY backup_finish_date DESCSELECT physical_device_name FROM msdb.dbo.backupmediafamily WHERE media_set_ID = 2048



这些备份是维护计划自动备份的,每个备份集中只有一个备份文件,这就可以唯一确定一个文件了!~

顺便说明一下,backupset 中的 name 有时与实际的物理文件名称不匹配,所以不用该名字。但是 backupset 中有时间信息,就按备份完成时间排序取第一条最新的。

注:backupset 中的字段 type 表示不同的备份类型,D = 数据库; I = 差异数据库 ;L = 日志 。(参考backupset)


因此,就可以确定 master 最新的完整备份文件了!

SELECT physical_device_name FROM msdb.dbo.backupmediafamily where media_set_ID =(	SELECT top(1) media_set_ID 	FROM msdb.dbo.backupset 	WHERE database_name = 'master' and type = 'D'	ORDER BY backup_finish_date DESC)

为了能在 sqlServer 中更方便管理,文件的拷贝也在数据库中执行,需要启用系统命令  xp_cmdshell

exec sp_configure 'show advanced options',1reconfigureexec sp_configure 'xp_cmdshell',1reconfigure

对于异地包括,需要建立网络映射:

exec master.dbo.xp_cmdshell 'net use \IP\yourPath "password" /user:IP\user'


最终的拷贝脚本如下,在sqlServer使用 xp_cmdshell  进行拷贝:

DECLARE @oldpath NVARCHAR(200)DECLARE @NewPath NVARCHAR(100)DECLARE @cmdsql NVARCHAR(300)SET @NewPath = N'\192.168.1.111\master\'SELECT @oldpath = physical_device_name FROM msdb.dbo.backupmediafamily WHERE media_set_ID =(	SELECT top(1) media_set_ID 	FROM msdb.dbo.backupset 	WHERE database_name = 'master' and type = 'D'	ORDER BY backup_finish_date DESC)SET @cmdsql = N'xcopy "'+@oldpath+'" "'+@NewPath+'" /y '--SELECT @cmdsqlEXEC MASTER.DBO.XP_CmdsHELL @cmdsql

命令完成了,该放在哪里执行呢? 当然是数据库备份作业的下一步了!~ 哈哈 O(∩_∩)O 自言自语~~


打开维护计划,选择控制流“ 执行T-SQL语句”的任务,将上面的语句粘贴到里面中,作为系统数据库备份后的下一步,完成!~



执行看看!~这样备份就比较快了!~(同样试试其他数据库的 完整备份+差异备份+日志备份

总结

以上是内存溢出为你收集整理的SQLServer 多点及时备份技巧全部内容,希望文章能够帮你解决SQLServer 多点及时备份技巧所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1164969.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存