数据库系统概论——数据库恢复技术

2024-06-21 22:12

本文主要是介绍数据库系统概论——数据库恢复技术,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 数据库恢复技术
    • 事务的基本概念
      • 什么是事务
      • 如何定义事务:
      • 事务的特性
    • 数据库恢复概述
    • 故障的种类
    • 恢复的实现技术
    • 恢复策略
      • 事务故障的恢复
      • 系统故障的恢复
      • 介质故障的恢复

数据库恢复技术

事务的基本概念

什么是事务

  • 事务使用户定义的一个数据库操作序列,这些操作要么全做,要么一个都不做,是一个不可分割的工作单位。
  • 事务和程序是两个概念
  1. 在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。
  2. 一个程序通常包含多个事务。
  • 事务时数据库恢复和并发控制的基本单位。

如何定义事务:

--显示定义方式begin transaction sql 语句1sql 语句2…… commit
--隐式定义begin transaction sql 语句1sql 语句2…… rollback

事务的特性

事务具有四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持续性(Durability ),我们经常称之为ACID特性。

  • 原子性
    事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不做。

  • 一致性
    事务执行的结果必须是使数据库从一个一致状态变到另一个一致状态。

  • 隔离性
    对并发执行而言,一个事务的执行不能被其他事务干扰。
    一个事务内部的操作及使用的数据对其他并发事务是隔离的。
    并发执行的各个事务之间不能互相干扰。

  • 持续性
    也称永久性
    一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
    接下来的其他操作或故障不应该对其执行结果有任何影响。

数据库恢复概述

故障是不可避免的:

  • 计算机硬件故障
  • 系统软件和应用软件的错误
  • 操作员的失误
  • 恶意的破坏

故障的影响:

  • 造成运行事务非正常中断,影响数据库中数据的正确性。
  • 破坏数据库,使数据库中全部或部分数据丢失。

数据库管理系统对故障的对策

  • DBMS提供恢复子系统。
  • 保证故障发生后,能把数据库中的数据从错误状态+ 恢复到某一已知的正确状态。
  • 保证事务ACID。

恢复技术是衡量系统优劣的重要指标。

故障的种类

(1) 事务内部的故障
某个事务在运行过程中由于种种原因未运行至正常终止点就夭折了。
(2) 系统故障
造成系统停止运转的任何事件,使得系统要重新启动。
(3) 介质故障
介质故障又称为硬故障,这类故障使存储在外存中的数据部分丢失或全部丢失。

各类故障,对于数据库的影响有两种可能性:

  • 一是数据库本身被破坏
  • 二是数据库没有被破坏,但是数据可能不准确。

恢复的实现技术

恢复操作的基本原理:冗余

  • 利用存储在系统其它的房的冗余数据来重建数据库中已经被破坏或不正确的那部分数据。

恢复机制涉及的关键问题

  1. 如何建立冗余数据
    (1) 数据转储
    (2) 登录日志文件
  2. 如何利用这些冗余数据实施数据库恢复。

1. 数据转储
概念:转储是指DBA通过DBMS的恢复子系统,将整个数据库复制到磁带或另一个磁盘上保存起来的过程,这些备用的数据称为后备副本或后援副本。

如何使用?

  • 数据库遭到破坏后可以将后备副本重新装入。
  • 但重装后备副本只能将数据库恢复到转储时的状态。

转储方法:
(1) 静态转储与动态转储

  • 静态转储:在系统中无运行事务时进行转储,转储开始时数据库处于一致性状态,转储期间不允许对数据库的任何存取、修改活动。
  • 动态转储:转储操作与用户事务并发进行转储期间允许对数据库进行存取或修改。

(2) 海量转储与增量转储

  • 静态转储:在系统中无运行事务时进行转储,转储开始时数据库处于一致性状态,转储期间不允许对数据库的任何存取、修改活动。
  • 动态转储:转储操作与用户事务并发进行转储期间允许对数据库进行存取或修改。

在这里插入图片描述

2. 登录日志文件

  1. 什么是日志文件

日志文件(log)是用来记录事务对数据库的更新操作的文件。

  1. 不同数据库系统采用的日志文件格式不完全一样,概括起来日志文件主要又两种格式。
  • 以记录为单位的日志文件。
  • 以数据块为单位的日志文件。
  1. 以记录为单位的日志文件,日志文件中需要登记的内容包括:
  • 各个事务的开始标记(begin transaction)
  • 各个事务的结束标记(commit或rollback)
  • 各个事务的所有更新操作

这里每个事务开始的标记、每个事务的结束标记和每个更新操作均作为日志文件中的一个日志记录 (log record)。

4. 以记录为单位的日志文件,每条日志记录的内容

  • 事务标识(标明是哪个事务)
  • 操作类型(插入、删除或修改)
  • 操作对象(记录内部标识)
  • 更新前数据的旧值(对插入操作而言,此项为空值)
  • 更新后数据的新值(对删除操作而言, 此项为空值)

日志文件的用途

  1. 事务故障恢复和系统故障恢复必须用日志文件。
  2. 在动态转储方式中必须建立日志文件,后援副本和日志文件综合起来才能有效地恢复数据库。
  3. 在静态转储方式中,也可以建立日志文件。

恢复策略

事务故障的恢复

  • 事务故障:事务在运行至正常终止点前被中止。
  • 恢复方法
    • 由恢复子系统应利用日志文件撤消(UNDO)此事务已对数据库进行的修改。
  • 事务故障的恢复由系统自动完成,不需要用户干预。

事务故障的回复步骤
(1) 反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新操作。
(2)对该事务的更新操作执行逆操作。即将日志记录中“更新前的值”写入数据库。

  • 插入操作,“更新前的值”为空,则相当于做删除操作。
  • 删除操作,“更新后的值”为空,则相当于做插入操作。
  • 若是修改操作,则用修改前的值代替修改后的值。

(3) 继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理。
(4) 如此处理下去,直至读到此事务的开始标记,事务故障恢复就完成了

系统故障的恢复

  • 系统故障造成数据库不一致状态的原因。

    • 一些未完成事务对数据库的更新已写入数据库。
    • 一些已提交事务对数据库的更新还留在缓冲区没来得及写入数据库
  • 恢复方法

    • Undo 故障发生时未完成的事务。
    • Redo 已完成的事务。
  • 系统故障的恢复由系统在重新启动时自动完成,不需要用户干预。

介质故障的恢复

  • 恢复步骤
    (1) 装入最新的后备数据库副本,使数据库恢复到最近一次转储时的一致性状态
    • 对于静态转储的数据库副本,装入后数据库即处于一致性状态。
    • 对于动态转储的数据库副本,还须同时装入转储时刻的日志文件副本,利用与恢复系统故障相同的方法(即redo+undo),才能将数据库恢复到一致性状态。

(2) 装入有关的日志文件副本(转储结束时刻的日志文件副本),重做已完成的事务。
+ 首先扫描日志文件,找出故障发生时已提交的事务的标识,将其记入重做队列。
+ 然后正向扫描日志文件,对重做队列中的所有事务进行重做处理。即将日志记录中“更新后的值”写入数据库。

介质故障的恢复需要DBA介入

  • DBA的工作

    • 重装最近转储的数据库副本和有关的各日志文件副本。
    • 执行系统提供的恢复命令。
  • 具体的恢复操作仍由DBMS完成。

这篇关于数据库系统概论——数据库恢复技术的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1082477

相关文章

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

MySQL MHA集群详解(数据库高可用)

《MySQLMHA集群详解(数据库高可用)》MHA(MasterHighAvailability)是开源MySQL高可用管理工具,用于自动故障检测与转移,支持异步或半同步复制的MySQL主从架构,本... 目录mysql 高可用方案:MHA 详解与实战1. MHA 简介2. MHA 的组件组成(1)MHA

MySQL 数据库进阶之SQL 数据操作与子查询操作大全

《MySQL数据库进阶之SQL数据操作与子查询操作大全》本文详细介绍了SQL中的子查询、数据添加(INSERT)、数据修改(UPDATE)和数据删除(DELETE、TRUNCATE、DROP)操作... 目录一、子查询:嵌套在查询中的查询1.1 子查询的基本语法1.2 子查询的实战示例二、数据添加:INSE

python协程实现高并发的技术详解

《python协程实现高并发的技术详解》协程是实现高并发的一种非常高效的方式,特别适合处理大量I/O操作的场景,本文我们将简单介绍python协程实现高并发的相关方法,需要的小伙伴可以了解下... 目录核心概念与简单示例高并发实践:网络请求协程如何实现高并发:核心技术协作式多任务与事件循环非阻塞I/O与连接

通过DBeaver连接GaussDB数据库的实战案例

《通过DBeaver连接GaussDB数据库的实战案例》DBeaver是一个通用的数据库客户端,可以通过配置不同驱动连接各种不同的数据库,:本文主要介绍通过DBeaver连接GaussDB数据库的... 目录​一、前置条件​二、连接步骤​三、常见问题与解决方案​1. 驱动未找到​2. 连接超时​3. 权限不

MySQL数据库读写分离与负载均衡的实现逻辑

《MySQL数据库读写分离与负载均衡的实现逻辑》读写分离与负载均衡是数据库优化的关键策略,读写分离的核心是将数据库的读操作与写操作分离,本文给大家介绍MySQL数据库读写分离与负载均衡的实现方式,感兴... 目录读写分离与负载均衡的核心概念与目的读写分离的必要性与实现逻辑读写分离的实现方式及优缺点读负载均衡

Go语言中如何进行数据库查询操作

《Go语言中如何进行数据库查询操作》在Go语言中,与数据库交互通常通过使用数据库驱动来实现,Go语言支持多种数据库,如MySQL、PostgreSQL、SQLite等,每种数据库都有其对应的官方或第三... 查询函数QueryRow和Query详细对比特性QueryRowQuery返回值数量1个:*sql

Mysql利用binlog日志恢复数据实战案例

《Mysql利用binlog日志恢复数据实战案例》在MySQL中使用二进制日志(binlog)恢复数据是一种常见的用于故障恢复或数据找回的方法,:本文主要介绍Mysql利用binlog日志恢复数据... 目录mysql binlog核心配置解析查看binlog日志核心配置项binlog核心配置说明查看当前所

Mysql数据库聚簇索引与非聚簇索引举例详解

《Mysql数据库聚簇索引与非聚簇索引举例详解》在MySQL中聚簇索引和非聚簇索引是两种常见的索引结构,它们的主要区别在于数据的存储方式和索引的组织方式,:本文主要介绍Mysql数据库聚簇索引与非... 目录前言一、核心概念与本质区别二、聚簇索引(Clustered Index)1. 实现原理(以 Inno

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从