4.2.1 数据库备份还原

4.2.1 数据库备份还原

4.2.1.1 备份还原相关概念

1.数据库物理备份

数据库备份分为物理备份和逻辑备份两种类型。物理备份是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其他存储介质的过程,是对数据文件、控制文件、归档日志文件的备份,是将实际组成数据库的操作系统文件从一处复制到另一处的备份过程,如图4-1所示。物理备份又分为联机备份(热备份)和脱机备份(冷备份)。

图4-1 物理备份

使用联机备份时,数据库处于运行状态,可以对外提供服务。因此可能存在一些处于活动状态的、正在执行的事务。联机备份是非一致性备份,为确保备份数据的一致性,需要将备份期间产生的REDO日志一起备份。因此,只能在配置本地归档并开启本地归档的数据库上执行联机备份。

使用脱机备份时,数据库必须关闭。脱机备份会强制将检查点之后的有效REDO日志复制到备份集中,因此,脱机备份是一致性备份。数据库正常关闭时,会生成完全检查点,脱机备份生成的备份集中,不包含任何REDO日志。一致性备份的备份集包含完整的数据文件内容和归档日志信息;利用一个单独的备份集可以将数据库状态恢复到备份时的状态。

2.备份策略

备份策略是指确定需要备份的内容、备份时间及备份方式。各个单位要根据自己的实际情况来制定不同的备份策略。目前采用最多的备份策略主要有以下三种。

1)完全备份

完全备份(full backup)是指备份整个数据库,恢复时恢复所有数据。这种备份策略的优点是:当发生数据丢失的“灾难”时,只要有一份备份,就可以恢复丢失的数据。其缺点是:每天都对整个系统进行完全备份,会导致备份的很多数据重复,这些重复的数据占用了大量的存储空间,对用户来说,这意味着成本增加;其次,由于需要备份的数据量较大,因此备份所需的时间也较长,对那些业务繁忙、备份时间有限的单位来说,选择这种备份策略是不明智的。

2)增量备份

增量备份(incremental backup)是指在一次完全备份或上一次增量备份后,每次备份时只需备份与上一次相比增加或者被修改的文件。这就意味着,第一次增量备份的对象是进行完全备份后所产生的增加或者被修改的文件;第二次增量备份的对象是进行第一次增量备份后所产生的增加或者被修改的文件;依此类推。这种备份方式最显著的优点是:没有重复的备份数据,因此备份的数据量不大,备份所需的时间很短。但增量备份的数据恢复是比较麻烦的,必须具有上一次完全备份和所有增量备份,一旦存储备份数据的存储设备损坏,就会导致数据库恢复失败,并且它们必须按从完全备份到依次增量备份的时间顺序逐个反推恢复,这就极大地延长了恢复时间。

3)差异备份

差异备份(differential backup)是指在一次完全备份后到进行差异备份的这段时间内,对那些增加或者被修改的文件的备份。在进行恢复时,只需对第一次完全备份和最后一次差异备份进行恢复。差异备份既避免了上述两种备份策略的缺陷,又具有它们各自的优点。首先,它具有增量备份所需时间短、节省存储空间的优势;其次,它具有完全备份恢复所需数据量小、恢复时间短的特点。系统管理员只进行完全备份与“灾难”发生前一天的差异备份,就可以将系统恢复。

在生产环境中,备份策略在很多时候是混合使用的。例如,在星期天和星期三进行完全备份,在星期一、星期二、星期四、星期五进行增量备份。在星期五,数据被破坏了,如果进行完全恢复,则需要还原星期三正常的完全备份和从星期四至星期五的所有增量备份。

3.逻辑备份与逻辑还原

逻辑备份是对数据库内部逻辑对象的备份,是利用SQL语言从数据库中抽取数据并存于二进制文件的过程,是将指定对象(库级、模式级、表级)的数据导出到文件的备份方式。逻辑备份针对的是数据内容,不关心这些数据的物理存储位置,利用dexp导出工具实现。数据库逻辑备份是物理备份的补充,如图4-2所示。

图4-2 逻辑备份

逻辑还原是逻辑备份的逆过程,利用dimp工具,将dexp导出的备份数据重新导入目标数据库。

4.2.1.2 重做日志和归档模式管理

1.还原和恢复

还原和恢复是备份的逆过程。还原是指将备份集中的有效数据页重新写入目标数据文件的过程。恢复则是指通过重做归档日志,将数据库状态恢复到备份结束时的状态;也可以恢复到指定时间点和指定LSN(log sequence number,日志序列号)。恢复结束后,数据库中可能存在处于未提交状态的活动事务,这些活动事务在恢复结束后的第一次数据库系统启动时,会由达梦数据库自动进行回滚。备份、还原与恢复之间的关系如图4-3所示。

图4-3 备份、还原与恢复之间的关系

2.联机重做日志

重做日志(REDO LOG),记录了所有数据页的修改,包括操作类型、表空间号、文件号、页号、页内偏移、实际数据等的修改。数据库中INSERT、DELETE、UPDATE等DML操作及CREATE TABLE等DDL操作转化为对某些数据文件、某些数据页的修改。通过重做日志可以保证数据库的完整性和一致性。

达梦数据库默认包含两个扩展名为log的联机重做日志文件。这两个文件用来保存REDO日志,循环使用。任何数据页从内存缓冲区写入磁盘之前,必须保证其对应的REDO日志已经写入联机重做日志文件。

我们可以通过以下几个视图来查看重做日志和归档的信息。

(1)V $ RLOG:显示日志的总体信息,包括当前LSN、归档日志、检查点等。

(2)V $ RLOGFILE:显示日志文件的具体信息,包括文件号、完整路径、文件的状态、文件大小等。

(3)V $ ARCHIVED_LOG:显示当前实例的所有归档日志文件信息。

3.归档日志

DM实例可以在归档模式和非归档模式下运行。在归档模式下,会产生归档日志文件。归档日志有本地归档(LOCAL)、远程实时归档(REALTIME)、即时归档(TIMELY)、远程异步归档(ASYNC)、远程归档(REMOTE)5种类型。

1)本地归档

本地归档文件用来存储重做日志文件中的数据。归档线程负责将重做日志数据写入本地归档文件,最多可以设置8个本地归档。启动归档后,如果因为磁盘空间不足日志无法归档,则实例会被强制挂起,直到磁盘空间释放,本地归档可以正常运行,实例才会继续正常执行。

2)远程实时归档

在REDO数据从日志缓冲区写入联机重做日志文件之前,通过MAL系统将REDO日志发送到远程服务器,远程服务器收到REDO日志后,返回确认消息。收到确认消息后,执行后续操作。

如果发送REDO日志失败,或从备库返回的数据库模式不是STANDBY,则将数据库状态切换到SUSPEND状态,阻塞所有REDO日志的写入操作。

3)即时归档

即时归档在主库将REDO日志写入联机重做日志文件之后,通过MAL系统将REDO日志发送到备库。即时归档是读写分离集群的实现基础,与实时归档的主要区别是发送REDO日志的时机不同。一个主库可以配置1~8个即时备库。

4)远程异步归档

在设定的时间点或者每隔设定时间,启动归档REDO日志发送。设置定时归档,必须确保至少有一个本地归档。系统调度线程根据设定,触发归档REDO日志发送事件。通过MAL系统,获取远程服务器的当前LSN,生成发送归档REDO日志任务,加入任务队列。归档任务线程获取任务,通过MAL系统发送到远程服务器。最多可以配置8个远程异步归档。

5)远程归档

远程归档就是将写入本地归档的REDO日志信息,发送到远程节点,并写入远程节点的指定归档目录中。远程归档与本地归档的主要区别是REDO日志写入的位置不同,本地归档将REDO日志写入数据库实例所在节点的磁盘,远程归档则将REDO日志写入其他数据库实例所在节点的指定归档目录。远程归档日志文件的命名规范和本地归档日志文件的命名规范保持一致,都是以“归档名+归档文件的创建时间”进行组合命名的。最多可以配置8个远程归档。

备注:MAL系统是DM内部高速通信系统,基于TCP/IP协议实现。服务器的很多重要功能都是通过MAL系统实现通信的,如数据守护、数据复制、MPP(massively parallel processing)、远程日志归档等。MAL系统内部包含一系列线程,如MAL监听线程、MAL发送工作线程、MAL接收工作线程等。

LSN是由系统自动维护的Bigint类型数值,具有自动递增、全局唯一特性,每一个LSN值代表DM系统内部产生的一个物理事务。物理事务(physical transaction,ptx)是数据库内部一系列修改物理数据页操作的集合,与数据库管理系统中事务(transaction)概念相对应,具有原子性、有序性、无法撤销等特性。