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

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

顺便说明一下,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',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 "'[email protected]+'" "'[email protected]+'" /y '
--SELECT @cmdSQL
EXEC MASTER.DBO.XP_CMDSHELL @cmdSQL

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

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

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

时间: 2024-08-17 19:18:41

SQLServer 多点及时备份技巧的相关文章

WinRAR备份技巧 - imsoft.cnblogs

RAR控制台日常备份策略 run.batrar a -ep1 -agYYYY{年}MM{月}DD{日} 备份 @list.txt-ep1是忽略原文件路径,rar包里是一堆文件,没有目录结构-ag附加命名规则@list.txt如下C:\Program Files\Opera\profile\notes.adrC:\Program Files\Opera\profile\opera6.adrC:\Program Files\Opera\profile\opera6.iniC:\Program Fil

好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面)

转载:http://www.cnblogs.com/lyhabc/p/3322437.html 挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面) 这个工具主要就是自动备份数据库,一键还原数据库,发送备份数据库日志报告到邮箱,自动压缩备份好的数据库 定期执行数据库备份任务,取代SSMS的维护计划,上传数据库备份文件到FTP服务器.其他网络硬盘等 软件有免费和付费两种模式,不过本人觉得免费版本的功能已经足够了 支持SQLSERVER版本:SQLSERVER200

Linux MySQL差异备份技巧

MSSQL差异备份使用技巧 15 Apr 2013 所谓的差异备份,就是只备份最近一次备份之后到此次备份之前所增加的那一部分数据.打个比方我第N次备份后数据库存放的内容是ABCD,然后我第N+1次 备份的时候使用差异备份,此时数据库的存放的内容是ABCDEFG.那么我差异备份的结果就是EFG,只备份增加量.都明白了我们就开始讲点有用的东西 啦,嘿嘿~~为什么要用差异备份呢?因为规模点的网站数据库一般有几十M甚至,那么你备份出来的数据就有几十M,然后你从WEB上打开个几十M内容文件的 话……估计要

SQLServer 理解copyonly备份操作

Alwayson在添加数据库的过程中如果同步首选项选择的是"完整",那么就会在主副本上执行copyonly的完整备份和日志备份在辅助副本上执行还原操作,也正是这个操作让我对copyonly有了新的理解.虽然以前也经常使用copyonly执行完整备份,但是之前对copyonly的理解存在一点误区.接下来详细说明copyonly的操作. 一.备份测试 CREATE DATABASE city;GOCREATE TABLE city.dbo.test(id INT);---执行完整备份BAC

SQLSERVER 设置自动备份数据库

1. SQLSERVER 简单的设置 计划任务 进行 备份数据库的操作. 首先需要打开 一些设置 执行 命令如下: sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Agent XPs', 1; GO RECONFIGURE GO 不执行的话 会报错如图示: 2. 需要将 sqlserver 的 agent的服务打开 最好是修改为自动模式. 让数据库能够自动进行 操作处理 不然 执行会报错 3. 建

mssql sqlserver 快速表备份和表还原的方法

摘要: 在sqlserver维护中,我们偶尔需要运行一些sql脚本对数据进行相关修改操作,在数据修改前我们必须对表数据进行备份来避免出现异常时,可以快速修复数据, 下文讲述sqlserver维护中,快速备份表和表还原的方法,如下所示: 实验环境:sql server 2008 R2 ---例:快速备份表 saleDetail ---使用select into 可以快速创建表并将表数据同时插入新建表中 select * into [saleDetail_20181012] from [saleDe

sqlserver数据库的备份与还原——完整备份与还原

sqlserver提供四种数据库备份方式 完整备份:备份整个数据库的所有内容包括书屋和日志 差异备份:只备份上次完整备份后更高的数据部分 事务日志备份:只备份事务日志里的内容 文件或文件组备份:只备份文件或文件组中的某些文件 在数据库完整备份期间,sqlserver做一下工作: 备份数据以及数据库中的所有表的结构和相应的文件结构 备份在备份期间发生的所有活动 备份在事务日志中未确认的事务 备份过程: 右击要备份的数据库--->任务--->备份 可以选择备份类型以及备份文件的存放位置. 还原过程

sqlserver日志的备份与还原

----------完整备份与还原----------                --完整备份数据库--backup database studb to disk='e:\stu.bak'backup log studb to disk='e:\stu_log.bak' use mastergo--还原数库库-- restore database studb from disk='e:\stu.bak' with replace,norecovery restore log studb fr

SQLSERVER异机备份

1 /* 2 作者:landv 3 功能:异机备份 4 开发时间:2016年7月2日 15:27:08 5 6 */ 7 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_backupdb]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) 8 drop procedure [dbo].[p_backupdb] 9 GO 10 create proc p_bac