SQL Server 备份方案
参考
目的
在发生意外 (人为删除, 磁盘坏掉) 之后, 让数据可还原到指定时间点上.
Backup 的种类
备份分 3 种 Level
Full Backup (所有数据 copy)
Differential Backup (只 copy 从上一次 full backup 到目前的数据变化, 在还原过程中, differential backup 必须配合 full backup 才能工作)
Log Backup (只 copy 从上一次 differential backup 到目前的数据变化, 在还原过程中, log backup 必须配合 full backup 和 differential backup 才能工作)
执行流程
通常是:
每天 1 个 full backup, 半天 1 个 differential backup, 每小时 1 个 log backup
full backup -> log backup -> log backup -> differential backup -> log backup -> log backup -> full backup 大概是这样的
当需要还原的时候, 先还原到某一天的 full backup 然后依据时间继续还原 log backup 和 differential backup.
log backup 是可以指定时间的 (一小时内任意一个时间点上都可以还原到), 而 full 和 differential 只是记入数据所以没有时间的概念.
最糟糕的情况下可能会丢失最后 1 小时的数据 (Azure 的最小时间是每15 分钟 1 个 log backup, 一直 backup 是会影响性能的哦, 也是要衡量一下)
代码
USE [master] SELECT
bs.database_name AS 'Database Name',
bs.backup_start_date AS 'Backup Start',
bs.backup_finish_date AS 'Backup Finished',
DATEDIFF(MINUTE, bs.backup_start_date, bs.backup_finish_date) AS 'Duration (min)',
bmf.physical_device_name AS 'Backup File',
CASE
WHEN bs.[type] = 'D' THEN 'Full Backup'
WHEN bs.[type] = 'I' THEN 'Differential Database'
WHEN bs.[type] = 'L' THEN 'Log'
WHEN bs.[type] = 'F' THEN 'File/Filegroup'
WHEN bs.[type] = 'G' THEN 'Differential File'
WHEN bs.[type] = 'P' THEN 'Partial'
WHEN bs.[type] = 'Q' THEN 'Differential partial'
END
AS 'Backup Type'
FROM msdb.dbo.backupmediafamily bmf WITH(NOLOCK)
INNER JOIN msdb..backupset bs WITH(NOLOCK)
ON bmf.media_set_id = bs.media_set_id
WHERE bs.database_name = 'test-recovery'
ORDER BY bs.backup_start_date ASC; -- note for 下次看
-- backup 有 3 种, full, log, differential
-- 通常是 full -> log -> log -> differential -> log -> log -> full
-- 比如 1 天 1 个 full, 半天一个 differential, 每小时一个 log
-- 备份的关键是, 1.恢复的时间(尽可能短) 2. 恢复的层度 (尽可能完整)
-- express, web edition 不支持 backup compression
-- norecovery 意思是还有下一个 restore 要跑, 最后一个 restore 才 recovery
-- refer http://mysql.taobao.org/monthly/2017/11/03/
-- refer http://mysql.taobao.org/monthly/2017/12/05/
-- stats 是显示 progress % stats 10 = 完成 10% 就显示一下
-- init and replace 用于 full 的情况, 另外 2 个 用 noint 和不需要放 replace
-- STOPAT 是只恢复到某事时间点停止 use [master];
use [test-recovery];
alter database [test-recovery] set recovery full with no_wait declare @now nvarchar(50) = REPLACE(convert(nvarchar(20),GetDate(),120),':','-');
set @now = '2018-09-02 18-16-27';
declare @type nvarchar(50) = 'full';
declare @path nvarchar(500) = 'C:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL\Backup\test-recovery_'+ @now +'_' + @type +'.bak';
--backup log [test-recovery] to disk = @path with noinit,stats=10;
--backup database [test-recovery] to disk = @path with differential,init,stats=10;
--backup database [test-recovery] to disk = @path with init,stats=10;
restore database [test-recovery] from disk = @path with norecovery, replace; INSERT INTO Products(name) VALUES ('dada');
INSERT INTO Products(name) VALUES ('yyyy');
INSERT INTO Products(name) VALUES ('zz');
INSERT INTO Products(name) VALUES ('gg'); RESTORE DATABASE [test-recovery]
FROM DISK =N'C:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL\Backup\test-recovery_2018_09_02-16_17_differential.bak' WITH NORECOVERY; RESTORE LOG [test-recovery]
FROM DISK =N'C:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL\Backup\test-recovery_2018_09_02_16_18_log.bak' WITH RECOVERY; RESTORE LOG [test-recovery]
FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL\Backup\test-recovery_2018_09_02_16_18_log.bak' WITH STOPAT = '2017-12-17 23:04:46.130', RECOVERY
工具
上面的代码只是执行 backup 和 restore, 但正正要运行起来还需要一个 server task 每天/小时运行. 所以还是推荐上层工具.
虽然 SQL in Azure 也有 SQL Backup 方案, 但有点贵, 就先不碰了. 这款是免费的.
具体操作流程大概是:
1. select SQL Server and login > select database
2. Add destination 存放路径
3. set schedule
搞定
有一个需要注意的是, 默认配置下, full backup 以后 differential backup 就会被自动删除, differential backup 之后 log backup 就会自动删除
这是为了节省磁盘空间, 代价就是没办法还原到任意时间点 (这个代价也太大了吧). 通过 setting 我们可以修改掉这个默认设置.

Shrink log file
SQL server 会把所有操作记入在 database_log.ldf 里头, 这个 file 会越来越大. 而当我们做了上述的 backup 以后, 这个 file 就没啥用了. 我们可以定期去 shrink 它.
一般上是用 SQL Server Management Studio 来处理的.
参考:
How do you clear the SQL Server transaction log?
SQL Server Transaction Log Backup, Truncate and Shrink Operations
SQL Server 备份方案的更多相关文章
- SQL Server 备份和还原全攻略
原文:SQL Server 备份和还原全攻略 一.知识点 完全备份: 备份全部选中的文件夹,并不依赖文件的存档属性来确定备份那些文件.(在备份过程中,任何现有的标记都被清除,每个文件都被标记为已备份, ...
- sql server备份损坏
sql server备份损坏 转自:https://www.cnblogs.com/zhijianliutang/p/4080916.html 1.备份文件和数据库放在同一个(或一组)的物理磁盘上.磁 ...
- 17、SQL Server 备份和还原
SQL Server 备份 恢复模式 SQL Server 数据恢复模式分为三种:完整恢复模式.大容量日志恢复模式.简单恢复模式. 完整恢复模式 默认的恢复模式,它会完整记录下操作数据库的每一个步骤, ...
- 第一篇——第一文 SQL Server 备份基础
原文:第一篇--第一文 SQL Server 备份基础 当看这篇文章之前,请先给你的所有重要的库做一次完整数据库备份.下面正式开始备份还原的旅程. 原文出处: http://blog.csdn.net ...
- SQL Server 备份和还原
SQL Server 备份和还原 SQL Server 备份 恢复模式 SQL Server 数据恢复模式分为三种:完整恢复模式.大容量日志恢复模式.简单恢复模式. 完整恢复模式 默认的恢复模式, ...
- SQL点滴12—SQL Server备份还原数据库中的小把戏
原文:SQL点滴12-SQL Server备份还原数据库中的小把戏 备份数据库时出现一个不太了解的错误 ,错误信息“is formatted to support 1 media families, ...
- sql server 备份恢复效率
sql server 备份恢复效率 如何提高备份的速度呢? 其实这个问题和如何让系统跑的更快是一样的,要想系统跑的更快,无非就是:优化系统,或者就是更好更强大的服务器,特别是更多的cpu.更大的内存. ...
- Data Base sql server 备份数据库
sql server 备份数据库 1.维护计划向导: 右键维护计划-维护计划向导-然后安装提示: 勾选自己要干的事,比如:完整备份数据库.差异备份数据库等等 2.作业计划: 如下图: SQL Serv ...
- SQL Server备份时间段内插入的数据依旧进入了备份文件?(转载)
问 MSSql我在本机测试了下.为了延长备份时间,找个大的数据库.开始完整备份bak然后再此库新建表,并增添数据.备份结束.==================还原备份后,在还原的数据库内发现新增的表 ...
- SQL Server 备份迁移策略
标签:SQL SERVER/MSSQL SERVER/数据库/DBA/xp_cmdshell/备份压缩 概述 当备份空间不是很充裕的情况下需要找方法将备份文件拷贝到专用的备份机器上去,特别是存储空间不 ...
随机推荐
- 使用C#/.NET解析Wiki百科数据实现获取历史上的今天
创建一个webapi项目做测试使用. 创建新控制器,搭建一个基础框架,包括获取当天日期.wiki的请求地址等 创建一个Http请求帮助类以及方法,用于获取指定URL的信息 使用http请求访问 ...
- windows下mysql服务局域网访问配置
在局域网中访问本机(Windows)的MySQL服务器,需要确保MySQL服务器配置为允许远程访问,并且防火墙设置允许外部连接.以下是详细的步骤: 1. 修改MySQL配置文件允许远程访问 找到并编辑 ...
- linux服务器webdriver启动Chrome浏览器失败
碰到一个linux启动Chrome浏览器失败的奇怪问题,查了很久资料,问题终于解决了,特此记录一下 我的情况是,一开始运维给了一个deploy的账号去部署项目UI自动化测试项目,项目是运行没有问题的, ...
- java+mysql+tomcat环境变量配置(windows版)
jdk8(本人用的jdk8) 系统变量->新建:{JAVA_HOME=[JDK安装目录]} 系统变量->PATH:头部追加%JAVA_HOME%\bin;%JAVA_HOME%\jre\b ...
- RPA京麦咚咚批量发送消息
京麦咚咚发送消息,首先我们需要确定给谁发,发送什么内容 给谁发:可以传入京东用户名.京东订单号.咚咚将通过此条件进行搜索进入会话框 发送什么内容:批量发送信息给不同的用户,比如给不同的订单用户发送其相 ...
- Vue Hook 封装通用型表格
一.创建通用型表格的需求 实现一个通用型表格组件,具备以下功能: 动态列配置. 分页功能. 排序功能. 可扩展的行操作功能. 二.设计通用型表格组件 首先,需要设计一个基础的表格组件,它接受列配置.数 ...
- 【SpringMVC】 Controller接收深度复杂对象封装不到的问题
首先来看数据结构的定义: 一个Form对象,然后里面有一个排版日期对象的List集合 排班集合的每个元素中又有一个String集合 在前端的Post请求中可以看到这个String集合是传递了的 但是D ...
- 【Server】对象存储OSS - Minio
官方文档: https://docs.min.io/docs/minio-quickstart-guide.html 看中文文档CV命令发现下不下来安装包,应该是地址问题 单击搭建非常简单,只有三个步 ...
- 【Java-GUI】03 事件监听
--1.监听机制案例 简答理解:操作驱动程序执行 完整的操作体系:事件源.事件.监听器.注册监听 案例: 点击OK按钮,让上方的输入框写入一段字符 package cn.dzz; import jav ...
- 【转载】 使用Python的ctypes查看内存
=================================================================== 原文地址: https://zhuanlan.zhihu.com ...