SQL Server 打造完整的数据备份体系

让我们回首上半年IT领域数据相关的几个事件,对数据备份的重要性重新加深一下认识:

2017年1月 MongoDB黑客赎金事件,发现了一些在互联网上用户的MongoDB没有任何的保护措施,被攻击者把数据库删除了,并留下了一个叫 WARNING 的数据库。“老子把你的MongoDB里的数据库给转走了,如果你要你的数据的话,给我0.2个的比特币(大约USD200)。”

2017年2月 GitLab一名疲惫不堪的系统管理员在荷兰工作到深夜,他在令人沮丧的数据库复制过程中不小心删除了一台不该删除的服务器上的目录:他彻底删除了一个含有300GB活动生产数据的文件夹。更为悲剧的是定时备份和云端的备份都无效。

2017年4月 云托管服务提供商Digital Ocean重蹈GitLab在2个月前的覆辙:因粗心大意而出乱子,删除了一个生产级数据库,结果引发了持续五个小时的故障。

2017年6月 位于荷兰海牙的一家云主机商 verelox.com,一名前任管理员删光了该公司所有客户的数据,并且擦除了大多数服务器上面的内容,客户数据恢复希望渺茫。

对于这些频繁发生的事件,让我们更为深刻的认识到了DBA 守则的第一条:有效的备份重于一切。

深感急迫需要改进和完善备份工作,DBA对于备份做如下优化:

1.备份删除优化    
以前的删除是根据时间一刀切,删除30天前的所有文件。    
现在,根据SQL Server备份恢复的原理,数据库还原要基于完备,我们将删除策略调整为删除30天前最近的一次完备之前的所有文件。

2.备份连续性验证    
读取当前时间之前最近的一次完备及之后的所有日志备份,判断LSN的连续性。

3.备份可用性验证    
轮训近一天的所有备份文件,RESTORE VERIFYONLY验证备份文件的可用性。

4.备份恢复验证    
考虑到资源不足,将一次验证一个库,数据库按队列验证,读取当前时间之前最近的一次完备及之后的所有日志备份,做备份恢复操作。

恢复验证的数据远程UNC路径挂载在远端,验证完一个库后,立即清理,避免空间占用。

5.备份历史和作业历史自动清理    
可配置不同粒度定期清理存储在msdb里的备份历史和作业历史数据,减少msdb的IO瓶颈。

基于以上5点,打造完整的数据备份体系,为数据的有效使用保驾护航。

时间: 2024-10-05 01:33:25

SQL Server 打造完整的数据备份体系的相关文章

恢复SQL Server被误删除的数据(再扩展)

恢复SQL Server被误删除的数据(再扩展) 大家对本人之前的文章<恢复SQL Server被误删除的数据> 反应非常热烈,但是文章里的存储过程不能实现对备份出来的日志备份里所删数据的恢复 这个是一个缺陷,本人决定对这个存储过程扩展一下,支持对log backup文件里的delete语句进行恢复 实验步骤 1.首先先准备好测试表和测试语句 USE [sss] GO --建表 CREATE TABLE testdelete ( id INT IDENTITY(1, 1) NOT NULL P

使用XML向SQL Server 2005批量写入数据——一次有关XML时间格式的折腾经历

使用XML向SQL Server 2005批量写入数据——一次有关XML时间格式的折腾经历 原文:使用XML向SQL Server 2005批量写入数据——一次有关XML时间格式的折腾经历 常常遇到需要向SQL Server插入批量数据,然后在存储过程中对这些数据进行进一步处理的情况.存储过程并没有数组.列表之类的参数类型,使用XML类型可妥善解决这个问题. 不过,SQL Server2005对标准xml的支持不足,很多地方需要特别处理.举一个例子说明一下. 这个场景是往存储过程里传递一个xml

Sql Server 存储过程中查询数据无法使用 Union(All)

原文:Sql Server 存储过程中查询数据无法使用 Union(All) 微软Sql Server数据库中,书写存储过程时,关于查询数据,无法使用Union(All)关联多个查询. 1.先看一段正常的SQL语句,使用了Union(All)查询: SELECT ci.CustId --客户编号 , ci.CustNam --客户名称 , ci.ContactBy --联系人 , ci.Conacts --联系电话 , ci.Addr -- 联系地址 , ci.Notes --备注信息 , ai

SQL SERVER 报:由于数据移动,未能继续以 NOLOCK 方式扫描错误的解决办法。

比如在某个表中使用 select xxx from xxx with(nolock) where xxxx 查询. 提示出错:由于数据移动,未能继续以 NOLOCK 方式扫描. 它有可能某些条件出错,某些条件不出错. 原因是有可能该表在物理文件存储中某一块数据损坏了.或者该表中的索引和表的数据不一致了. 解决办法-如果是整个库出错可以使用: 1.快速修复DBCC CHECKDB ('数据库名', REPAIR_FAST)     2.重建索引并修复DBCC CHECKDB ('数据库名', RE

使用SQL Server Management Studio 创建数据库备份作业

SQL Server 作业无非就是按照规定的时间执行指定的脚本,这里介绍如何用SSMS(SQL Sever 2008)创建作业备份数据库. (0)假设在创建作业之前你所要备份的数据库已经存在:其次,你已经会启动SQL Sever 代理(一般是关闭的) (1)创建SQL Server代理作业 (1.1)新建作业,输出常规信息 如上图:输入作业名称(如:BackupJobTest),这里所有者和类别都是默认的,输入说明(就跟写代码要写注释一样,利人利己) (1.2)设置作业执行步骤 点击左边“选择页

SQL Server 基础 03 查询数据基础

查询数据 简单的查询 1 create table stu_info 2 ( 3 sno int not null 4 ,sname varchar(20) not null 5 ,sex varchar(2) not null 6 ,birth varchar(20) not null 7 ,email varchar(20) not null 8 ,telephone int not null 9 ,depart varchar(20) not null 10 ) 11 12 13 sele

C#同步SQL Server数据库中的数据--数据库同步工具[同步新数据]

C#同步SQL Server数据库中的数据 1. 先写个sql处理类: using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Text; namespace PinkDatabaseSync { class DBUtility : IDisposable { private string Server; private string

清理ms sql server 大日志文件数据

1.手动分离数据库: 2.手动删除日志文件: 3.重新生成日志文件: CREATE DATABASE FMIS0 ON (FILENAME = 'E:\FMIS0_DATA\FMIS0-Date') FOR ATTACH_REBUILD_LOG ;GO 清理ms sql server 大日志文件数据

使用变量向SQL Server 2008中插入数据

QT通过ODBC连接数据库SQL Server 2008,进行数据插入时遇到的问题: 先把数据存入变量中,如何使用变量进行插入?插入语句该怎么写? QSqlQuery query(db); query.exec("insert into device values('"+datetime+"','"+splantNum+"','"+sdeviceNum+"','"+stemper+"','"+spress+