数据库备份那点事儿

图片 11

四 . 数据初始化  

--第一步: 创建数据库
CREATE DATABASE [FileGroupTest]
go
USE [FileGroupTest]

--第二步:创建文件组
ALTER DATABASE [FileGroupTest] ADD FILEGROUP [FG_Test_Id_01]
ALTER DATABASE [FileGroupTest] ADD FILEGROUP [FG_Test_Id_02]

--第三步:创建文件添加到文件组
ALTER DATABASE [FileGroupTest] ADD FILE
(NAME = N'FG_TestUnique_Id_01_data',FILENAME = N'D:DataFG_TestUnique_Id_01_data.ndf',SIZE = 1MB, FILEGROWTH = 1MB )
TO FILEGROUP [FG_Test_Id_01]

ALTER DATABASE [FileGroupTest] ADD FILE
(NAME = N'FG_TestUnique_Id_02_data',FILENAME = N'D:DataFG_TestUnique_Id_02_data.ndf',SIZE = 1MB, FILEGROWTH = 1MB )
TO FILEGROUP [FG_Test_Id_02]

--第四步创建表存放在不同文件上
CREATE TABLE  Student(ID INT,Name varchar(50),[Address] varchar(100)) ON [FG_Test_Id_01]
CREATE TABLE  Teacher(ID INT,Name varchar(50),[Address] varchar(100)) ON [FG_Test_Id_02]
CREATE TABLE  School(ID INT,Name varchar(50),[Address] varchar(100)) ON [PRIMARY]

图片 1

图片 2

-- 养成好习惯先进行完整备份
backup database  [FileGroupTest] to BackupTestDevice

 使用校验和(CHECKSUM)

  此选项主要是在备份的时候校验是否存在残缺页(也可以理解成是否有数据页损坏),开启此选项可以在备份时及时发现数据是否存在问题。

  图片 3

 

  详细说明请参见:数据库备份checksum选项你会用么?

五. 备份演示

-- 给二个表插入数据
insert into Student values(1,'张三','广东深圳')
insert into Teacher values(1,'李四','广东佛山')

-- 日志备份
backup log  [FileGroupTest] to BackupTestDevice

-- 给二个表插入数据
insert into Student values(2,'张三2','广东深圳')
insert into Teacher values(2,'李四2','广东佛山')

-- 日志备份
backup log  [FileGroupTest] to BackupTestDevice

-- 文件组FG_Test_Id_01备份
backup database [FileGroupTest] file='FG_TestUnique_Id_01_data' to BackupTestDevice

-- 给二个表插入数据
insert into Student values(3,'张三3','广东深圳')
insert into Teacher values(3,'李四3','广东佛山')
-- 日志备份
backup log  [FileGroupTest] to BackupTestDevice
-- 给二个表插入数据
insert into Student values(4,'张三4','广东深圳')
insert into Teacher values(4,'李四4','广东佛山')
-- 日志备份
backup log  [FileGroupTest] to BackupTestDevice

-- 文件组FG_Test_Id_02备份
backup database [FileGroupTest] file='FG_TestUnique_Id_02_data' to BackupTestDevice

-- 给主文件组表插入数据
insert into School values(1,'深圳大学','广东深圳南山')
-- 主文件组备份
backup database [FileGroupTest] file='FileGroupTest' to BackupTestDevice

  查看备份集如下图所示:type=F 代表文件组备份类型

图片 4

 生产系统不要使用简单恢复模式

  建议说明:简单恢复模式并不适合生产系统。因为对生产系统而言,丢失最新的更改是无法接受的,我们建议使用完整恢复模式。

  基础小知识:在简单模式下,可以采用两种备份方式:全备份和差异备份。这两种备份消耗都会比较大,所以不是可以频繁备份的类型,所以在两次备份间隔的时间段内数据都存在丢失的风险。微软官方文档
:简单恢复模式下的备份.aspx)

  实际场景小故事:很多维护人员喜欢简单模式,因为简单模式自动回收日志空间以减少空间需求,实际上不再需要管理事务日志空间。但实际情况时因为明白这其中的奥妙原理么?并不是,甚至相反,我在很多的客户系统看到跑着上TB的数据,而数据库备份模式竟然是简单模式,只有每天的全备份,连差异备份都没有。

  我一般会问:“现在的备份模式可能会丢一天的数据,公司能接受么?”  

  维护人员:“那肯定不能接受呀!”

  我又问:“那为什么不采用更好的备份方式呢?”

  维护人员:“我也不太懂,不知道该怎么做,数据库跑这么久了,没那么容易坏吧?”

  

 

三.文件还原  

   当一个大数据库有若干个文件和文件组,如果损坏只是集中在其中一个文件或文件组上,sqlserver只要把坏掉的那个数据文件组重建,肯定可以节约时间。但是数据库的事务修改是会分布在各个数据文件上的,如果用备份只恢复其中一个文件,而其它文件不恢复,那么它们的状态一定会不一致,这样数据库是无法使用的,为了使新恢复的文件能够自动恢复备份以后做的修改,就需要借助事务日志。使用文件备份还原一个或多个受损文件的步骤如下:

  (1) 创建活动事务日志的尾日志备份。
对于离线文件还原,在文件还原之前必须始终先进行一次尾日志备份。对于在线文件还原,在文件还原之后必须始终先进行一次日志备份。因为日志文件一日损坏,文件还原则无法进行。

  (2) 从每个损坏的文件的最新文件备份还原相应文件。

  (3)
针对每个还原的文件,还原最近的差异文件备份(如果有,因为这样还原快)

  (4)
按顺序还原事务日志备份,从时间上最早备份的日志文件开始,到步骤1的尾日志结束。

 使用压缩备份

  数据库往往比较大,那么同样备份文件占用的空间也很大,由于常常要保留几天甚至一周的数据在本地磁盘,压缩备份可以极大的减少备份文件对磁盘空间的占用。同时因为文件小了,备份产生IO的压力也会降低,但会对消耗比较多的CPU。

  图片 5

 

二. 文件备份策略  

   使用文件备份和日志备份还原数据库的操作可能比较复杂,因此最好先执行完整数据库备份,并在第一个文件备份开始之前,进行日志备份。下图在t0创建数据库后,立即执行完整数据库备份t1,创建第一个完整数据库备份后,便可以开始执行事务日志备份。事务日志备份按计划的间隔时间执行,文件备份以最适合数据库业务要求的间隔执行,下面是先备份主文件组A,再是辅助文件组B。在完整恢复模式下,恢复一个文件组备份,不但需要恢复文件组备份本身,还需要依次恢复从上一次完整数据库备份后到恢复的目标时间点为止的所有日志备份。如果日志备份数量多,可以考虑再给合差异文件备份,但这样备份计划更加难于管理。

图片 6

 

更多建议

  1. 定期进行数据备份(完备或差异备份)和日志备份。
  2. 使用压缩备份来减少磁盘空间占用和提高备份效率。
  3. 定期检查磁盘剩余空间和备份文件增长情况,以确保有足够空间进行下一次备份。
  4. 使用校验和(CHECKSUM)来检查数据完整性。
  5. 使用RESTORE VERIFYONLY来验证备份可用性。
  6. 根据数据变动情况决定完整备份和差异备份的频率。
  7. 根据日志生成速度来决定日志备份的频率。
  8. 优先使用脚本来备份数据库。
  9. 如果使用维护计划备份,请确认是否需要生成“报告和记录”。
  10. 定期检查日志文件大小和VLF数量。
  11. 定期清理msdb数据库中备份和还原记录。
  12. 在磁盘空间充足条件下,应在本地保留一份最新备份(最后一次完备及之后备份文件)。
  13. 定期复制数据库备份至其他服务器,并定期检查异地备份。
  14. 在备用服务器上还原数据库以测试备份可用性,并运行DBCC
    CHECKDB来检查数据完整性。
  15. 定期归档历史数据,条件允许情况下,应将历史数据归档到专门存放历史记录的数据库。
  16. 除有特殊需求修改数据库恢复模式外,应保证数据库运行在完整恢复模式下。
  17. 当数据库从简单恢复模式切换到完整恢复模式下,应立即完整备份或差异备份来修复断裂的日志链。
  18. 当数据库从大日志恢复模式切换到完整恢复模式下,应立即日志备份,以保证此后可按照时间点还原。
  19. 在做任何可能存在风险的操作前,请确保先确保备份有效。
  20. 维护一个列表,记录数据库进行备份的频率、路径以及异地备份的路径等信息,以便故障时能第一时间找到备份。
  21. 关于备份的误区:SQL
    Server误区30日谈-Day30-有关备份的30个误区

 

————–博客地址—————————————————————————————

原文地址: 

如有转载请保留原文地址! 

 


 

  总结
:备份真的很重要!文章讲述的东西很少,只想起到一个引起重视的目的!

  备份的更多更详细的文章,请参见:[微软官方文档,备份概述]()

 —————————————————————————————————-

注:此文章为原创,欢迎转载,请在文章页面明显位置给出此文链接!
若您觉得这篇文章还不错请点击下右下角的推荐,非常感谢!

六. 还原演示

--步骤1:假设文件FG_TestUnique_Id_01_data已损坏,数据库处于在线状态来还原该文件
restore database [FileGroupTest] file='FG_TestUnique_Id_01_data' 
from BackupTestDevice with file=33, norecovery 

  图片 7

--此时FileGroupTest库还能用,但FG_Test_Id_01文件组上的Student表现不能用,此时处于离线状态
select * from FileGroupTest.dbo.Student

  图片 8

--这两个表在不同文件组上,可以使用
select * from FileGroupTest.dbo.School
select * from FileGroupTest.dbo.Teacher

    图片 9
 BACKUP LOG 与 COPY_ONLY
选项将创建仅复制日志备份,该备份不会截断事务日志。
仅复制日志备份对日志链没有任何影响,因此其他日志备份的表现就像仅复制备份不存在一样。

--步骤2:进行新的日志备份,以确保捕获到该文件离线时的点
backup log  [FileGroupTest] to BackupTestDevice with copy_only

  图片 10

--步骤3: 在线还原日志备份
restore log [FileGroupTest] from BackupTestDevice with file=34,norecovery
restore log [FileGroupTest] from BackupTestDevice with file=35,norecovery
restore log [FileGroupTest] from BackupTestDevice with file=38,recovery

--离线的文件组FG_Test_Id_01处于在线状态,Student表可以使用,数据库恢复完成
select * from FileGroupTest.dbo.Student

  图片 11

常规建议

一. 概述

  文件备份是指备份一个或多个文件或文件组中的所有数据。使用文件备份能够只还原损坏的文件,而不用还原数据库的其余部份,从而加快恢复速度。例如,如果数据库由位于不同磁盘上的若干文件组成,在其中一个磁盘发生故障时,只需还原这个故障磁盘上的文件,其它磁盘文件无须还原,这样缩短还原时间。

  在完整恢复模式下,一整套完整文件备份和涵盖所有文件备份的日志备份合起来,等同于一个完整数据库备份。

  1.1 文件备份具有如下优点:
    (1)可以迅速还原损坏的文件。
    (2)当超大型数据库在完整备份下变得难以管理时,文件备份增加了计划和媒体处理的灵活性。

  1.2 文件备份具有不足:
    (1)
与完整数据库备份相比,文件备份的主要缺点是管理较为复杂。如果某个损坏的文件未备份,那么媒体故障可能会导致无法恢复整个数据库。因此必须维护一组完整的文件备份,还必须维护一个或多个日志备份。
    (2)
维护和跟踪这些完整备份是一种耗时的任务,所需空间会超过完整数据库备份所需的空间。

 定期检查磁盘空间

  很多客户运维的策略不完善,同时又缺少巡检的过程,很多时候备份作业创建后没有及时维护,导致磁盘空间被占满,备份作业失败。

 

 有异地备份

  防止本地磁盘损坏或者整个机房故障,对这种至关重要的数据,必须采取异地备份的办法。

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图