日志原理目前还没有看到谁说的比较清楚的。

数据库运行过程中,安全事故的发生难以避免。其中有可能是人为因素,也有可能是硬件设备故障,甚至是自然灾难。因此,数据库除了安全性技术防范,还需要有备份与恢复技术来进一步保障数据的安全,当数据被破坏以后,可以尽可能的将数据库调整到破坏前的状态。

数据库备份有多种分类方式。按备份的实现方式,可分为物理备份和逻辑备份,其中物理备份又分为冷备份和热备份;按备份的数据量分,则可分为完全备份、增量备份、差异备份。

一、按备份实现方式划分

1、物理备份
在操作系统里直接备份数据库的数据文件。我有个疑问,直接备份数据库的数据文件,恢复的时候,数据库能识别这些文件吗?能顺利加载它们吗?

1)冷备份
也称为静态备份。先将数据库停止、关闭,然后把数据库的文件全部复制下来,可能就是整个数据库吧,包括数据库本身,以及各种数据文件。通常,我会将数据文件与数据库本身分开存放,复制起来工作量不小。

但是,据说冷备份是数据库备份中最快和最安全的方法。

2)热备份
也称为动态备份。利用备份软件,在数据库正常运行的状态下,将数据库中的数据文件备份出来。直接拷贝是不行的,数据文件处于锁定状态,要利用专用备份软件。

3)冷备份 VS 热备份

简单来说,冷备份快速,但要停止数据库;热备份不用停止数据库,但一旦失败,后果严重,备份不成不说,估计整个数据库都完蛋。

2、逻辑备份
逻辑备份是指利用DBMS自带的工具软件备份和恢复数据库。比如,oracle的export、import(oracle 10g以前是exp、imp)。

逻辑备份可以按表、表空间、用户和全库4个层次备份和恢复数据。但如果数据库非常大,这种备份方式速度很慢,耗时很长,一般采用物理备份。

二、按备份数据量划分

1、完全备份
整个数据库中的数据进行备份。

2、增量备份
备份上一次备份(包括完全备份、增量备份和差异备份)后发生变化的数据。

3、差异备份
备份上一次完全备份后发生变化的所有数据

三、备份文件的存放

数据备份好了之后并非万事大吉,备份文件不应该只放在服务器本机,还要异机存放、异地存放,避免团灭。

四、日志文件

这里说的日志文件指的是记录事务日志的文件。对于任何一个事务,日志都有非常全面的记录,根据这些记录可以将数据文件恢复成事务前的状态。从事务动作开始,事务日志就处于记录状态,事务执行过程中对数据库的任何操作都记录在内,直到用户提交或回滚后才结束记录。

DBMS的原则是先写日志再修改数据,数据库如果中途挂掉,重启或恢复时,可以根据日志文件结合检查点,按需要重放,以保持数据的一致性。

不同数据库机制不同,按照不同日志文件分类,有的日志文件会循环使用,而有的日志文件则会越来越大。我记得SQL SERVER里,做一次完全备份就可以截断日志文件,将备份前的日志清掉,日志文件得以收缩。oracle好像也有类似机制。而且,日志记录模式,有详细有简洁,作为选项,视乎需要设置。

五、数据恢复

将数据库从错误状态恢复到某一个已知的正确状态的功能,称为数据库的恢复。数据恢复的思想就是冗余,而建立冗余的方法有数据备份和日志文件等。根据故障的不同类型,采用不同的恢复策略:

1、事务故障恢复
事务故障的恢复由系统自动完成,无须DBA参与。具体步骤为:

反向扫描日志文件,对事务的更新操作执行逆操作,直到读取事务开始标记,事务故障恢复完成。(但也有数据库更新数据时,是先更改内存数据,积累到一定量或时间才写入持久化介质,而日志文件是事务提交则写入磁盘,因此事务故障恢复不一定是执行逆操作,也可能是根据日志的记录重放操作?)

这里的事务故障恢复,应该是指不重启数据库的情况。

2、系统故障恢复
系统故障恢复在系统重启时完成,同样不需要用户干预。步骤如下:

1)正向扫描日志文件,找出故障发生前已经提交的事务,记入重做(Redo)队列;同时找出故障发生前尚未完成的事务,记入撤销(Undo)队列。

2)反向扫描日志文件,对撤销队列的事务中的更新操作执行逆操作

3)正向扫描日志文件,对重做队列的事务中的更新操作执行重放操作

3、截止故障与病毒破坏的恢复
步骤如下:

1)载入最后的备份文件,将数据库恢复到最近一次备份时的状态。

2)从故障点开始反向扫描日志文件,找出已提交事务标识,并记入Redo队列

3)从起始点(即最后备份时刻)正向扫描日志文件,将Redo队列的事务重放

4、有检查点的恢复
1)找出检查点建立时所有正在执行的事务

2)未提交的事务做撤销处理

3)已提交的事务重做

检查点类似于一个里程碑。建立检查点的时候,DBMS会将内存中的数据持久化到磁盘里。通常,为提高性能,DBMS都是先修改内存里的数据,积攒到一定量才写入磁盘;而日志倒是事务提交时就马上写入磁盘。建立检查点的好处,就是故障恢复的时候,不用读太多的日志文件,做大量的Redo这种重复操作,只从最后的检查点开始就好。

想想,现在吹得很火的DevOps,其中之一就是持续集成,即我们要经常地、至少每天提交一次代码,否则几天才提交一次,冲突的几率就很大了。数据库检查点也类似,经常性地持久化数据到磁盘。的确是个里程碑。

数据库的备份与恢复技术相关推荐

  1. Oracle数据库的备份与恢复技术

    Oracle数据库的备份与恢复技术 郑永生 (华能德州电厂信息中心,德州 253024)     摘 要 确保数据安全是每一位数据库DBA的必要工作,根据数据的重要性和软硬件条件制定可行的备份恢复方案 ...

  2. Oracle数据库逻辑备份与恢复(3)——数据泵(expdp、impdp)

    Oracle数据库逻辑备份与恢复(3)--数据泵(expdp.impdp) 使用数据泵技术(expdp.impdp)导出和导入数据比使用exp.imp命令导出和导入数据速度要快,原因是数据泵技术可以使 ...

  3. oracle 差分备份,Oracle数据库RMAN备份与恢复:备份与恢复(手机搬家)

    摘要:针对Oracle数据库,说明备份与恢复的重要性,讨论了如何定制恰当的备份策略,以RMAN为例,分别从改变数据库的归档模式.创建RMAN用户并授权,创建恢复目录并注册目标数据库,备份与恢复数据库文 ...

  4. 程序员如何乘风破浪?从数据库历史看技术人发展 | CSDN 高校俱乐部

    2009 年我国数据库软件市场规模为 35.03 亿元,2017 年我国数据库软件市场规模增长至 120.00 亿元.8年时间内,我国数据库软件市场始终保持平稳增长,年均复合增长率为 17.5%,且增 ...

  5. 程序员如何乘风破浪?从数据库历史看技术人发展 | CSDN 高校俱乐部

    2009 年我国数据库软件市场规模为 35.03 亿元,2017 年我国数据库软件市场规模增长至 120.00 亿元.8年时间内,我国数据库软件市场始终保持平稳增长,年均复合增长率为 17.5%,且增 ...

  6. 数据库集群技术 -摘自网络

    简介 当今世界是一个信息化的世界,我们的生活中无论是生活.工作.学习都离不开信息系统的支撑.而信息系统的背后用于保存和处理最终结果的地方就是数据库.因此数据库系统就变得尤为重要,这意味着如果数据库如果 ...

  7. 巨杉数据库 CTO 王涛:区块链+数据库,底层技术融合是否带来更大爆发?

    巨杉数据库 CTO 王涛:区块链+数据库,底层技术融合是否带来更大爆发? 4 月 22 日,在掘金技术社区主办的沙龙上,巨杉数据库 CTO 王涛以<区块链技术 VS 数据库技术:颠覆还是融合&g ...

  8. (转)Oracle与DB2在数据库高可用技术上的相同与差异探讨

    原文:http://www.talkwithtrend.com/Article/178339 数据库建设过程中,高可用是每一个企业数据中心数据库建设过程中至关重要的一个关注点,直接关系到业务连续性和稳 ...

  9. 如何查询当前表空间下所有实例_详解人大金仓MPP数据库并行查询技术

    什么是MPP数据库? 人大金仓MPP数据库的 并行查询技术原理是什么? 如何实现并行查询?性能如何? 且听以下详细分解~ 01 什么是人大金仓MPP数据库? KingbaseAnalyticsDB(简 ...

  10. 数据库-数据库的备份与恢复

    数据库的备份与恢复 备份命令 在mysql的安装目录的bin目录下有mysqldump命令,可以完成对数据库的备份. 语法:mysqldump -u 用户名 -p 数据库名> 磁盘SQL文件路径 ...

最新文章

  1. 信号状态关_路由器要不要关?难怪信号越来越差
  2. March 2007 CTP Linq 的一些改变
  3. 强化学习(part2)--马尔科夫决策
  4. Avalonia跨平台入门第四篇之Popup在uos下问题
  5. 机器人门禁控制盒怎么接线方法_RFID门禁系统原理、初始密码、密码修改方法...
  6. leetcode刷题:二叉树的中序遍历
  7. Inception-v4结构代码
  8. [leetcode]746. 使用最小花费爬楼梯
  9. go开发属于自己的日志库-日志库易用性封装
  10. HTML5期末大作业:家乡网站设计——石家庄(10页) HTML+CSS+JavaScrip 旅游网页html 家乡介绍html网页设计 dw旅游景点网页设计 web课程设计网页规划与设计
  11. 小程序中如何使用vantUi库
  12. Python连接postgresql数据库入门
  13. 记录Python 入门练习题目
  14. 计算机游戏本和商务本的区别,游戏本和商务本的区别有哪些
  15. 临沂吴忠军新浪微博主页
  16. 算法手撕代码26~35
  17. oracle 监控内存和硬盘的排序比率_最好使它小于 .10,监控数据库性能的SQL
  18. android虚线边框_Android通过代码实现虚线或者虚线框shape
  19. unity 5.x从入门到精通_Unity学习中值得收藏的学习资料(书籍)与博客
  20. 会声会影三花聚顶显威力

热门文章

  1. cobar mysql 性能,Cobar + MySQL 技術驗證(li)
  2. HBase项目之微博系统
  3. 如何用Matlab求极限
  4. lora calculator的使用
  5. 基于linux平台的嵌入式开发每日一练(二)
  6. 高通CSR8615蓝牙音频模块单芯片介绍
  7. 2000坐标系xy坐标几位_2000坐标系(2000坐标系x和y坐标几位数)
  8. 转发-神器|最强电脑搜索神器(啥都能搜!!!)
  9. 【学习中】layui前端框架
  10. 萤石云平台使用 - IPC接入