设为首页 加入收藏

TOP

SQLServer多点及时备份技巧
2015-11-21 01:49:40 来源: 作者: 【 】 浏览:0
Tags: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 ,name
FROM msdb.dbo.backupset 
WHERE database_name = 'master' and type = 'D'
ORDER BY backup_finish_date DESC


SELECT physical_device_name 
FROM msdb.dbo.backupmediafamily 
WHERE media_set_id = 2048
\

<??http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+1eLQqbG4t93Kx86su6S8xruu19S2r7G4t921xKOsw7+49rG4t928r9bQ1rvT0NK7uPaxuLfdzsS8/qOs1eK+zb/J0tTOqNK7yLe2qNK7uPbOxLz+wcujoX48L3A+CjxwPsuzsePLtcP30rvPwqOsYmFja3Vwc2V0INbQtcQgbmFtZSDT0Mqx0+vKtbzKtcTO78DtzsS8/sP7s8ayu8alxeSjrMv50tSyu9PDuMPD+9fWoaO1q8rHIGJhY2t1cHNldCDW0NPQyrG85NDFz6KjrL7NsLSxuLfdzeqzycqxvOTFxdDyyKG12tK7zPXX7tDCtcShozwvcD4KPHA+16KjumJhY2t1cHNldCDW0LXE19a2ziB0eXBlILHtyr6yu82stcSxuLfdwODQzaOsRCA9IMr9vt2/4jsgSSA9ILLu0uzK/b7dv+IgO0wgPSDI1da+IKGjo6iyzr+8YmFja3Vwc2V0o6k8L3A+Cgo8cD7S8rTLo6y+zb/J0tTIt7aoIG1hc3RlciDX7tDCtcTN6tX7sbi33c7EvP7By6OhPC9wPgo8cD48L3A+CjxwcmUgY2xhc3M9"brush:sql;">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',1
reconfigure

exec sp_configure 'xp_cmdshell',1
reconfigure

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

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 @cmdSQL
EXEC MASTER.DBO.XP_CMDSHELL @cmdSQL

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

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


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

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇SQLserver触发器、存储过程操作远.. 下一篇PL/SQL联接数据库配置

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: