DM 备份与还原

一 达梦备份与恢复概念学习 

 

1. 备份还原简介 

达梦备份的本质就是从数据库文件中拷贝有效的数据页保存到备份集中,这里的有效数据页包括数据文件的描述页和被分配使用的数据页。而在备份的过程中,如果数据库系统还在继续运行,这期间的数据库操作并不是都会立即体现到数据文件中,而是首先以日志的形式写到归档日志中,因此,为了保证用户可以通过备份集将数据恢复到备份结束时间点的状态,就需要将备份过程中产生的归档日志也保存到备份集中。 

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

1) LSN 

LSN(Log Sequence Number)是由系统自动维护的Bigint类型数值,具有自动递增、全局唯一特性,每一个LSN值代表着DM系统内部产生的一个物理事务。物理事务(Physical Transaction,简称ptx)是数据库内部一系列修改物理数据页操作的集合,与数据库管理系统中事务(Transaction)概念相对应,具有原子性、有序性、无法撤销等特性。达梦数据库主要有以下几种LSN: 

A. CUR_LSN是系统已经分配的最大LSN值。物理事务提交时,系统会为其分配一个唯一的LSN值,大小等于CUR_LSN+1,然后再修改CUR_LSN=CUR_LSN+1。 

B. FLUSH_LSN是已经发起日志刷盘请求,但还没有真正写入联机Redo日志文件的最大LSN值。 

C. FILE_LSN是已经写入联机Redo日志文件的最大LSN值。每次将Redo日志包RLOG_PKG写入联机Redo日志文件后,都要修改FILE_LSN值。 

D. CKPT_LSN是检查点LSN,所有LSN <= CKPT_LSN的物理事务修改的数据页,都已经从Buffer缓冲区写入磁盘,CKPT_LSN由检查点线程负责调整。数据库故障重启时,CKPT_LSN之前的REDO日志不需要重做,只需要从CKPT_LSN+1开始重做REDO日志,就可以将系统恢复到故障前状态。并且,在联机重做日志文件中,LSN值<=CKPT_LSN的REDO日志都可以被覆盖。 

E. APPLY_LSN是数据库还原恢复后已经写入联机Redo日志文件的日志包的原始最大LSN值,APPLY_LSN取自源库的原始日志包中的最大LSN值。DSC集群的每一个节点独立维护APPLY_LSN。 

F. RPKG_LSN是数据库还原恢复后已经重演日志的最大LSN。DSC集群的每一个节点独立维护RPKG_LSN。 

2) 包序号 

每个RLOG_PKG都有对应的序号属性,称之为包序号(PKG SEQNO),日志包生成时按照序号连续递增。包序号包括本地包序号(LSEQ)和全局包序号(GSEQ),本地包序号是节点内唯一、连续递增的值,用于校验联机日志连续性;全局包序号由数据守护集群的主备库共同维护,具有全局唯一、连续、递增的特性,用于校验归档日志的连续性。 

达梦数据库主要有以下几种全局包序号: 

A. CUR_SEQ是系统已经分配的最大全局包序号。RLOG_PKG写入联机日志文件前,系统会为其分配一个唯一的全局包序号。 

B. FILE_SEQ是已经写入联机Redo日志文件的最大全局包序号。每次将Redo日志包RLOG_PKG写入联机Redo日志文件后,都要修改FILE_SEQ值。 

C. APPLY_SEQ是数据库还原恢复后已经写入联机Redo日志文件的原始最大全局包序号,APPLY_SEQ取自源库的原始日志包的包序号。DSC集群的每一个节点独立维护APPLY_SEQ。 

D. RPKG_SEQ是数据库还原恢复后已经重演日志的最大全局包序号。DSC集群的每一个节点独立维护RPKG_SEQ。 

3) 检查点 

检查点(checkpoint)是一个数据库事件,它的功能是按照数据页的修改顺序,依次将BUFFER缓冲区中的脏页写入磁盘,并在这个过程中动态调整CKPT_LSN值,释放日志空间。 

达梦数据库的检查点主要有以下两种: 

A. 完全检查点:会将内存缓冲区中的所有脏页写入磁盘,并调整CKPT_LSN,在数据库正常关闭时会产生一个完全检查点。 

B. 部分检查点 :根据dm.ini配置文件中的参数CKPT_FLUSH_RATE和CKPT_FLUSH_PAGES,确定每次检查点刷脏页的数量。执行部分检查点的过程中,DDL/DML操作都可以正常执行,DM 系统中绝大多数情况下触发的都是部分检查点。 

4) 备份集 

备份集用来存放备份过程中产生的备份数据及备份信息。一个备份集对应了一次完整的备份。一般情况下,一个备份集就是一个目录,备份集包含一个或多个备份片文件,以及一个备份元数据文件。并行备份和非并行备份情况下,备份集里的内容略有不同。类似于爱数备份概念中的一个完备副本。 

A. 备份片 

备份片用来存储备份数据的文件。备份时,目标数据文件内容或归档日志内容经过处理后,都会存放到各自的备份片文件中。备份片文件后缀为.bak,用来存放备份数据,备份集中存放数据页的备份片称为数据备份片,存放REDO日志的备份片称为日志备份片。 

B. 元数据 

元数据文件用来存放备份信息,元数据文件的后缀为.meta。通过元数据文件,可以了解整个备份集信息。元数据文件中包含的备份信息包括: 

※备份集本身相关的信息,如是否联机备份,备份的范围,备份的加密信息,以及备份的压缩信息等; 

※备份源库的建库参数信息,如DSC的节点数,是否大小写敏感,PAGE_CHECK属性等; 

※数据文件信息,如备份了哪些数据文件,文件大小,以及文件相关的表空间信息等; 

※备份片的信息,如包含哪些备份片文件、备份片大小等信息; 

※备份库的dm.ini参数信息和密钥文件(dm_service.prikey或者dm_external.config,若指定usbkey加密,则不备份)。 

C. 备份集搜索目录 

备份集搜索目录,用于搜集目标备份集的文件路径。备份集搜索目录包括4类: 

※数据库的默认备份目录; 

※WITH BACKUPDIR子句指定的目录; 

※还原时备份集所在的上级目录; 

※增量备份时基备份集所在的上级目录。 

如果使用第三方备份(介质为TAPE类型),则只搜索WITH BACKUPDIR子句指定的备份集目录,具体搜集方式由第三方备份程序决定。 

WITH BACKUPDIR子句指定的目录列表,包含非法目录或目录不存在时,不会报错,只在日志中打印警告。 

5) 备份 

A. 逻辑备份与物理备份 

逻辑备份是指利用dexp导出工具,将指定对象(库级、模式级、表级)的数据导出到文件的备份方式。逻辑备份针对的是数据内容,并不关心这些数据物理存储在什么位置。(类似于Oracle的数据泵expdp) 

物理备份则直接扫描数据库文件,找出那些已经分配、使用的数据页,拷贝并保存到备份集中。物理备份过程中,不关心数据页的具体内容是什么,也不关心数据页属于哪一张表,只是简单的根据数据库文件系统的描述,来挑选有效的数据页。(类似于Oracle的RMAN) 

B. 联机备份与脱机备份 

联机备份 

脱机备份 

定义 

数据库处于运行状态、并正常提供数据库服务 

数据库处于关闭状态 

备份方式 

通过执行SQL语句或定时作业 

DMRMAN工具 

一致性 

使用归档日志保证一致性 

一定是一致性备份 

C. 数据备份与归档日志备份 

数据备份主要针对数据文件内容,包括库备份、表空间备份和表备份。 

数据备份的整库备份时会包含归档日志;归档日志备份不包括数据。 

D. 日志备份范围 

※节点 BEGIN_LSN:为了保证备份的完整性和有效性,必须包含的归档日志起始LSN值。BEGIN_LSN=备份开始时检查点偏移前一个RLOG_PKG的max_lsn。 

※节点 BEGIN_SEQ:BEGIN_SEQ 记录了 BEGIN_LSN 所在 Redo 日志包的序号。 

※节点 END_LSN:为了保证备份的完整性和有效性,必须包含归档日志结束LSN值。END_LSN=备份结束时FILE_LSN。 

※节点 END_SEQ:BEGIN_SEQ记录了END_LSN所在Redo日志包的序号。 

※BAK_END_LSN:备份结束时,可以保证事务一致性的全局备份结束LSN。单节点BAK_END_LSN等于END_LSN;DSC集群环境中,每个节点的END_LSN都不相同,BAK_END_LSN大于等于最大的END_LSN。 

E. 一致性备份与非一致性备份 

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

非一致性备份的备份集只包含数据文件相关内容,没有归档日志信息,利用非一致性备份还原的数据库,无法直接启动,必须借助归档日志来恢复。表空间备份、指定WITHOUT LOG选项的联机备份生成的备份集都是非一致性备份集。 

F. 完全备份和增量备份 

达梦数据库的整库备份和表空间备份支持增量备份,表备份不支持增量备份。 

达梦数据库的增量备份主要分为以下两种: 

※差异增量备份(差异备份) 

差异备份基于上一次备份的基础上进行,上一次备份既可以是完备也可以是增备 

※累积增量备份(增量备份) 

增量备份只能基于上次完备的副本进行,不可以是增量备份 

6) 还原与恢复 

由于联机备份时,系统中可能存在一些处于活动状态的事务正在执行,并不能保证备份集中的所有数据页是处于一致性状态;而脱机备份时,数据页不一定是正常关闭的,也不能保证备份集中所有数据页是处于一致性状态。因此,还原结束后目标库有可能处于非一致性状态,不能马上提供数据库服务;必须要进行数据库恢复操作后,才能正常启动。 

A. 逻辑还原与物理还原 

逻辑还原是逻辑备份的逆过程,逻辑还原就是使用dimp工具,把dexp导出的备份数据重新导入到目标数据库。(类似于数据泵impdb) 

物理还原是物理备份的逆过程,物理还原一般通过DMRMAN工具(或者SQL语句),把备份集中的数据内容(数据文件、数据页、归档文件)重新拷贝、写入目标文件。 

B. 联机还原与脱机还原 

联机还原指数据库处于运行状态时,通过 SQL 语句执行还原操作。表还原可以在联机状态下执行。 

脱机还原指数据库处于关闭状态时执行的还原操作,脱机还原通过DMRMAN工具进行。库备份、表空间备份和归档备份,可以执行脱机还原。脱机还原操作的目标库必须处于关闭状态。 

C. 数据还原与归档还原 

库还原和表空间必须脱机执行; 

表还原操作只能联机执行。归档日志还原则将归档日志备份集中的归档日志内容,重新生成到指定目录中。 

D. 完全还原与增量还原 

完全还原是指直接利用完全备份集进行数据还原操作。增量还原指通过增量备份集进行数据还原操作。 

2. 介质管理层 

DM通过介质管理层MML,将备份、还原和恢复过程中备份片文件和元数据文件的读取写入动作进行抽象、隔离,备份还原过程中MML层会调用一组SBT接口来访问备份存储介质。SBT接口是DM定义的一组API函数,允许第三方厂商定制、管理备份存储介质;DM系统自带的备份还原功能也遵循了SBT规范。 

3. 备份方式 

A. DMAP 辅助进程方式 

可支持第三方备份(指定DEVICE TYPE为TAPE)。DMAP插件执行,改造了备份还原任务子系统,允许指定并行度,大幅提升了备份还原的效率,特别是加密、压缩的处理效率。如果选择使用DMAP辅助进程,执行备份还原之前就必须启动DMAP服务。 

B. 无辅助进程方式 

不依赖DMAP,由主进程dmserver自身执行备份还原,但不支持第三方备份(指定DEVICE TYPE为TAPE)。 

4. 归档说明 

1) 归档切换 

语法如下: 

alter database archivelog current; 

alter system archive log current; 

alter system switch logfile; 

2) 归档修复 

当数据库异常关闭导致redo日志未正常及时写入归档日志时,重启数据库后需要对归档日志进行修复工作,具体流程如下: 

A. 收集本地归档日志文件; 

B. 扫描归档文件,获取最后一个有效RLOG_PKG偏移 

C. 首先,根据偏移来截取最后一个本地归档日志文件中有效内容,删除掉RLOG_PKG偏移之后的多余内容,保留RLOG_PKG偏移之前的内容,并调整日志文件头信息。然后,再创建一个新的空的归档日志文件; 

D. 扫描联机日志文件,拷贝缺失的REDO日志并写入新创建的归档日志文件。 

5. 备份原理说明 

任何一个对数据库的操作,归根结底都是对某个数据文件页的读写操作。物理备份就是把这些数据文件中的有效数据页备份起来,在出现故障时,用于恢复数据。DM的物理备份一般包括数据备份和日志备份两部分,数据备份是拷贝数据页内容,日志备份则是拷贝备份过程中产生的REDO日志。 

1) 完全备份 

执行完全备份,备份程序会扫描数据文件,拷贝所有被分配、使用的数据页,写入到备份片文件中。库备份会扫描整个数据库的所有数据文件,表空间备份则只扫描表空间内的数据文件。若执行库备份,则备份数据文件包括除TEMP表空间以外的其他表空间内的所有数据文件。 

2) 增量备份 

执行增量备份,备份程序会扫描数据文件,拷贝所有基备份结束以后被修改的数据页,写入到备份片文件中。 

3) 日志备份 

所谓日志备份,就是将备份过程中产生的 REDO 日志拷贝到备份片文件中,用来在数据库还原结束后,将数据库恢复到一致性状态。 

4) 压缩与加密 

DM支持对备份数据进行压缩和加密处理,用户在执行备份时,可以指定不同的压缩级别,以获得不同的数据压缩比。默认情况下,备份是不进行压缩和加密处理的, 

DM共支持9个级别(1~9 级)的压缩处理,级别越高压缩比越高,但相应的压缩速度越慢、CPU开销越大。 

6. 数据还原 

1) 库还原 

库还原就是根据库备份集中记录的文件信息重新创建数据库文件,并将数据页重新拷贝到目标数据库的过程。DM 既可以将一个已存在的数据库作为还原目标库,也可以指定一个路径作为还原目标库的目录。库还原的主要步骤包括:清理目标库环境;重建数据库文件;拷贝数据页;重建联机日志文件;修改配置参数等 

A. 清理目标库环境 

如果指定已存在的数据库作为还原目标库,还原操作首先解析dm.ini配置文件,获取dm.ctl控制文件路径,删除控制文件中的数据文件,然后根据OVERWRITE选项,如果指定OVERWRITE选项,若待还原文件存在,则删除;如果未指定OVERWRITE选项,若待还原文件存在,则报错,但保留目标库的日志文件、控制文件等。 

如果指定还原到一个目录,则根据OVERWRITE参数选择策略,检查目标目录内的dm.ini文件、dm.ctl文件、默认的日志文件DBNAME01.log和DBNAME02.log(其中DBNAME 为数据库名称)、待还原的数据文件等。如果用户指定OVERWRITE参数,并且存在相关文件情况下,还原过程中会自动删除这些已经存在的文件;如果没有指定OVERWRITE参数,并且存在相关文件,则会报错。 

B. 重建数据库文件 

如果将一个已存在数据库作为还原目标,则需要将目标数据库的dm.ini路径作为还原参数。还原过程中,会重新创建数据文件,并将相关信息写入dm.ctl控制文件中。 

如果将数据库还原到指定目录,则会在这个目录创建一个dm.ini配置文件,设置CTL_PATH、SYSTEM_PATH配置项指向这个目录,并在这个目录下创建dm.ctl控制文件。 

DMDSC不支持指定目录还原数据库。 

C. 重建联机日志文件 

指定目录还原,系统目录使用指定还原目录,所有库配置文件均认为在指定还原目录下。联机日志文件命名规则,单机环境为db_name+文件编号.log,其中db_name取自备份集备份库的名称,文件编号从1开始,如DAMENG01.log、DAMENG02.log。联机日志文件至少2个。 

D. 拷贝数据页 

拷贝数据页是从备份集中读取数据页,并将数据页写入数据文件指定位置的过程。 

E. 重置目标库 

具体包括: 

※更新日志信息,设置当前CKPT_LSN为备份集中BEGIN_LSN,并设置日志文件状态为INACTIVE; 

※更新DB_MAGIC,还原后,库中PERMANENT_MAGIC仍与备份集中相同; 

※设置还原标志,标识当前库为指定库要还原的库,不允许使用; 

※更新目标库的控制文件dm.ctl,把当前库中的数据文件信息都记录到控制文件中,使用备份集中的服务器秘钥文件,重新生成新的秘钥文件。 

F. 修改配置参数 

还原到指定库时,默认会保留目标库的配置参数不变,也可以在还原时指定REUSE DMINI 子句,使用备份集中的配置参数替换目标库dm.ini中的配置参数。 

还原到指定目录时,会重新建立一个dm.ini配置文件,并用备份集中的参数值来设置这些配置项。 

2) 表空间还原 

表空间还原是根据库备份集或表空间备份集中记录的数据信息,重建目标表空间数据文件并拷贝数据页的过程,该过程不涉及日志操作。 

表空间还原只可以在脱机状态下执行。脱机时通过DMRMAN工具执行,对表空间状态没有限制。 

表空间还原后如果表空间状态为RES_OFFLINE,表明目标表空间已进行还原操作,但数据不完整。 

在部分数据文件损坏,或者部分物理磁盘损坏情况下,我们可以指定还原数据文件,跳过那些不正常的数据文件,以提升还原速度。 

3) 表还原 

表还原是表备份的逆过程,表还原从表备份集中读取数据替换目标表,将目标表还原成备份时刻的状态。表还原主要包括三部分内容:表结构还原、数据还原、以及重建索引和约束。 

如果还原目标表不存在,则利用备份集中记录的建表语句重建目标表;如果还原目标表已经存在,则清除表中的数据、删除二级索引和约束;如果备份表存在附加列(通过ALTER TABLE语句快速增加的列),那么还原目标表必须存在、并且目标表所有列的物理存储格式必须与备份源表完全一致。 

数据还原过程从表备份集拷贝数据页,重构数据页之间的逻辑关系,并重新形成一个完整的表对象。 

在数据还原结束后,使用备份集中记录的信息,重新在表上创建二级索引,并建立各种约束。 

表还原只支持在联机状态下执行,表还原过程中也不需要重做REDO日志。并且,表备份集允许跨库还原,但要求还原目标库与源库的数据页大小等建库参数相同。需要匹配的建库参数参考下表。 

7. 数据恢复 

数据恢复是指在还原执行结束后,重做REDO日志,将数据库恢复到一致性状态,并执行更新 DB_MAGIC 的过程。 

1) 指定备份集恢复 

默认未指定WITHOUT LOG子句的联机库备份生成的备份集,包含了备份过程中产生的REDO日志,数据还原结束后,可以直接指定备份集,将数据库恢复到备份结束时的状态。 

指定备份集恢复的简要过程包括: 

A. 从备份集读取REDO日志,并生成一个临时的本地归档日志文件; 

B. 利用生成的临时归档日志文件,重做REDO日志,并将数据修改写入磁盘; 

C. 删除临时生成的归档日志文件; 

D. 更新数据库日志信息,设置CKPT_LSN为最后一个重做的REDO日志LSN值; 

E. 修改数据状态为ACTIVE,标记数据库启动时需要进行相应的回滚活动事务、PURGE 已提交事务。 

2) 指定归档恢复 

如果备份时指定了WITHOUT LOG子句,那么产生的备份集不包含备份过程中产生的REDO日志。这种备份集还原后,必须利用本地归档日志,将数据库恢复到一致性状态。 

指定归档恢复的执行场景主要包括: 

※将还原后处于非一致性状态的数据库恢复到一致性状态 

※将已经处于一致性状态的数据库尽可能地恢复到最新状态 

※将数据库恢复到指定时间点状态 

※将数据库恢复到指定LSN产生时的状态 

3) 更新DB_MAGIC 

若备份集满足BEGIN_LSN等于END_LSN,即在备份过程中未产生REDO日志,则使用此备份集还原后只需要更新DB_MAGIC即可完成恢复。更新DB_MAGIC不重做REDO日志,仅仅更新库的DB_MAGIC值和数据库状态。 

二 备份还原实操 

1. 限制 

1) 联机备份 

※MPP 环境仅允许库和归档备份,且各节点都会执行,生成相应的备份集,支持DDL CLONE; 

※DSC环境支持库备份、表空间备份和表备份,要求DSC环境的所有节点都处于OPEN状态; 

※MOUNT状态仅支持归档备份; 

※SUSPEND状态所有备份均不支持; 

※OPEN状态支持所有备份,支持DDL CLONE; 

※PRIMARY模式支持所有备份,支持DDL CLONE; 

※STANDBY模式仅支持库级、表空间级和归档备份,支持DDL CLONE; 

※DDL CLONE必须备份归档,不允许指定WITHOUT LOG。 

2) 联机还原: 

※MPP和分布式数据库不支持; 

※PRIMARY支持; 

※SUSPEND状态所有还原均不支持; 

※OPEN/NORMAL支持。 

3) 脱机备份 

※MPP视同单机环境,仅当前节点执行备份操作; 

※允许异常退出后备份,支持DDL_CLONE; 

※DSC支持库级备份,支持DDL_CLONE;当DSC环境下正常节点的CKPT_LSN小于故障节点的CKPT_LSN时,不支持脱机备份。 

4) 脱机还原 

脱机还原跟目标库所处的模式、状态以及集群环境(MPP和DSC)无关,允许库级、表空间级和归档还原。 

2. 利用SQL语句进行备份 

1) 整库备份 

语法如下: 

BACKUP DATABASE [[[FULL] [DDL_CLONE]]| INCREMENT [CUMULATIVE][WITH BACKUPDIR '<基备份搜索目录>'{,'<基备份搜索目录>'}]|[BASE ON BACKUPSET '<基备份目录>']][TO <备份名>][BACKUPSET '<备份集路径>'][DEVICE TYPE <介质类型> [PARMS '<介质参数>']] [BACKUPINFO '<备份描述>'] [MAXPIECESIZE <备份片限制大小>] [LIMIT <read_limit>|<write_limit>]  

[IDENTIFIED BY <密码>|”<密码>” [WITH ENCRYPTION <TYPE>][ENCRYPT WITH <加密算法>]][COMPRESSED [LEVEL <压缩级别>]] [WITHOUT LOG][TRACE FILE '<TRACE 文件名>'] [TRACE LEVEL <TRACE 日志级别>] [TASK THREAD <线程数>][PARALLEL [<并行数>] [READ SIZE <拆分块大小>]];<read_limit>::= READ SPEED <读速度上限> [WRITE SPEED <写速度上限>]<write_limit>::= WRITE SPEED <写速度上限> 

示例:进行基础的整库备份 

SQL>BACKUP DATABASE BACKUPSET 'db_bak_01'; 

备份集如下 

2) 常见备份选项 

A. 设置联机数据库备份路径 

示例: 

SQL>BACKUP DATABASE BACKUPSET 'D:\dmdbms\dmbak\db_bak_3_01'; 

备份集如下: 

B. 设置备份名 

示例: 

SQL>BACKUP DATABASE TO WEEKLY_FULL_BAK BACKUPSET ‘D:\dmdbms\dmbak\db_bak_3_02'; 

备份集如下: 

C. 增量备份指定基备份集路径 

BASE ON BACKUPSET参数用于增量备份中,用来指定基备份集路径。如果不指定该参数,会在备份搜索目录中搜索最近一次的完全备份或增量备份作为这次增量备份的基备份。若需要在特定的备份集基础上执行增量备份就需要使用该参数。 

示例: 

SQL>backup database backupset 'db_full_bak_01'; 

SQL>backup database increment backupset 'db_increment_bak_01'; 

SQL>backup database increment base on backupset'db_full_bak_01' backupset 'db_increment_bak_02'; 

备份集如下: 

D. 添加备份描述 

联机备份可选择对执行的备份添加描述信息,相比备份名参数,描述信息可以更详细地对备份类型、用途、场景等进行说明。描述信息最大长度支持256个字节。 

示例: 

SQL>backup database backupset 'D:\dmdbms\dmbak\db_bak_3_04' backupinfo '完全备份'; 

备份集如下: 

E. 限制备份片大小 

MAXPIECESIZE参数用于控制单个备份片的大小,当介质管理器对单个文件的大小有限制或者需要备份的数据文件很大时就可以使用这个参数。MAXPIECESIZE 不能大于磁盘 

剩余空间大小,否则报错磁盘空间不足。 

示例: 

SQL> backup database backupset 'D:\dmdbms\dmbak\db_bak_3_05' maxpiecesize 300; 

备份集如下: 

F. 备份压缩 

示例: 

SQL>backup database backupset 'D:\dmdbms\dmbak\db_bak_3_06' compressed level 5; 

备份集如下: 

可以看到,经过5级压缩后,备份集大小较原来小了很多。 

G. 并行备份 

SQL>backup database backupset 'd:\dmdbms\dmbak\db_bak_3_07' parallel 8; 

备份集如下: 

3) 表空间备份 

语法如下: 

BACKUP TABLESPACE <表空间名> [FULL | INCREMENT [CUMULATIVE][WITH BACKUPDIR '<基备份搜索目录>'{,'<基备份搜索目录>'}]| [BASE ON BACKUPSET '<基备份集目录>']][TO <备份名>] [BACKUPSET '<备份集路径>'][DEVICE TYPE <介质类型> [PARMS '<介质参数>']][BACKUPINFO '<备份描述>'] [MAXPIECESIZE <备份片限制大小>] [LIMIT <read_limit>|<write_limit>] [IDENTIFIED BY <密码>|”<密码>” [WITH ENCRYPTION<TYPE>][ENCRYPT WITH <加密算法>]] [COMPRESSED [LEVEL <压缩级别>]][TRACE FILE '<TRACE 文件名>'] [TRACE LEVEL <TRACE 日志级别>][TASK THREAD <线程数>][PARALLEL [<并行数>][READ SIZE <拆分块大小>]];<read_limit>::= READ SPEED <读速度上限> [WRITE SPEED <写速度上限>]<write_limit>::= WRITE SPEED <写速度上限> 

示例: 

SQL>backup tablespace main backupset 'ts_bak_01'; 

备份集如下: 

4) 表备份 

语法如下: 

BACKUP TABLE <表名> [TO <备份名>] [BACKUPSET '<备份集路径>'] [DEVICE TYPE <介质类型> [PARMS '<介质参数>']] [BACKUPINFO '<备份描述>'] [MAXPIECESIZE <备份片限制大小>] [LIMIT <read_limit>|<write_limit>] [IDENTIFIED BY <密码>|”<密码>” [WITH ENCRYPTION <TYPE>][ENCRYPT WITH <加密算法>]] [COMPRESSED [LEVEL <压缩级别>]] [TRACE FILE '<TRACE 文件名>'] [TRACE LEVEL <TRACE 日志级别>]; <read_limit>::= READ SPEED <读速度上限> [WRITE SPEED <写速度上限>] <write_limit>::= WRITE SPEED <写速度上限> 

示例: 

SQL>backup table table_01 backupset 'tab_bak_01'; 

备份集如下: 

5) 归档备份 

A. 全部归档备份 

语法如下: 

BACKUP <ARCHIVE LOG |ARCHIVELOG> [ALL | [FROM LSN <lsn>]| [UNTIL LSN <lsn>]|[LSN BETWEEN <lsn> AND <lsn>] | [FROM TIME '<time>']|[UNTIL TIME '<time>']|[TIME BETWEEN'<time>'> AND '<time>']][<notBackedUpSpec>][DELETE INPUT][TO <备份名>][<备份集子句>];<备份集子句>::=BACKUPSET ['<备份集路径>'][DEVICE TYPE <介质类型> [PARMS '<介质参数>']][BACKUPINFO '<备份描述>'] [MAXPIECESIZE <备份片限制大小>] [IDENTIFIED BY <密码>|”<密码>” [WITH ENCRYPTION <TYPE>][ENCRYPT WITH <加密算法>]][COMPRESSED [LEVEL <压缩级别>]] [WITHOUT LOG][TRACE FILE '<TRACE 文件名>'] [TRACE LEVEL <TRACE 日志级别>][TASK THREAD <线程数>][PARALLEL [<并行数>][READ SIZE <拆分块大小>]]<notBackedUpSpec>::=NOT BACKED UP [<num> TIMES]|[SINCE TIME '<datetime_string>'] 

示例: 

SQL>backup archive log all backupset 'arch_bak_01'; 

备份集如下: 

B. 指定LSN备份 

使用语句查询LSN 

SQL>select ARCH_LSN, CLSN, PATH from V$ARCH_FILE; 

假设备份LSN 30000到40000之间的归档日志,语句如下: 

SQL>backup archivelog lsn between 30000 and 40000 backupset 'D:\dmdbms\dmbak\arch_bak_time_30k-40k'; 

备份集如下: 

6) 加密备份 

示例: 

SQL>backup database backupset 'D:\dmdbms\dmbak\db_bak_for_encrypt' identified by "pxd123456" encrypt with rc4; 

备份集如下: 

对于增量备份加密,如果基备份存在加密,则增量备份使用的加密密码、加密类型和加密算法必须与基备份保持一致;如果基备份未进行加密处理,则对增量备份使用的加密密码、加密类型和加密算法没有特殊要求。 

7) 设置跟踪日志文件 

DM备份时支持设置跟踪日志文件,日志记录了SBT接口的调用过程,用户通过查看日志可跟踪备份还原过程。 

示例: 

sql>backup database backupset 'D:\dmdbms\dmbak\db_bak_for_trace' trace file' D:\dmdbms\dmlog\db_trace.log' trace level 1; 

备份集如下: 

8) 管理备份 

管理过程主要函数如下: 

SF_BAKSET_BACKUP_DIR_ADD:添加备份目录。 

SF_BAKSET_BACKUP_DIR_REMOVE:删除内存中指定的备份目录。 

SF_BAKSET_BACKUP_DIR_REMOVE_ALL:删除内存中全部的备份目录。 

SF_BAKSET_CHECK:对备份集进行校验。 

SF_BAKSET_REMOVE:删除指定设备类型和指定备份集目录的备份集。 

SF_BAKSET_REMOVE_BATCH:批量删除满足指定条件的所有备份集。 

SP_DB_BAKSET_REMOVE_BATCH:批量删除指定时间之前的数据库备份集。 

SP_TS_BAKSET_REMOVE_BATCH:批量删除指定表空间对象及指定时间之前的表 

空间备份集。 

SP_TAB_BAKSET_REMOVE_BATCH:批量删除指定表对象及指定时间之前的表备 

份集。 

SP_ARCH_BAKSET_REMOVE_BATCH:批量删除指定条件的归档备份集。 

备份管理相关动态视图总结如下: 

V$BACKUPSET:显示备份集基本信息。 

V$BACKUPSET_DBINFO:显示备份集的数据库相关信息。 

V$BACKUPSET_DBF:显示备份集中数据文件的相关信息。 

V$BACKUPSET_ARCH:显示备份集的归档信息。 

V$BACKUPSET_BKP:显示备份集的备份片信息。 

V$BACKUPSET_SEARCH_DIRS:显示备份集搜索目录。 

V$BACKUPSET_TABLE:显示表备份集中备份表信息。 

V$BACKUPSET_SUBS:显示并行备份中生成的子备份集信息。 

V$BACKUP_MONITOR:显示当前备份任务实时监控信息。 

V$BACKUP_HISTORY:显示最近 100 条备份监控信息。 

V$BACKUP_FILES:显示当前备份任务待备份数据文件列表。 

示例: 

A. 备份集校验 

SQL>backup database full backupset 'D:\dmdbms\dmbak\db_bak_for_check'; 

SQL>select sf_bakset_check('disk','D:\dmdbms\dmbak\db_bak_for_check'); 

返回结果为1,证明备份集校验无误 

B. 备份集删除 

SQL>select sf_bakset_remove('disk','D:\dmdbms\dmbak\db_bak_for_check'); 

返回结果为1,证明备份集已成功删除 

C. 删除指定条件的备份集 

SQL>select sf_bakset_remove_batch ('disk', now(), null, null); 

返回结果为1,证明到目前为止的所有默认备份目录下的备份集均被删除 

3. 利用SQL语句进行还原 

1) 表还原 

语法如下: 

RESTORE TABLE [<表名>] [STRUCT] [KEEP TRXID]FROM BACKUPSET'<备份集路径>' [DEVICE TYPE <介质类型> [PARMS '<介质参数>']][IDENTIFIED BY <密码>|”<密码>” [ENCRYPT WITH <加密算法>]][TRACE FILE '<TRACE 文件名>'] [TRACE LEVEL <TRACE 日志级别>]; 

实例:将table_1表删除后还原 

删除表 

新建空表,表名为table_1 

然后使用sql语句将备份集还原 

SQL>restore table table_1 from backupset 'tab_bak_01'; 

恢复完成,数据已成功恢复 

2) 表还原中需要注意的点: 

A. 若为加密库,表还原时要求源库与目标库加密算法一致。 

B. 备份集路径指备份集所在目录,其中应包含完整备份数据,包括元数据文件(.meta)和备份片文件(.bak)。仅支持从表备份集中还原表。 

C. 表名设置为可选参数。若指定,则数据库中必须存在该表且表定义必须与备份表严格一致;若不指定,则使用备份集中记录的备份表作为还原目标表。 

D. 目标表所在的表空间必须处于联机状态。 

E. 数据守护环境下,主库允许表备份还原,备库不允许。 

F. MOUNT 和 SUSPEND 状态下不允许进行表还原。 

G. MPP 环境不允许进行表还原。 

4. 使用脱机工具 DMRMAN 进行备份 

1) DMRMAN概述 

2) DMRMAN环境配置 

使用CONFIGURE命令进行DMRMAN的默认参数配置,配置默认的存储介质类型、跟踪日志文件、备份集搜集目录、归档日志搜集目录。语法如下: 

CONFIGURE | 

CONFIGURE CLEAR | 

CONFIGURE DEFAULT <sub_conf_stmt><sub_conf_stmt>::=DEVICE [[TYPE <介质类型> [PARMS '<介质参数>']]|CLEAR] |TRACE [[FILE '<跟踪日志文件路径>'][TRACE LEVEL <跟踪日志等级>]|CLEAR] |BACKUPDIR [[ADD|DELETE] '<基备份搜索目录>'{,'<基备份搜索目录>' }|CLEAR] |ARCHIVEDIR [[ADD|DELETE] '<归档日志目录>'{,'<归档日志目录>'}|CLEAR] 

3) 备份 

在DMRMAN工具中使用BACKUP命令可以备份整个数据库。使用DMRMAN脱机备份数据库需要关闭数据库实例。若是正常退出的数据库,则脱机备份前不需要配置归档;若是故障退出的数据库,则备份前,需先进行归档修复。 

语法如下: 

BACKUP DATABASE '<INI 文件路径 >' [[[FULL][DDL_CLONE]] |INCREMENT [CUMULATIVE][WITH BACKUPDIR '<基备份搜索目录>'{,'<基备份搜索目录>'}]|[BASE ON BACKUPSET '<基备份集目录>']][TO <备份名>] [BACKUPSET '<备份集路径>'][DEVICE TYPE <介质类型>[PARMS '<介质参数>'] [BACKUPINFO '<备份描述>'] [MAXPIECESIZE <备份片限制大小>] [LIMIT <read_limit>|<write_limit>] [IDENTIFIED BY <密码>|”<密码>” [WITH ENCRYPTION <TYPE>][ENCRYPT WITH <加密算法>]][COMPRESSED [LEVEL <压缩级别>]][WITHOUT LOG] [TASK THREAD <线程数>][PARALLEL [<并行数>][READ SIZE <拆分块大小>]];<read_limit>::= READ SPEED <读速度上限> [WRITE SPEED <写速度上限>] 

<write_limit>::= WRITE SPEED <写速度上限> 

示例: 

RMAN>backup database 'D:\dmdbms\data\DAMENG\dm.ini'; 

备份集如下: 

A. 完全备份 

RMAN>backup database 'D:\dmdbms\data\DAMENG\dm.ini' full backupset 'D:\dmdbms\dmbak\db_full_bak_01'; 

备份集如下: 

B. 增量备份 

RMAN>backup database 'D:\dmdbms\data\DAMENG\dm.ini' increment with backupdir 'D:\dmdbms\dmbak\' backupset 'D:\dmdbms\dmbak\db_increment_bak_02'; 

备份集如下: 

C. 归档日志备份 

语法如下: 

BACKUP<ARCHIVE LOG | ARCHIVELOG>[ALL | [FROM LSN <lsn>]|[UNTIL LSN <lsn>] | [LSN BETWEEN < lsn> AND < lsn>] | [FROM TIME '<time>'] | [UNTIL TIME '<time>'] | [TIME BETWEEN '<time>' AND '<time>']] [<notBackedUpSpec>][DELETE INPUT]DATABASE '<INI 文件路径>'[TO <备份名>][<备份集子句>];<备份集子句>::= [BACKUPSET '<备份集路径>'] [DEVICE TYPE <介质类型>[PARMS '<介质参数>'] [BACKUPINFO '<备份描述>'] [MAXPIECESIZE <备份片限制大小>] [IDENTIFIED BY <密码>|”<密码>” [WITH ENCRYPTION <TYPE>][ENCRYPT WITH <加密算法>]][COMPRESSED [LEVEL <压缩级别>]][TASK THREAD <线程数>][PARALLEL [<并行数>][READ SIZE <拆分块大小>]] 

示例: 

RMAN>backup archive log all database 'D:\dmdbms\data\DAMENG\dm.ini' backupset 'D:\dmdbms\dmbak\arch_all_bak_01'; 

备份集如下 

4) 备份集查看 

语法如下: 

SHOW BACKUPSET '< 备份集目录 >' [<device_type_stmt>][RECURSIVE]  

[<database_bakdir_lst_stmt>] [<info_type_stmt>] [<to_file_stmt>]; | 

SHOW BACKUPSETS [<device_type_stmt>] <database_bakdir_lst_stmt> 

[<info_type_stmt>] [<use_db_magic_stmt>] [<to_file_stmt>]; 

<device_type_stmt>::= DEVICE TYPE <介质类型> [PARMS '<介质参数>'] 

<database_bakdir_lst_stmt>::= DATABASE '<INI_PATH>' | 

WITH BACKUPDIR '<备份集搜索目录>'{,'<备份集搜索目录>'} | 

DATABASE '<INI_PATH>' WITH BACKUPDIR '<备份集搜索目录>'{, '<备份集搜索目录>'} 

<info_type_stmt>::= INFO <信息类型> 

<use_db_magic_stmt>::= USE DB_MAGIC <db_magic> 

<to_file_stmt>::= TO '<输出文件路径>' [FORMAT TXT | XML] 

示例: 

RMAN>show backupset 'D:\dmdbms\dmbak\db_full_bak_01'; 

以xml格式输出备份信息到文件 

RMAN>show backupset 'D:\dmdbms\dmbak\db_full_bak_01' to 'D:\dmdbms\dmbak\bkp_info.txt' format xml; 

5) 备份集校验 

语法如下: 

CHECK BACKUPSET '<备份集目录>' [DEVICE TYPE <介质类型> [PARMS '<介质参数>']][DATABASE '<INI_PATH>']; 

示例: 

RMAN>check backupset 'D:\dmdbms\dmbak\db_full_bak_01'; 

6) 备份集删除 

语法如下: 

REMOVE BACKUPSET '<备份集目录>' [<device_type_stmt>][<database_bakdir_lst_stmt>][CASCADE]; |REMOVE [<备份集类型>] BACKUPSETS [<device_type_stmt>] <database_bakdir_lst_stmt>[[UNTIL TIME '<截止时间串>'] | [BEFORE <n_day>]];<device_type_stmt>::= DEVICE TYPE <介质类型> [PARMS '<介质参数>']<database_bakdir_lst_stmt>::= DATABASE '<INI_PATH>' |WITH BACKUPDIR '<备份集搜索目录>' {, '<备份集搜索目录>' } |DATABASE '<INI_PATH>' WITH BACKUPDIR '<备份集搜索目录>' {, '<备份集搜索目录>' }<备份集类型>::=DATABASE | TABLESPACE [<ts_name>] | TABLE ["<schema_name>"."<tab_name>"] | ARCHIVELOG|ARCHIVE LOG 

示例: 

RMAN>remove backupset 'D:\dmdbms\dmbak\db_full_bak_01'; 

7) 备份集导出 

A. load命令 

语法如下: 

LOAD BACKUPSETS FROM <device_type_stmt> [WITH BACKUPDIR '<备份集搜索目录>'{,'<备份集搜索目录>'}]TO BACKUPDIR '<备份集存放目录>';<device_type_stmt>::= DEVICE TYPE <介质类型> [PARMS '<介质参数>'] 

B. dump命令 

语法如下: 

DUMP BACKUPSET '<备份集目录>' [<device_type_stmt>][DATABASE '<ini_path>' | TO '<system_dir>']MAPPED FILE '<映射文件路径>';<device_type_stmt>::= DEVICE TYPE <介质类型> [PARMS '<介质参数>'] 

5. 利用DMRMAN工具还原 

语法如下: 

RESTORE DATABASE <restore_type> FROM BACKUPSET '<备份集路径>' [<device_type_stmt>][IDENTIFIED BY <密码>|”<密码>” [ENCRYPT WITH <加密算法>]][WITH BACKUPDIR '<基备份搜索目录>'{,'<基备份搜索目录>'}][MAPPED FILE '<映射文件路径>'][TASK THREAD <任务线程数>][RENAME TO '<数据库名>'];<restore_type>::=<type1>|<type2><type1>::='<ini_path>' [WITH CHECK] [REUSE DMINI] [WITHOUT SPACE] [OVERWRITE] 

[FORCE] 

<type2>::= TO '<system_dbf_dir>' [WITH CHECK] [OVERWRITE]<device_type_stmt>::= DEVICE TYPE <介质类型> [PARMS '<介质参数>'] 

示例: 

A. 先进行联机备份,保证数据库处于联机状态(open) 

SQL>backup database backupset 'D:\dmdbms\dmbak\db_full_bak_for_restore'; 

B. 新建目标实例,准备用于恢复 

.dminit.exe path=D:\dmdbms\data db_name=DAMENG_FOR_RESTORE 

C. 备份集校验 

RMAN>check backupset 'D:\dmdbms\dmbak\db_full_bak_for_restore'; 

D. 还原数据库 

RMAN>restore database 'D:\dmdbms\data\DAMENG_FOR_RESTORE\dm.ini' from backupset 'D:\dmdbms\dmbak\db_full_bak_for_restore'; 

6. 数据库恢复 

使用RECOVER命令完成数据库恢复工作,可以是基于备份集的恢复工作,也可以是使用本地归档日志的恢复工作。如果还原后,数据已经处于一致性状态了,则可以使用更新DB_MAGIC方式恢复,前提是不需要重做日志。 

语法如下: 

RECOVER DATABASE '<ini_path>'[FORCE] WITH ARCHIVEDIR '<归档日志目录>'{,'<归档日志目录>'} [USE DB_MAGIC <db_magic>] [UNTIL TIME '<时间串>'] [UNTIL LSN <LSN>]; | RECOVER DATABASE '<ini_path>' [FORCE] FROM BACKUPSET '< 备份集路径>'[<device_type_stmt>] [IDENTIFIED BY <密码>|”<密码>” [ENCRYPT WITH <加密算法>]]; <device_type_stmt>::= DEVICE TYPE <介质类型> [PARMS '<介质参数>'] 

示例: 

A. 从备份集恢复 

RMAN>recover database 'D:\dmdbms\data\DAMENG_FOR_RESTORE\dm.ini' from backupset 'D:\dmdbms\dmbak\db_full_bak_for_restore’; 

B. 从归档恢复 

从归档恢复是利用重做本地归档日志来恢复数据的过程。从归档恢复允许恢复到指定的时间点及指定的LSN值。若同时指定了时间点和LSN,则以较早的为结束点。 

示例: 

连接到数据库,备份从检查点开始的归档日志 

可以通过语句 

SQL>select CKPT_LSN from v$rlog; 

来查询检查点LSN 

执行归档日志备份 

SQL>backup archivelog from lsn 595681 backupset 'D:\dmdbms\dmbak\arch_bak_lsn_595681'; 

SQL>backup database backupset ‘D:\dmdbms\dmbak\db_full_bak_for_recover_arch'; 

检验数据库 

RMAN>check backupset 'D:\dmdbms\dmbak\db_full_bak_for_recover_arch'; 

还原数据库: 

RMAN>restore database 'D:\dmdbms\data\DAMENG_FOR_RESTORE\dm.ini' from backupset 'D:\dmdbms\dmbak\db_full_bak_for_recover_arch'; 

查看备份集的数据库信息,获取DB_MAGIC 

RMAN>show backupset 'D:\dmdbms\dmbak\db_full_bak_for_recover_arch' info db; 

由图可知,DB_MAGIC为365902674 

恢复数据库 

RMAN>recover database 'D:\dmdbms\data\DAMENG_FOR_RESTORE\dm.ini' with archivedir 'D:\dmdbms\dmarch' use db_magic 365902674; 

C. 使用异常退出源库的归档文件进行恢复实例: 

发起备份 

SQL>backup database full to b1 backupset 'D:\dmdbms\dmbak\B1' device type disk backupinfo 'dameng full backup online' maxpiecesize 2048; 

模拟异常退出数据库,向数据库的表中插入循环数据是强行杀掉数据库进程 

SQL>create table tab_for_recover(c1 int); 

SQL>begin 

for i in 1..1000000 loop 

insert into tab_for_recover values(i); 

commit; 

end loop; 

end; 

创建目标库D2,,用于还原 

dminit.exe path=D:\dmdbms\data db_name=DAMENG_FOR_RES 

使用DMRMAN工具,修复源库的归档文件 

RMAN>repair archivelog database 'D:\dmdbms\data\DAMENG\dm.ini' 

使用备份集B1级源库归档将目标库恢复到最新状态 

RMAN>restore database 'D:\dmdbms\data\DAMENG_FOR_RES\dm.ini' from backupset 'D:\dmdbms\dmbak\B1'; 

RMAN>recover database 'D:\dmdbms\data\DAMENG_FOR_RES\dm.ini' with archivedir 'D:\dmdbms\dmarch'; 

修复完成,使用控制台工具登录到目标库查看表信息 

需先将目标库的DB_MAGIC进行更新才可以正常启动数据库 

D. 数据库更新 

数据库更新是指更新数据库的DB_MAGIC,并将数据库调整为可正常工作状态,与数据库恢复一样使用RECOVER命令完成。数据库更新发生在重做REDO日志恢复数据库后,或者目标库不需要执行重做日志已经处于一致状态的情况。语法如下: 

RECOVER DATABASE '<ini_path>' UPDATE DB_MAGIC; 

示例: 

RMAN>recover database 'D:\dmdbms\data\DAMENG_FOR_RES\dm.ini' update db_magic; 

DB_MAGIC更新完成后,数据库即可以正常启动 

目标库数据恢复完成,数据已恢复到服务异常前一刻的状态 

7. 数据库还原和恢复高级场景 

1) 数据库还原:指定映射文件还原 

还原后的数据文件默认地生成到还原目标库的路径下,如果用户想生成数据文件到特定的路径,就需要指定映射文件参数来实现。 

示例: 

脱机备份数据库: 

RMAN>backup database 'D:\dmdbms\data\DAMENG\dm.ini' backupset 'D:\dmdbms\dmbak\db_bak_for_map_01'; 

生成映射文件map_file_01.txt至D:\dm_mapfile目录 

RMAN>dump backupset 'D:\dmdbms\dmbak\db_bak_for_map_01' database 'D:\dmdbms\data\DAMENG_FOR_RESTORE\dm.ini' mapped file 'D:\dm_mapfile\map_file_01.txt'; 

文档内容如下: 

如需要恢复数据文件或镜像文件只指定路径,则可以手动编辑文件中的data_path参数,假设修改路径如下 

指定映射文件进行还原 

RMAN>restore database 'D:\dmdbms\data\DAMENG_FOR_RESTORE\dm.ini' from backupset 'D:\dmdbms\dmbak\db_bak_for_map_01' mapped file 'D:\dm_mapfile\map_file_01.txt'; 

查看重定向路径 

文件已恢复到指定路径下 

2) 数据库恢复 

A. 恢复数据库至指定时间点/LSN 

恢复数据库到指定时间点/LSN是从归档恢复的一种方式,也称为不完全恢复。从归档恢复允许恢复到指定的时间点及指定的LSN值。若同时指定了时间点和LSN,则以较早的为结束点。用户可以通过指定一个时间点/LSN,使数据库恢复到这个指定的时间点/LSN。 

示例: 

新建表 

SQL>create table tab_for_recover_01(c1 int); 

SQL>insert into tab_for_recover_01 values(1); 

SQL>commit; 

备份数据库: 

SQL>backup database backupset 'D:\dmdbms\dmbak\db_full_bak_for_time_lsn'; 

操作数据库,产生归档 

SQL>create table tab_for_recover_02(c1 int); 

SQL>insert into tab_for_recover_02 values(1); 

SQL>commit; 

使用语句查询当前时间及LSN号 

可知当前时间为2022.5.10,LSN为2014457 

删除表TAB_FOR_RECOVER_01中的数据 

还原数据库 

RMAN> restore database 'D:\dmdbms\data\DAMENG_FOR_RESTORE\dm.ini' from backupset 'D:\dmdbms\dmbak\db_full_bak_for_time_lsn'; 

使用时间或者LSN恢复数据库 

RMAN>recover database 'D:\dmdbms\data\DAMENG_FOR_RESTORE\dm.ini' with archivedir 'D:\dmdbms\dmarch' until lsn 2014457; 

恢复完成 

B. 主备环境下指定DB_MAGIC收集归档 

主备环境下,如果当前节点的归档缺失,使用归档进行恢复时,会由于归档日志不连续而报错,无法将数据库恢复到最新状态。如果另一节点保存有该部分日志,则可以使用该节点日志进行恢复。 

在主备集群的主节点使用DMRMAN进行备份操作 

RMAN>backup database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' backupset '/home/dmdba/dmdbms/dmbak/db_full_bak'; 

启动主备服务,并在主节点插入部分数据 

删除主节点所有归档日志 

指定备份集还原到主节点 

RMAN>restore database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' from backupset '/home/dmdba/dmdbms/dmbak/db_full_bak'; 

还原后,指定DB_MAGIC,使用备库归档进行恢复 

可以得知,备份集的DB_MAGIC为3390904 

RMAN>recover database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' with archivedir '/home/dmdba/dmdbms/data/dameng/arch' use db_magic 3390904; 

C. DSC集群恢复 

使用disql,在主节点联机备份数据库 

SQL>backup database backupset '/home/dmdba/dmdbms/dmbak/db_full_bak_for_dsc'; 

还原数据库 

RMAN> restore database '/home/dmdba/dmdbms/config/dsc1_01_config/dm.ini' from backupset '/home/dmdba/dmdbms/dmbak/db_full_bak_for_dsc'; 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值