为了保证数据库的安全性,我们都会规划数据库的容灾策略,包含本地备份、异地备份、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 "'+@OldPath+'" "'+@NewPath+'" /y '
--SELECT @cmdSQL
EXEC MASTER.DBO.XP_CMDSHELL @cmdSQL

命令完毕了。该放在哪里运行呢? 当然是数据库备份作业的下一步了!

~ 哈哈 O(∩_∩)O 自言自语~~

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

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

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

  1. WinRAR备份技巧 - imsoft.cnblogs

    RAR控制台日常备份策略 run.batrar a -ep1 -agYYYY{年}MM{月}DD{日} 备份 @list.txt-ep1是忽略原文件路径,rar包里是一堆文件,没有目录结构-ag附加命 ...

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

    转载:http://www.cnblogs.com/lyhabc/p/3322437.html 挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面) 这个工具主要就是 ...

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

    原文:挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面) 挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面) 这个工具主要就是自 ...

  4. SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面)

    挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面) 这个工具主要就是自动备份数据库,一键还原数据库,发送备份数据库日志报告到邮箱,自动压缩备份好的数据库 定期执行数 ...

  5. SQLSERVER SQL性能优化技巧

    这篇文章主要介绍了SQLSERVER SQL性能优化技巧,需要的朋友可以参考下 1.选择最有效率的表名顺序(只在基于规则的优化器中有效)       SQLSERVER的解析器按照从右到左的顺序处理F ...

  6. Linux MySQL差异备份技巧

    MSSQL差异备份使用技巧 15 Apr 2013 所谓的差异备份,就是只备份最近一次备份之后到此次备份之前所增加的那一部分数据.打个比方我第N次备份后数据库存放的内容是ABCD,然后我第N+1次 备 ...

  7. SQLServer 理解copyonly备份操作

    标签:MSSQL/日志截断 概述 Alwayson在添加数据库的过程中如果同步首选项选择的是“完整”,那么就会在主副本上执行copyonly的完整备份和日志备份在辅助副本上执行还原操作,也正是这个操作 ...

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

    摘要: 在sqlserver维护中,我们偶尔需要运行一些sql脚本对数据进行相关修改操作,在数据修改前我们必须对表数据进行备份来避免出现异常时,可以快速修复数据, 下文讲述sqlserver维护中,快 ...

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

    sqlserver提供四种数据库备份方式 完整备份:备份整个数据库的所有内容包括书屋和日志 差异备份:只备份上次完整备份后更高的数据部分 事务日志备份:只备份事务日志里的内容 文件或文件组备份:只备份 ...

随机推荐

  1. go之数据类型转换和类型断言

    一.类型转换 1.1 简单类型转换 格式 valueOfTypeB = typeB(valueOfTypeA) int 转 float64 package main import "fmt& ...

  2. java bean转Map

    /** * @author xxxxxxxxxxx * @param object * 待转化类 * @param format自定义转化类型 * @return Map<String,Stri ...

  3. HTML5 postMessage 和 localStorage 实现窗口间通信

    LocalStorage(不能跨域) 基本思想:通过localStorage的标准事件storage来实现跨页面通信,即页面A通过写入特定数据触发页面B的storage事件,页面B响应之后再写入数据通 ...

  4. (转)JavaScript深入之从原型到原型链

    构造函数创建对象 我们先使用构造函数创建一个对象: function Person() { } var person = new Person(); person.name = 'Kevin'; co ...

  5. Leetcode0092 & 0206--Reverse Linked List 链表逆转

    [转载请注明]http://www.cnblogs.com/igoslly/p/8670038.html 链表逆序在链表题目中还是较为常见的,这里将Leetcode中的两道题放在一起,分别是 0092 ...

  6. ★Java语法(六)——————————分支语句

    1. if 语句   格式用法: if(布尔表达式) { 语句: } 2. if……else  语句 格式用法: if(表达式) { 语句1: } else { 语句2: } 3.if……else i ...

  7. hibernate_05_单表操作_对象类型

    本篇使用hibernate输出一个对象(图片) 先写一个java类 package com.imooc.hibernate; import java.sql.Blob; import java.uti ...

  8. System.Web.Caching.Cache类 Asp.Net缓存 各种缓存依赖

    Cache类,是一个用于缓存常用信息的类.HttpRuntime.Cache以及HttpContext.Current.Cache都是该类的实例. 一.属性 属性 说明 Count 获取存储在缓存中的 ...

  9. 安卓JNI使用C++类

    安卓JNI使用C++类,同时可使用C++的类成员变量,这就必须保证程序持续保存Native状态,即长期维护C++对象的地址.完成初始化之后,需要使用对象成员的java层函数需要传入对象的地址. 一.N ...

  10. c#同步锁Monitor.Enter(T)

    protected static object MObjLock = new object();//同步锁 public string GetData(int mId) { Monitor.Enter ...