dmrman备份还原
脱机还原工具-dmrman
前言
根据达梦官网文档整理
一、概述
DMRMAN 命令行设置参数执行又可分为命令行指定脚本、命令行指定语句两种执行方式。
- 指定语句
$ DMRMAN
RMAN>BACKUP DATABASE'/dmdata/data/DAMENG/dm.ini';
- 指定脚本
创建一个名为 cmd_file.txt 的文件,文件中包含“BACKUP DATABASE’/dmdata/data/DAMENG/dm.ini’”命令,保存到/home/dm_cmd 目录下,则该文件的执行方式如下:
$ DMRMAN
RMAN>`/home/dm_cmd/cmd_file.txt
注意文件路径的前面有一个字符**`**
1、参数说明
| 参数 | 含义 | 备注 |
|---|---|---|
| CTLFILE | 指定执行语句所在的文件路径,不能和 CTLSTMT 同时使用。脚本文件格式支持*.txt | 可选参数 |
| CTLSTMT | 指定待执行语句,不能和 CTLFILE 同时使用。如:CTLSTMT=“BACKUP DATABASE ‘/home/dmdbms/data/DAMENG/dm.ini’” | 可选参数 |
| DCR_INI | 指定 dmdcr.ini 路径,用于 ASM 存储时访问 ASM 服务;若未指定,则认为不存在 ASM 存储。可单独使用,也可与其他参数配合使用。主要用于 DMDSC 环境 | 可选参数 |
| USE_AP | 指定备份还原执行策略。取值 1、2。默认为 1。 1:使用 dmap 辅助进程方式执行备份还原;执行备份还原时要求先启动 dmap 服务。 2:无辅助进程方式,由 dmserver 进程自身完成备份还原,不依赖 dmap 服务;配置成 2 的情况下,不能执行第三方备份(即指定 DEVICE TYPE 为 TAPE)。 | 可选参数 |
| AP_PORT | 使用 DMAP 备份还原时 DMAP 的端口号,dmap 的监听端口,监听方配置此参数,取值范围 1024~65534,默认为 4236,发起连接端的端口在 1024-65535 之间随机分配 | 可选参数 |
| HELP | 打印帮助信息 | 可选 |
注意
CTLFILE中存在多条语句或CTLSTMT中一次输入多条语句时,每条语句都必须以分号结尾;执行单条语句,语句结尾可以加分号也可以不加。
CTLSTMT中,待执行语句外层双引号一定要加。执行完毕后工具自动退出。CTLFILE和CTLSTMT不能同时指定。若使用DMASM文件系统,可通过DCR_INI指定目标联机的ASM服务器。
2、DMRMAN环境变量配置
使用 CONFIGURE 命令进行 DMRMAN 的默认参数配置
- 显示和清除现有参数的默认配置
- 配置默认的存储介质类型(DISK 或 TAPE)
- 跟踪日志文件
- 备份集搜索目录
- 归档日志搜索目录
2.1 语法
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] |
OPEN FILES [<文件句柄个数> | [CLEAR]]
| 参数 | 说明 |
|---|---|
| CONFIGURE | 查看设置的默认值。 |
| CLEAR | 清理参数的默认值。 |
| DEVICE TYPE | 备份集存储的介质类型,DISK 或者 TAPE,默认 DISK |
| PARMS | 介质参数,供第三方存储介质(TAPE 类型)管理使用 |
| TRACE | 介质存储过程中使用的跟踪日志配置,包括文件路径(TRACE FILE)和日志级别(TRACE LEVEL),其中日志级别有效值 1、2,默认为 1 表示不启用 TRACE,此时若指定了 TRACE FILE,会生成 TRACE 文件,但不写入 TRACE 信息;为 2 启用 TRACE 并在 TRACE 文件中写入 TRACE 相关内容。若用户指定,则指定的文件不能为已经存在的文件,否则报错;也不可以为 ASM 文件。 |
| BACKUPDIR | 指定默认搜集备份的目录。 ADD:添加默认备份集搜索目录,若已经存在,则替换原来的。 DELETE:删除指定默认备份集搜索目录。 缺省为 ADD,缺省的情况下,使用新加入的目录替换掉所有已有的目录。 |
| ARCHIVEDIR | 默认搜集归档的目录。 ADD: 添加归档日志目录,若已经存在,则替换原来的。 DELETE:删除指定归档日志目录。 缺省为 ADD,缺省的情况下,使用新加入的目录替换掉所有已有的目录。 |
| ADD | 添加默认备份集搜索目录或归档日志目录,若已经存在,则替换原来的。 |
| DELETE | 删除指定默认备份集搜索目录或者归档日志目录。 |
| OPEN FILES | 库级还原时最大可打开的文件句柄上限,只对 HUGE 文件生效,还原过程中打开 HUGE 文件句柄超出该限制后将主动关闭 HUGE 文件。 |

- sub_conf_stmt:

注意:
- 设置的参数默认值仅在此 DMRMAN 实例存活期间有效。
- DMRMAN 命令中如果指定了相同的参数,会覆盖 CONFIGURE 的默认设置。
2.2 示例
2.2.1 显示所有配置项当前值
RMAN> configure;
THE DMRMAN DEFAULT SETTING:DEFAULT DEVICE:MEDIA : DISK
DEFAULT TRACE :FILE : ../log/dm_SBTTRACE_202402.logLEVEL : 1
DEFAULT BACKUP DIRECTORY:TOTAL COUNT :0DEFAULT ARCHIVE DIRECTORY:TOTAL COUNT :0DEFAULT OPEN FILES:OPEN FILES : 65535
2.2.2 恢复所有配置项到默认值
RMAN> configure clear;
configure default device clear successfully!
configure default trace clear successfully!
configure default backupdir clear successfully!
configure default archivedir clear successfully!
configure default open files clear successfully!
2.2.3 恢复任意一个配置项到默认值
RMAN> configure default open files clear;
configure default open files clear successfully!
2.2.4 显示任意一个配置项的值
RMAN> configure default device;
THE DMRMAN DEFAULT DEVICE SETTING:DEFAULT DEVICE:MEDIA : DISK
2.2.5 配置存储介质
RMAN> configure default device type disk;
configure default device successfully!
2.2.6 配置跟踪文件
- 显示TRACE文件的默认配置
RMAN> configure default trace;
THE DMRMAN DEFAULT TRACE SETTING:DEFAULT TRACE :FILE :LEVEL : 1
- 配置默认 TRACE 文件
RMAN> configure default trace file '/dmdata/trace.log';
configure default trace successfully!
- 配置默认TRACE级别
RMAN>CONFIGURE DEFAULT TRACE LEVEL 2;
其中,TRACE 文件和 TRACE 级别也可以同时设置
RMAN> configure default trace file '/dmdata/trace.log' trace level 2;
2.2.7 配置备份集搜索目录
备份集搜索目录用于增量备份还原中搜索基备份。单个目录最大长度为 256 个字节,可配置的备份集搜索目录没有限制。如果不指定备份集搜索目录只会在库的默认备份目录和当前备份执行备份集目录的上级目录下搜索备份集。
- 显示备份集搜索目录
RMAN> configure default backupdir;
THE DMRMAN DEFAULT BACKUP DIRECTORY SETTING:DEFAULT BACKUP DIRECTORY:TOTAL COUNT :0
- 设置备份集搜索目录
RMAN> configure default backupdir '/dmdata/1','/dmdata/2';
configure default backupdir update successfully!
DEFAULT BACKUP DIRECTORY:TOTAL COUNT :2/dmdata/1/dmdata/2
backupdir的路径必须存在,否则会报错。
- 增加备份集搜索目录
RMAN> configure default backupdir add '/dmdata/3';
configure default backupdir add successfully!
DEFAULT BACKUP DIRECTORY:TOTAL COUNT :3/dmdata/1/dmdata/2/dmdata/3
- 删除备份集搜索目录
RMAN> configure default backupdir delete '/dmdata/1';
configure default backupdir delete successfully!
DEFAULT BACKUP DIRECTORY:TOTAL COUNT :2/dmdata/2/dmdata/3
2.2.8 配置归档日志搜索目录
归档日志搜索目录用于增量备份还原中搜索归档日志。单个目录最大长度为 256 个字节,可配置的归档日志搜索目录没有限制。
- 显示归档日志搜索目录
RMAN> configure default archivedir;
THE DMRMAN DEFAULT ARCHIVE DIRECTORY SETTING:DEFAULT ARCHIVE DIRECTORY:TOTAL COUNT :0
- 设置归档日志搜索目录
RMAN> configure default archivedir '/dmdata/1','/dmdata/2';
configure default archivedir update successfully!
DEFAULT ARCHIVE DIRECTORY:TOTAL COUNT :2/dmdata/1/dmdata/2
backupdir的路径必须存在,否则会报错。
- 增加归档日志搜索目录
RMAN> configure default archivedir add '/dmdata/3';
configure default archivedir add successfully!
DEFAULT ARCHIVE DIRECTORY:TOTAL COUNT :3/dmdata/1/dmdata/2/dmdata/3
- 删除归档日志搜索目录
RMAN> configure default archivedir delete '/dmdata/1';
configure default archivedir delete successfully!
DEFAULT ARCHIVE DIRECTORY:TOTAL COUNT :2/dmdata/2/dmdata/3
二、数据备份
1、数据库备份
在 DMRMAN 工具中使用 BACKUP 命令可以备份整个数据库。使用 DMRMAN 脱机备份数据库需要关闭数据库实例。若是正常退出的数据库,则脱机备份前不需要配置归档;若是故障退出的数据库,则备份前,需先进行归档修复。在 DMRMAN 中输入以下命令即可备份数据库:
RMAN> BACKUP DATABASE '/dmdata/data/DAMENG/dm.ini';
命令执行完后会在默认的备份路径下生成备份集目录。默认的备份路径为 dm.ini 中 BAK_PATH 配置的路径,若未配置 BAK_PATH,则默认使用 SYSTEM_PATH 下的 bak 目录。这是最简单的脱机数据库备份语句,如果要设置其他备份选项请参考下文的语法及使用说明。
1.1 语法
BACKUP DATABASE '<INI文件路径>' [<备份类型>][<指定备份集子句>][TO <备份名>] [BACKUPSET '<备份集路径>']
[DEVICE TYPE <介质类型>[PARMS '<介质参数>']
[BACKUPINFO '<备份描述>'] [MAXPIECESIZE <备份片限制大小>]
[LIMIT <read_limit>|<write_limit>]
[IDENTIFIED BY <密码>|"<密码>" [WITH ENCRYPTION <TYPE>][ENCRYPT WITH <加密算法>]]
[COMPRESSED [LEVEL <压缩级别>]][WITHOUT LOG][WITHOUT MIRROR]
[TASK THREAD <线程数>][PARALLEL [<并行数>][READ SIZE <拆分块大小>]]
[USE BAK_MAGIC <备份集魔数>];
<备份类型>、<read_limit>、<write_limit>::
| 参数 | 说明 |
|---|---|
| 备份类型 | 1️⃣FULL:完全备份,完全备份生成的备份集包含了指定库(或者表空间)的全部有效数据页。2️⃣ DDL_CLONE:数据库克隆,该参数只能用于完全备份中,对于数据库中的表来说,只备份表的定义不备份表中数据。表空间和表备份不支持该参数,数据库克隆必须备份日志。3️⃣ SHADOW:影子备份,该参数只能用于完全备份中,表示生成影子备份集,只备份源库的 SYSTEM.DBF 及日志相关信息。表空间和表备份不支持该参数,影子备份必须备份日志。4️⃣ INCREMENT:增量备份 |
| TO | 指定生成备份名称(管理工具中可以查看)。若未指定,系统随机生成,默认备份名格式为:DB备份类型备份时间。 |
| BACKUPSET | 指定当前备份集目录。若指定为相对路径,例如 BACKUPSET ‘db_bak_01’,则在默认备份目录中生成备份集。若不指定(命令不写),则在默认备份目录中按约定规则,生成默认备份集目录。 SQL> backup database full; |
| DEVICE TYPE | 指存储备份集的介质类型,支持 DISK 和 TAPE,默认 DISK |
| PARMS | 只对介质类型为 TAPE 时有效 |
| BACKUPINFO | 备份的描述信息。 |
| MAXPIECESIZE | 最大备份片文件大小上限,以 MB 为单位,最小 128MB,32 位系统最大 2GB,64 位系统最大 128GB,缺省为最大取值。 |
| LIMIT | 指定备份时最大的读写文件速度,单位为 MB/S,默认为 0,表示无速度限制。 |
| IDENTIFIED BY | 指定备份时的加密密码 |
| WITH ENCRYPTION | 指定加密类型,取值范围 0、1、2。0 表示不加密,不对备份文件进行加密处理; 1:默认值,表示简单加密,对备份文件设置口令,但文件内容仍以明文方式存储; 2:表示完全数据加密,对备份文件进行完全的加密,备份文件以密文方式存储。 当不指定 WITH ENCRYPTION 子句时,采用简单加密。 |
| ENCRYPT WITH | 指定加密算法。当不指定 ENCRYPT WITH 子句时,使用 AES256_CFB 加密算法。 |
| COMPRESSED | 是否对备份数据进行压缩处理。LEVEL 表示压缩等级,取值范围 0~9:0(默认值) 表示不压缩;1 表示 1 级压缩;9 表示 9 级压缩。压缩级别越高,压缩速度越慢,但压缩比越高。 若指定 COMPRESSED,但未指定 LEVEL,则压缩等级默认 1; 若未指定 COMPRESSED,则默认不进行压缩处理。 |
| WITHOUT LOG | 联机数据库备份是否备份联机日志。如果使用,则表示不备份,否则表示备份。 |
| WITHOUT MIRROR | 联机数据库备份是否备份镜像文件。如果使用,则表示不备份,否则表示备份。 |
| TASK THREAD | 备份过程中数据处理过程线程的个数,取值范围 0~64,默认为 4。若指定为 0,则调整为 1;若指定超过当前系统主机核数,则调整为主机核数。线程数(TASK THREAD)*并行数(PARALLEL)不得超过 512。 |
| PARALLEL | 指定**并行备份的并行数和拆分块大小**。并行数取值范围 0~128。若不指定并行数,则默认为 4,若指定为 0 或者 1 均认为非并行备份。若未指定关键字 PARALLEL,则认为非并行备份。 |
| USE BAK_MAGIC | 指定备份集魔数,用于唯一标识 DMDPC 集群内同一批次的 MP 和 BP 的备份集。在对 DMDPC 节点执行脱机备份时,BAK_MAGIC 由用户指定,若不指定则默认为 0,需要确保同一批次的备份集 BAK_MAGIC 相同,以便区分不同批次的备份集,避免备份集出现混用。在连接 SP 执行集群备份时,BAK_MAGIC 由 MP 自动生成并自动同步给所有 BP 节点,无需用户指定。该参数仅在 DMDPC 环境下有效。 |
| READ SPEED | 备份时读速度上限,取值范围 0~2147483647,单位为 MB/S,0 表示无限制。 |
| WRITE SPEED | 备份时写速度上限,取值范围 0~2147483647,单位为 MB/S,0 表示无限制。 |
1.2 完全备份
完全备份数据库步骤如下:
- 保证数据库处于脱机状态;
- 启动 DMRMAN 命令行工具;
- DMRMAN 中输入以下命令:
RMAN>BACKUP DATABASE '/dmdata/data/DAMENG/dm.ini' FULL BACKUPSET '/dmdata/dmbak/db_full_bak_01';
备份语句中的参数
FULL可以省略,不指定备份类型会默认指定备份类型为完全备份。
1.3 增量备份
增量备份指基于指定的库的某个备份(完全备份或者增量备份),备份自该备份以来所有发生修改了的数据页。脱机增量备份要求两次备份之间数据库必须有操作,否则备份会报错。
RMAN>BACKUP DATABASE '/dmdata/data/DAMENG/dm.ini' INCREMENT WITH BACKUPDIR
'/dmdata/dmbak'BACKUPSET '/dmdata/dmbak/db_increment_bak_02';
命令中的 INCREMENT 参数表示执行的备份为增量备份,增量备份时该参数不可省略。如果增量备份的基备份不在默认备份目录中,则必须指定
WITH BACKUPDIR参数用于搜索基备份集,或者使用CONFIGURE DEFAULT BACKUPDIR命令配置默认的基备份集搜索目录。DSC 环境下的脱机库备份与联机库备份存在相同的使用限制。由于脱机备份无法推进检查点,当不满足该约束时,备份将失败。
2、归档备份
在 DMRMAN 工具中使用 BACKUP 命令可以备份库的归档。使用 DMRMAN 备份归档需要设置归档,否则会报错。关闭数据库实例,在 DMRMAN 中输入以下命令即可备份归档:
RMAN>BACKUP ARCHIVE LOG DATABASE '/dmdata/data/DAMENG/dm.ini';
命令执行完后会在默认的备份路径下生成备份集目录,默认的备份路径为 dm.ini 中 BAK_PATH 的配置值,若未配置,则使用 SYSTEM_PATH 下的 bak 目录。这是最简单的脱机归档备份语句,如果要设置其他备份选项请参考下文的语法及使用说明。
2.1 语法
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 <备份片限制大小>]
[LIMIT <read_limit>|<write_limit>]
[IDENTIFIED BY <密码>|"<密码>" [WITH ENCRYPTION <TYPE>][ENCRYPT WITH <加密算法>]]
[COMPRESSED [LEVEL <压缩级别>]][TASK THREAD <线程数>][PARALLEL [<并行数>][READ SIZE <拆分块大小>]]
<notBackedUpSpec> 请参考3.2.2.4.1概述
<read_limit>::= READ SPEED <读速度上限> [WRITE SPEED <写速度上限>]
<write_limit>::= WRITE SPEED <写速度上限>
参数说明:
| 参数 | 说明 |
|---|---|
| ALL | 备份所有的归档。若不指定,则默认为 ALL。 |
| FROM LSN | 指定备份的起始 lsn。 |
| UNTIL LSN | 指定备份的截止 lsn。 |
| FROM TIME | 指定备份的开始的时间点。 |
| UNTIL TIME | 指定备份的截止的时间点。 |
| BETWEEN … AND … | 指定备份的区间。指定区间后,只会备份指定区间内的归档文件。 |
| DELETE INPUT | 用于指定备份完成之后,是否删除归档操作。 |
| DATABASE | 必选参数。指定备份源库的 INI 文件路径。 |
| TO | 指定生成备份名称。若未指定,系统随机生成,默认备份名格式为:ARCH_LOG_备份时间。其中,备份时间为开始备份的系统时间。 |
| BACKUPSET | 指定当前备份集目录。若指定为相对路径,例如 BACKUPSET ‘db_bak_01’,则在默认备份目录中生成备份集。若不指定(命令不写),则在默认备份目录中按约定规则,生成默认备份集目录。 SQL> backup database full; |
| DEVICE TYPE | 指存储备份集的介质类型,支持 DISK 和 TAPE,默认 DISK |
| PARMS | 只对介质类型为 TAPE 时有效 |
| BACKUPINFO | 备份的描述信息。 |
| MAXPIECESIZE | 最大备份片文件大小上限,以 MB 为单位,最小 128MB,32 位系统最大 2GB,64 位系统最大 128GB,缺省为最大取值。 |
| LIMIT | 指定备份时最大的读写文件速度,单位为 MB/S,默认为 0,表示无速度限制。 |
| IDENTIFIED BY | 指定备份时的加密密码 |
| WITH ENCRYPTION | 指定加密类型,取值范围 0、1、2。0 表示不加密,不对备份文件进行加密处理; 1:默认值,表示简单加密,对备份文件设置口令,但文件内容仍以明文方式存储; 2:表示完全数据加密,对备份文件进行完全的加密,备份文件以密文方式存储。 当不指定 WITH ENCRYPTION 子句时,采用简单加密。 |
| ENCRYPT WITH | 指定加密算法。当不指定 ENCRYPT WITH 子句时,使用 AES256_CFB 加密算法。 |
| COMPRESSED | 是否对备份数据进行压缩处理。LEVEL 表示压缩等级,取值范围 0~9:0(默认值) 表示不压缩;1 表示 1 级压缩;9 表示 9 级压缩。压缩级别越高,压缩速度越慢,但压缩比越高。 若指定 COMPRESSED,但未指定 LEVEL,则压缩等级默认 1; 若未指定 COMPRESSED,则默认不进行压缩处理。 |
| WITHOUT LOG | 联机数据库备份是否备份联机日志。如果使用,则表示不备份,否则表示备份。 |
| TASK THREAD | 备份过程中数据处理过程线程的个数,取值范围 0~64,默认为 4。若指定为 0,则调整为 1;若指定超过当前系统主机核数,则调整为主机核数。线程数(TASK THREAD)*并行数(PARALLEL)不得超过 512。 |
| PARALLEL | 指定**并行备份的并行数和拆分块大小**。并行数取值范围 0~128。若不指定并行数,则默认为 4,若指定为 0 或者 1 均认为非并行备份。若未指定关键字 PARALLEL,则认为非并行备份。 |
| READ SPEED | 备份时读速度上限,取值范围 0~2147483647,单位为 MB/S,0 表示无限制。 |
| WRITE SPEED | 备份时写速度上限,取值范围 0~2147483647,单位为 MB/S,0 表示无限制。 |
2.2 备份步骤
- 配置归档;
- 保证数据库处于脱机状态;
- 启动 DMRMAN 命令行工具;
2.3 创建普通归档备份
RMAN>BACKUP ARCHIVE LOG ALL DATABASE '/dmdata/data/DAMENG/dm.ini' BACKUPSET '/dmdata/dmbak/arch_all_bak_01';
命令中的 ALL 参数表示执行的备份为备份所有的归档,也可以不指定该参数,DMRMAN 默认执行的备份类型为 ALL 类型归档备份。
2.4 创建设置条件的归档备份
设置条件的归档备份指**通过设置 LSN 或者时间点,控制需要备份归档的范围**。脱机设置条件归档备份的示例如下:
RMAN>BACKUP ARCHIVE LOG LSN BETWEEN 50000 AND 120000 DATABASE '/dmdata/data/DAMENG/dm.ini' BACKUPSET '/dmdata/dmbak/arch_lsn_bak_02';
命令中的 LSN BETEEWN start AND end 表示备份 LSN 值在 start 与 end 之间的归档,也可以设置 FROM LSN(TIME)或 UNTIL LSN(TIME)。
三、高级数据备份
1、加密备份
DMRMAN 同 disql工具一样可使用加密的方式备份数据库,没有权限的用户无法访问加密的备份集。
DMRMAN 备份命令中通过指定 IDENTIFIED BY … WITH ENCRYPTION … ENCRYPT WITH … 命令执行加密备份。其中,加密备份相关参数的含义与联机备份中的含义相同。
加密备份过程中参数 IDENTIFIED BY 必须指定,参数 WITH ENCRYPTION 和参数 ENCRYPT WITH 可不指定。加密备份时若不指定 WITH ENCRYPTION 参数,则该参数默认为 1,若不指定 ENCRYPT WITH 参数,则该参数默认值为 AES256_CFB。
- 简单加密(WITH ENCRYPTION 1)
RMAN>BACKUP DATABASE '/dmdata/data/DAMENG/dm.ini' BACKUPSET
'/dmdata/dmbak/db_bak_for_encrypt_01' IDENTIFIED BY "cdb546789";RMAN>BACKUP DATABASE '/dmdata/data/DAMENG/dm.ini' BACKUPSET
'/dmdata/dmbak/db_bak_for_encrypt_02' IDENTIFIED BY "cdb546789" ENCRYPT WITH RC4;
- 复杂加密(WITH ENCRYPTION 2)
RMAN>BACKUP DATABASE '/dmdata/data/DAMENG/dm.ini' BACKUPSET
'/dmdata/dmbak/db_bak_for_encrypt_01' IDENTIFIED BY "cdb546789" WITH ENCRYPTION 2;RMAN>BACKUP DATABASE '/dmdata/data/DAMENG/dm.ini' BACKUPSET
'/dmdata/dmbak/db_bak_for_encrypt_02' IDENTIFIED BY "cdb546789" WITH ENCRYPTION 2 ENCRYPT WITH RC4;
- 若指定了加密密码,但加密类型 WITH ENCRYPTION 指定为 0,则为非加密备份
RMAN>BACKUP DATABASE '/dmdata/data/DAMENG/dm.ini' BACKUPSET
'/dmdata/dmbak/db_bak_for_encrypt_03' IDENTIFIED BY "cdb546789" WITH ENCRYPTION 0;
注意:
- 对于增量备份加密,如果基备份存在加密,则增量备份使用的加密密码、加密类型和加密算法必须与基备份保持一致;
- 如果基备份未进行加密处理,则对增量备份使用的加密密码、加密类型和加密算法没有特殊要求。
2、设置跟踪日志文件
DMRMAN 备份时可选择生成跟踪日志文件,跟踪日志记录了 SBT 接口的调用过程,用户通过查看日志可跟踪备份还原过程。
与生成跟踪日志文件相关的参数有两个,TRACE FILE 和 TRACE LEVEL。TRACE FILE 用于指定生成的跟踪日志文件路径。与 disql 工具不同的是,DMRMAN 不可在备份时指定参数生成跟踪文件,只能使用 CONFIGURE 命令进行事先配置。
使用 CONFIGURE DEFAULT TRACE FILE … TRACE LEVEL … 命令启用 TRACE 功能并设置 TRACE 文件路径,以下命令生成 TRACE 文件到/home/dm_trace 目录:
RMAN>CONFIGURE DEFAULT TRACE FILE '/home/dm_trace/trace.log' TRACE LEVEL 2;
2.1 指定TRACE FILE
TRACE LEVEL = 1(默认值)
RMAN>CONFIGURE DEFAULT TRACE FILE'1.log' TRACE LEVEL 1;
-- 1.log日志内容为空,保存在$DM_HOME/bin/1.log
RMAN>BACKUP DATABASE '/dmdata/data/DAMENG/dm.ini';
指定参数 TRACE FILE 但 TRACE LEVEL 值设置为 1 即不启用 TRACE 功能,则会生成 TRACE 文件,但不会写入 TRACE 信息。
TRACE LEVEL = 2
RMAN> CONFIGURE DEFAULT TRACE FILE '2.log' TRACE LEVEL 2;
-- 2.log日志内容不为空,保存在$DM_HOME/bin/2.log
RMAN> BACKUP DATABASE '/dmdata/data/DAMENG/dm.ini';
注意:
- 若 TRACE FILE 使用相对路径,日志文件生成在执行码同级目录下**
$DM_HOME/bin**。- 若 TRACE FILE 使用绝对路径,日志文件生成在指定的绝对路径。
- 如果指定的 TRACE 文件已存在,则报错。
2.2 不指定TRACE FILE
TRACE LEVEL = 2
RMAN> CONFIGURE DEFAULT TRACE LEVEL 2;
-- 在$DM_HOME/log路径下生成.log文件
RMAN> BACKUP DATABASE '/dmdata/data/DAMENG/dm.ini';
TRACE LEVEL 值设置为 2 即启用 TRACE 功能,但若 TRACE FILE 没有指定,则系统默认在执行码路径的 log 目录
$DM_HOME/log生成DM_SBTTRACE_年月.log文件。
四、管理备份
管理备份一个重要的目的是删除不再需要的备份。DMRMAN 工具提供 SHOW、CHECK、REMOVE、LOAD 等命令分别用来查看、校验、删除和导出备份集。
1、备份集查看
DMRMAN 中使用 SHOW 命令可以查看备份集的信息,若指定具体备份集目录,则会生成相应的备份集链表信息。
1.1 语法
-- 两种语法
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]
| 参数 | 说明 |
|---|---|
| BACKUPSET | 查看单个备份集信息,若该备份集为增量备份且同时指定 RECURSIVE,则显示以该备份集为最新备份集递归显示完整的备份集链表;否则,仅显示指定备份集本身信息。 |
| BACKUPSETS | 批量查看备份集信息。 |
| DEVICE TYPE | 指存储备份集的介质类型,支持 DISK 和 TAPE,默认 DISK。 |
| PARMS | 只对介质类型为 TAPE 时有效 |
| DATABASE | 指定数据库 dm.ini 文件路径,若指定,则该数据库的默认备份目录将作为备份集搜索目录之一。 |
| WITH BACKUPDIR | 备份集搜索目录,最大长度为 256 个字节。WITH BACKUPDIR 在 SHOW BACKUPSET 和 SHOW BACKUPSETS 中用法有区别。具体如下: 1️⃣在 SHOW BACKUPSET 语句中,WITH BACKUPDIR 用于为基备份指定备份集搜索目录,即当 BACKUPSET 指定的备份为增量备份时,WITH BACKUPDIR 用于搜索该增量备份的基备份集。 2️⃣在 SHOW BACKUPSETS 语句中,WITH BACKUPDIR 用于为基备份和增量备份指定备份集搜索目录,即批量查看该目录下符合条件的所有备份集信息。 |
| info_type_stmt | 指定显示备份集信息内容,可以组合指定,不同信息类型之间用逗号间隔,若未指定该项,则显示全部。信息类型包括: DB:显示备份集的数据库信息; META:显示备份集的元信息; FILE:显示备份集中文件信息,如备份数据文件 DBF 和备份片文件; TABLESPACE:显示备份集中表空间信息,对库备份集和表空间备份集有效; TABLE:显示备份集中表信息,仅对表备份集有效。 |
| use_db_magic_stmt | SHOW BACKUPSETS 可以指定仅显示指定 DB_MAGIC 即指定数据库的备份集信息。 |
| to_file_stmt | 指定备份集信息输出的目标文件路径,若不指定,仅控制台打印。 |
1.2 备份集信息查看
1.2.1 查看单个备份集信息
RMAN> backup database '/dmdata/data/DAMENG/dm.ini';
……
Processing backupset /dmdata/dmbak/DB_DAMENG_FULL_20240222_211554_932211
# 显示信息很多,用户可根据自身需要只显示部分备份集信息。
RMAN> show backupset 'DB_DAMENG_FULL_20240222_211554_932211';
<DB INFO>
……
<META INFO>
……
<EP INFO>
……
<FILE INFO>
……
<TABLESPACE INFO>
1.2.2 批量显示备份集信息
SHOW BACKUPSETS…命令用于批量显示指定搜索目录下的备份集信息。如需要查看的多个备份集不在同一个目录下,可通过 WITH BACKUPDIR 参数指定多个备份集搜索目录,同时查看所有的备份集。
RMAN> backup database '/dmdata/data/DAMENG/dm.ini' backupset '/dmdata/dmbak2/full';RMAN> show backupsets with backupdir '/dmdata/dmbak','/dmdata/dmbak2';
1.2.3 查看指定数据库的备份集
如果指定的备份搜索目录下包含不同数据库的备份集,而我们只想查看某个特定数据库的所有备份集信息,此时可以使用 SHOW BACKUPSETS ... USE DB_MAGIC ... 命令实现。
- 备份不同数据库实例到同一个目录
/dmdata/dmbak
RMAN> backup database '/dmdata/data/DAMENG/dm.ini' backupset 'db1';
RMAN> backup database '/dmdata/data/db2/dm.ini' backupset 'db2';
- 查看指定数据库备份集信息,获取DB_MAGIC信息
RMAN> show backupset 'db1' info DB;
<DB INFO>
system path: /dmdata/data/DAMENG
pmnt_magic: 1121452896
src_db_magic: 883368136
db_magic: 883368136
dsc node: 1
……
- 查看指定目录下,查看指定目录下数据库/dmdata/data/DAMENG/dm.ini 的所有备份集信息
RMAN> show backupsets with backupdir '/dmdata/dmbak' info db use db_magic 883368136;
1.2.4 指定显示备份集信息
SHOW BACKUPSET ... INFO ... 命令可以显示部分备份集信息,例如 SHOW BACKUPSET…INFO META 命令可以查看备份集的元数据信息。
RMAN> show backupset 'db1' info db;
RMAN> show backupset 'db1' info meta;
RMAN> show backupset 'db1' info file;
RMAN> show backupset 'db1' info TABLESPACE;
RMAN> show backupset 'db1' info TABLE;
1.2.5 以 xml 格式输出备份信息到文件
RMAN> show backupset 'db1' to '/dmdata/1.txt' format XML;
1.3 备份集校验
DMRMAN 中使用 CHECK 命令对备份集进行校验,校验备份集是否存在及合法。
CHECK BACKUPSET '<备份集目录>'[DEVICE TYPE <介质类型> [PARMS '<介质参数>']][DATABASE '<INI_PATH>'];
- 检查备份集db1
RMAN> check backupset '/dmdata/dmbak/db1';
RMAN> check backupset '/dmdata/dmbak/db1' database '/dmdata/data/DAMENG/dm.ini';
check backupset '/dmdata/dmbak/db1' database '/dmdata/data/DAMENG/dm.ini';
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00]
check backupset successfully.
1.4 删除备份集
DMRMAN 中使用 REMOVE 命令删除备份集,可删除单个备份集,也可批量删除备份集。单个备份集删除时并行备份中的子备份集不允许单独删除;在指定备份集搜索目录中,发现存在引用待删除备份集作为基备份的需要执行级联删除,默认报错。批量删除备份集时,跳过收集到的单独的子备份集。
1.4.1 语法
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
| 参数 | 说明 |
|---|---|
| BACKUPSET | 查看单个备份集信息,若该备份集为增量备份且同时指定 RECURSIVE,则显示以该备份集为最新备份集递归显示完整的备份集链表;否则,仅显示指定备份集本身信息。 |
| BACKUPSETS | 批量查看备份集信息。 |
| DEVICE TYPE | 指存储备份集的介质类型,支持 DISK 和 TAPE,默认 DISK。 |
| PARMS | 只对介质类型为 TAPE 时有效 |
| DATABASE | 指定数据库 dm.ini 文件路径,若指定,则该数据库的默认备份目录将作为备份集搜索目录之一。 |
| WITH BACKUPDIR | 备份集搜索目录,最大长度为 256 个字节。WITH BACKUPDIR 在 SHOW BACKUPSET 和 SHOW BACKUPSETS 中用法有区别。具体如下: 1️⃣在 SHOW BACKUPSET 语句中,WITH BACKUPDIR 用于为基备份指定备份集搜索目录,即当 BACKUPSET 指定的备份为增量备份时,WITH BACKUPDIR 用于搜索该增量备份的基备份集。 2️⃣在 SHOW BACKUPSETS 语句中,WITH BACKUPDIR 用于为基备份和增量备份指定备份集搜索目录,即批量查看该目录下符合条件的所有备份集信息。 |
| CASCADE | 当目标备份集已经被其他增量备份引用为基备份集,默认不允许删除,若指定 CASCADE,则递归删除所有引用的增量备份。 |
| 备份集类型 | DATABASE|TABLESPACE|TABLE|ARCHIVELOG|ARCHIVE LOG:指定待删除备份集的类型,分别为库级备份、表空间级备份、表级备份以及归档级备份,其中 ARCHIVELOG 和 ARCHIVE LOG 等价。若不指定备份集类型,则全部删除。指定 TABLESPACE 时,若指定目标表空间名,则仅会删除满足条件的指定表空间名称的表空间备份集,否则,删除所有满足条件的表空间备份集。指定 TABLE 时,若指定目标表名,则仅会删除满足条件的指定表名的表备份集,否则,删除所有满足条件的表备份集。 |
| UNTIL TIME | 删除备份集生成的最大时间,即删除指定时间之前的备份集,若未指定,则删除所有备份集。 |
| BEFORE | 删除距离当前时间前 n_day 天产生的备份集;n_day 取值范围 0~365,单位:天 |

<backupset_type>:

1.4.2 删除特定的备份集
使用 REMOVE BACKUPSET ... 命令可删除特定备份集,每次只能删除一个备份集。若删除备份集已经被引用为其他备份集的基备份且未指定 CASCADE,则报错。
- 指定路径删除
RMAN> remove backupset '/dmdata/dmbak/db1';
- 如果备份集在数据库默认备份目录下还可使用以下方式删除备份集
RMAN> remove backupset 'db1' database '/dmdata/data/DAMENG/dm.ini'; #正确删除
RMAN> remove backupset 'db1'; # [-10001]:[错误码:-127]无效的备份集目录[/dmdata/dmbak/db1]
如果待删除备份集为其他增量备份的基备份,且待删除备份集和增量备份都在数据库默认备份目录下还可使用以下方式删除备份集:
RMAN> backup database '/dmdata/data/DAMENG/dm.ini' backupset 'db1';
RMAN> backup database '/dmdata/data/DAMENG/dm.ini' increment backupset 'inc';RMAN> remove backupset 'db1' database '/dmdata/data/DAMENG/dm.ini';
remove backupset 'db1' database '/dmdata/data/DAMENG/dm.ini';
[-8202]:[/dmdata/dmbak/inc]的基备份,不能删除RMAN> remove backupset 'db1' database '/dmdata/data/DAMENG/dm.ini' cascade; #删除db1和inc两个文件夹
1.4.3 批量删除所有备份集
使用 REMOVE ... BACKUPSETS ... 命令可批量删除备份集。批量删除可选择备份集的备份类型,备份类型包括数据库备份、表空间备份、表备份以及归档备份,不指定备份类型则全部删除。
RMAN> remove backupsets with backupdir '/dmdata/dmbak' #全删
RMAN> REMOVE database backupsets with backupdir '/dmdata/dmbak'; #删数据库备份
RMAN> remove tablespace backupsets with backupdir '/dmdata/dmbak'; #删全部表空间备份
1.4.4 批量删除指定时间之前的备份集
REMOVE ... BACKUPSETS ... UNTIL TIME 命令用来批量删除指定时间之前的备份集。通常情况下,用户并不想删除指定目录下所有的备份集,这时可以选择只删除指定时间之前的备份集。如何确定删除备份的截止时间点,需要结合用户的备份计划合理指定。若用户每周做一次完全备份,每天进行增量备份,那么删除的时间可指定为 7 天前的某个特定时间。假设今天的日期为 2024-2-8,要删除 7 天前/dmdata/dmbak 目录下的所有备份在 DMRMAN 中输入以下命令:
RMAN>REMOVE BACKUPSETS WITH BACKUPDIR '/dmdata/dmbak' UNTIL TIME '2024-2-1 00:00:00';
五、数据还原
1、数据库还原
数据库还原分为两个步骤:
- 数据库还原
- 数据库恢复一致性
1.1 数据库还原
使用 RESTORE 命令完成脱机还原操作,在还原语句中指定库级备份集,可以是脱机库级备份集,也可以是联机库级备份集。数据库的还原包括数据库配置文件还原和数据文件还原,目前可能需要还原的数据库配置文件包括 dm.ini、dm.ctl、服务器秘钥文件(dm_service.prikey 或者 dm_external.config,若备份库指定 usbkey 加密,则无秘钥文件)、联机日志文件。
1.1.1 语法
RESTORE DATABASE <restore_type> FROM BACKUPSET '<备份集路径>'
[<device_type_stmt>]
[IDENTIFIED BY <密码>|"<密码>" [ENCRYPT WITH <加密算法>]]
[WITH BACKUPDIR '<基备份搜索目录>'{,'<基备份搜索目录>'}]
[MAPPED FILE '<映射文件路径>'][TASK THREAD <任务线程数>]
[RENAME TO '<数据库名>'] [USE BAK_MAGIC <备份集魔数>];
<restore_type>::=<type1>|<type2>
<type1>::='<ini_path>'[TO SHADOW] [WITH CHECK] [REUSE DMINI] [WITHOUT MIRROR][WITHOUT SPACE] [AUTO EXTEND] [OVERWRITE]
<type2>::= TO '<system_dbf_dir>' [TO SHADOW] [WITH CHECK] [OVERWRITE] [WITHOUT MIRROR]
<device_type_stmt>::= DEVICE TYPE <介质类型> [PARMS '<介质参数>']
| 参数 | 说明 |
|---|---|
| DATABASE | 指定数据库 dm.ini 文件路径,若指定,则该数据库的默认备份目录将作为备份集搜索目录之一。 |
| BACKUPSET | 查看单个备份集信息,若该备份集为增量备份且同时指定 RECURSIVE,则显示以该备份集为最新备份集递归显示完整的备份集链表;否则,仅显示指定备份集本身信息。 |
| DEVICE TYPE | 指存储备份集的介质类型,支持 DISK 和 TAPE,默认 DISK。 |
| PARMS | 只对介质类型为 TAPE 时有效 |
| IDENTIFIED BY | 指定备份时使用的加密密码,供还原过程解密使用。密码可以用双引号括起来,这样可以避免一些特殊字符通不过语法检测。 |
| ENCRYPT WITH | 指定备份时使用的加密算法,供还原过程解密使用,若未指定,则使用默认算法 AES256_CFB。 |
| WITH BACKUPDIR | 用于增量备份的还原中,指定基备份的搜索目录。用于增量备份还原中,指定基备份的搜索目录,最大长度为 256 个字节。若缺省,自动在以下路径中搜索:CONFIGURE ADD 语句添加的搜索目录、当前备份集目录的上一级目录(例如:当前增量备份集目录为 BACKUPSET D:\ bakrman\db_bak的路径,则上一级目录为D:\bakrman)搜索基备份。如果基备份不在上述路径下,增量备份必须指定该参数。 |
| MAPPED FILE | 指定存放还原目标路径的映射文件路径。当参数 BACKUPSET 指定的路径和 MAPPED FILE 中指定的路径不一致时,以 MAPPED FILE 中指定的路径为主。 |
| TASK THREAD | 指定还原过程中用于处理解压缩和解密任务的线程个数。若未指定,则默认为 4;若指定为 0,则调整为 1;若指定超过当前系统主机核数,则调整为主机核数。 |
| RENAME TO | 指定还原数据库后是否更改库的名字,若指定该参数则将还原后的库改为指定的数据库名,默认使用备份集中的 db_name 作为还原后库的名称。 |
| USE BAK_MAGIC | 指定备份集魔数,若不指定,则默认为 0。使用备份集进行还原恢复时指定的 BAK_MAGIC 需要与备份集的 BAK_MAGIC 一致,用户可通过 DMRMAN 工具的 SHOW BACKUPSET 命令查看备份集的 BAK_MAGIC。该参数仅在 DMDPC 环境下有效。 |
| TO SHADOW | 指定该关键字,将目标库还原成影子库。 |
| WITH CHECK | 指定还原前校验备份集数据完整性。缺省不校验。 |
| REUSE DMINI | 指定 REUSE DMINI 子句进行数据库还原,此时会将备份集中备份的 dm.ini 中除路径相关的 INI 参数外,均拷贝到当前 dm.ini 上。 |
| WITHOUT SPACE | 指定还原数据库时不再为数据文件尾部未使用的数据页分配磁盘,不指定则默认分配。 |
| WITHOUT MIRROR | 指定还原数据库时不还原镜像文件,不指定则默认进行还原。 |
| AUTO EXTEND | 还原数据库时设置文件自动拓展,避免指定 WITHOUT SPACE 关键字后,由于源库未设置文件自动拓展,从而导致恢复过程或从 DDL_CLONE 库还原后更新 DB_MAGIC 时存储空间不足。 |
| OVERWRITE | 还原数据库时,存在重名的数据文件时,是否覆盖重建,不指定则默认报错。 |
注意
如果使用影子备份集进行还原,无论是否指定TO SHADOW关键字,目标库都被还原成影子库。如果使用普通备份集进行还原,指定TO SHADOW关键字,目标库被还原成影子库;不指定TO SHADOW关键字,目标库被还原成普通库。
还原时指定OVERWRITE选项,所有重名的文件和非空目录均会删除重建,该过程是无法撤销的。为避免删除重要的文件,还原前请务必确保数据库系统路径下未存放无关文件。
1.1.2 使用举例
通过 RESTORE 命令还原后的数据库不可用,需进一步执行 RECOVER 命令,将数据库恢复到备份结束时的状态。
数据库备份集分为联机和脱机两种类型。通常情况下,用户会在联机状态下备份数据库,因此下面以联机数据库备份为例说明使用 DMRMAN 如何执行数据库还原操作。
- 联机备份数据库,保证数据库运行在归档模式及 OPEN 状态;
SQL> BACKUP DATABASE BACKUPSET '/dmdata/dmbak/db_full_bak_for_restore';
- 准备目标库。还原目标库可以是已经存在的数据库,也可使用 dminit 工具初始化一个新库。如下所示:
dminit path=/dmdata/data db_name=DAMENG_FOR_RESTORE
-
校验备份集
-
还原数据库
- 直接指定还原目标库的 dm.ini 进行数据库还原
RMAN> RESTORE DATABASE '/dmdata/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/dmdata/dmbak/db_full_bak_for_restore';- 指定 REUSE DMINI 子句进行数据库还原
RMAN> RESTORE DATABASE '/dmdata/data/DAMENG_FOR_RESTORE/dm.ini' REUSE DMINI FROM BACKUPSET '/dmdata/dmbak/db_full_bak_for_restore';
当使用指定 FROM LSN 生成的库备份集进行数据库还原时,存在以下限制
- 还原目标库必须为正常退出的数据库。
- 在集群环境下,源库和目标库必须从属于同一集群,且目标库必须为集群中的备库。
- 备份时指定的 FROM LSN 必须小于等于目标库最小的 APPLY_LSN。
- 备份集的 END_LSN(即备份结束时系统的 CUR_LSN)必须大于等于目标库最大的 APPLY_LSN。
- 备份时指定的 FROM LSN 必须小于等于目标库检查点 LSN。
1.2 数据库恢复一致性
使用 RECOVER 命令完成数据库恢复工作,数据库恢复是指重做 REDO 日志。可以是基于备份集的恢复工作,也可以是使用本地归档日志的恢复工作。
如果还原后,不需要重做日志,数据就已经处于一致性状态了(例如正常关闭库的脱机备份还原),则可以跳过这一步,直接进入数据库更新阶段。
数据库恢复是指重做 REDO 日志,有两种方式:从备份集恢复,即重做备份集中的 REDO 日志;从归档恢复,即重做归档中的 REDO 日志。由于日志重做过程中,修改好的数据页首先存入缓冲区,缓冲区分批次将修改好的数据页写入磁盘,如果在此过程中发生异常中断,可能导致缓冲区中的数据页无法写入磁盘,造成数据的不一致,数据库启动时校验失败,所以数据库恢复过程中不允许异常中断。数据库恢复后,还需要执行数据库更新操作,将数据库调整为可正常工作的库才算完成。下面逐一进行说明。
1.2.1 从备份集恢复
如果备份集在备份过程中生成了日志,且这些日志在备份集中有完整备份(如联机数据库备份),在执行数据库还原后,可以重做备份集中备份的日志,将数据库恢复到备份时的状态,即从备份集恢复。完整的示例如下:
- 启动 DIsql 联机备份数据库;
BACKUP DATABASE BACKUPSET '/dmdata/dmbak/db_full_bak_for_recover_backupset';
- 准备目标库,可以使用备份库,也可以重新生成库;
重新生成库操作如下:
./dminit path=/dmdata/data db_name=DAMENG_FOR_RESTORE auto_overwrite=1
- 启动 RMAN,校验备份;
RMAN> CHECK BACKUPSET '/dmdata/dmbak/db_full_bak_for_recover_backupset';
- 还原数据库;
RMAN> RESTORE DATABASE '/dmdata/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/dmdata/dmbak/db_full_bak_for_recover_backupset';
- 恢复数据库。
RMAN> RECOVER DATABASE '/dmdata/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/dmdata/dmbak/db_full_bak_for_recover_backupset';
1.2.2 从归档恢复
从归档恢复是利用重做本地归档日志来恢复数据的过程。从归档恢复允许恢复到指定的时间点及指定的 LSN 值。若同时指定了时间点和 LSN,则以较早的为结束点。
注意
使用DDL CLONE方式备份的数据库,不支持指定归档恢复。
指定归档恢复时,不建议使用联机状态下源库的归档,此时无法保证归档的完整性。
由于从本地归档恢复允许使用 USE DB_MAGIC 指定待收集归档的 DB_MAGIC,那么就会存在跨库恢复情况,所以,归档日志的正确使用完全由用户保证。因此,为了保证用户能正确使用从归档恢复,除了下文这两种情况,其他情况(可能导致数据被破坏)不建议用户使用从本地归档恢复。
使用异常退出源库的归档文件进行恢复
数据库运行过程中,持续写入 REDO 日志到本地联机日志文件,并同步到归档文件。一般认为,源库故障后,使用备份集和归档文件可以将目标库数据恢复到最新状态,这样的假设并不总是成立,考虑如下场景:
- 创建数据库 D1;
- 操作数据库并执行备份,产生备份集 B1;
- 继续操作数据库,操作过程中数据库故障,产生归档 A1。
如果故障发生在 REDO 日志已写入联机日志,但未写入归档文件时,由于归档文件缺少部分 REDO 日志,此时使用备份集 B1 及归档 A1 无法将目标数据库恢复到最新状态。
对于这样的情况,需要使用联机日志修复归档后,才可使用归档文件将目标数据库恢复到最新状态。
- 联机备份D1全库
SQL> backup database backupset 'B1';
- 循环插入100W条记录
CREATE TABLE TABLE_3
(i int
);beginfor i in 1..1000000loopinsert into TABLE_3 values(i);if i%50 = 0 THENcommit;end if;end loop;
end;
-
强杀达梦进程,异常退出
-
准备目标库D2,即待还原的库
dminit path=/dmdata/data db_name=D2
- 修复D1归档日志
RMAN> REPAIR ARCHIVELOG DATABASE '/dmdata/data/D1/dm.ini';
- 使用备份集 B1 及归档 A1 将目标库 D2 恢复到最新状态
# 还原数据库到D2
RMAN> RESTORE DATABASE '/dmdata/data/D2/dm.ini' FROM BACKUPSET '/dmdata/dmbak/B1';
# 使用归档文件恢复到最新状态
RMAN> RECOVER DATABASE '/dmdata/data/D2/dm.ini' WITH ARCHIVEDIR '/dmdata/dmbak/arch';
1.3 更新DB_MAGIC
RMAN>RECOVER DATABASE '/dmdata/data/D2/dm.ini' UPDATE DB_MAGIC;
2、表空间还原
使用 RESTORE 命令完成表空间的脱机还原,还原的备份集可以是联机或脱机生成的库备份集,也可以是联机生成的表空间备份集。脱机表空间还原仅涉及表空间数据文件的重建与数据页的拷贝。不需要事先置目标表空间为 OFFLINE 状态。
表空间还原后,表空间状态被置为 RES_OFFLINE,并设置数据标记 FIL_TS_RECV_STATE_RESTORED,表示已经还原但数据不完整。
2.1 语法
RESTORE DATABASE '<ini_path>' TABLESPACE <表空间名> [with check] [DATAFILE <文件编号> {,<文件编号>} | '<文件路径>' {,'<文件路径>'}] FROM BACKUPSET '<备份集路径>' [<device_type_stmt>] [IDENTIFIED BY <密码>|"<密码>"] [ENCRYPT WITH <加密算法>] [WITH BACKUPDIR '<基备份搜索目录>' {,'<基备份搜索目录>'}] [MAPPED FILE '<映射文件路径>'] [TASK THREAD <线程数>];<device_type_stmt>::= DEVICE TYPE <介质类型> [PARMS '<介质参数>']
使用说明:
- 表空间还原不能是 TEMP 表空间,指定文件还原也不能为 TEMP 表空间中文件。
- 表空间还原要求还原目标库与备份库为同一个库,否则将报错。
- 还原目标库不能为已经执行过 RESTORE 但未执行过 RECOVER 的库。
- 处于 RES_OFFLINE 或 CORRUPT 状态的表空间不允许指定表空间中数据文件还原。
- 整个还原过程中不会修改数据库本身状态或者调整 CKPT_LSN。
- 不管是 DSC 环境,还是单机环境,若异常退出,需手动指定各节点归档修复后,使用各节点完整的归档日志执行还原恢复;否则,将可能无法恢复到最新状态。
- 若目标库中 SYSTEM 表空间故障,则必须优先还原 SYSTEM 表空间。
- 在 DMDSC 环境中进行表空间还原,需要先确保所有节点实例都已退出,此时在任一节点上使用该节点的备份集均可进行表空间还原操作,且只要在一个节点上执行目标表空间还原即可。
- 如果 SYSTEM 表空间处于 ONLINE/OFFLINE 状态且文件丢失,则必须要通过库还原修复,不支持对其执行表空间还原。
以联机表空间备份集为例,展示 DMRMAN 如何完成表空间的还原:
- 联机备份表空间,保证数据库运行在归档模式及 OPEN 状态;
BACKUP TABLESPACE MAIN BACKUPSET '/dmdata/dmbak/ts_full_bak_for_restore';
- 校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此处使用脱机校验;
RMAN> CHECK BACKUPSET '/dmdata/dmbak/ts_full_bak_for_restore';
- 还原表空间。需要注意,表空间还原的目标库只能是备份集产生的源库,否则将报错。
RMAN> RESTORE DATABASE '/dmdata/data/DAMENG_FOR_RESTORE/dm.ini' TABLESPACE MAIN FROM BACKUPSET '/dmdata/dmbak/ts_full_bak_for_restore';
- 恢复表空间
RMAN> RECOVER DATABASE '/dmdata/data/DAMENG_FOR_RECOVER/dm.ini' TABLESPACE MAIN;
3、归档还原
使用 RESTORE 命令完成脱机还原归档操作,在还原语句中指定归档备份集。备份集可以是脱机归档备份集,也可以是联机归档备份集。
3.1 语法
RESTORE <ARCHIVE LOG | ARCHIVELOG> [WITH CHECK] FROM BACKUPSET '<备份集路径>'[<device_type_stmt>] [IDENTIFIED BY <密码>|"<密码>" [ENCRYPT WITH <加密算法>]] [TASK THREAD <任务线程数>] [NOT PARALLEL] [ALL | [FROM LSN <lsn>] | [UNTIL LSN <lsn>] | [LSN BETWEEN <lsn> AND <lsn>] | [FROM TIME '<time>'] | [UNTIL TIME '<time>'] | [TIME BETWEEN '<time>' AND '<time>'] ] TO <还原目录> [OVERWRITE <level>]; <device_type_stmt>::= DEVICE TYPE <介质类型> [PARMS '<介质参数>']<还原目录>::= ARCHIVEDIR '<归档日志目录>' | DATABASE '<ini_path>'
| 参数 | 说明 |
|---|---|
| WITH CHECK | 指定还原前校验备份集数据完整性。缺省不校验。 |
| BACKUPSET | 指定用于还原归档的备份集路径。若指定为相对路径,会在 < 还原目录 > 指定的 DATABASE 对应的默认数据库备份目录下搜索备份集。例如:在 RESTORE ARCHIVE LOG FROM BACKUPSET ‘ARCH_LOG_00’ TO DATABASE ‘D:\HY\DAMENG\dm.ini’ OVERWRITE 2;语句中,因为备份集 ARCH_LOG_00 为相对路径,所以会在还原目标库 D:\HY\DAMENG 的默认数据库备份目录中搜索 ARCH_LOG_00。如果 < 还原目录 > 中指定的是 ARCHIVEDIR,则 BACKUPSET 必须指定绝对路径。 |
| NOT PARALLEL | 指定并行备份集使用非并行方式还原。对于非并行备份集,不论是否指定该关键字,均采用非并行还原。 |
| ALL | 还原所有的归档。若不指定,则默认为 ALL。 |
| FROM LSN,FROM TIME | 指定还原的起始 LSN 或者开始的时间点。真正的起始点为该 LSN 或该时间点所在的整个归档日志文件作为起始点。例如,指定 FROM 10001,而归档日志文件 X 的 LSN 为 9000-12000,那么就会将该归档日志文件 X 作为起始归档日志文件。 |
| UNTIL LSN,UNTIL TIME | 指定还原的截止 LSN 或者截止的时间点。真正的截止点为该 LSN 或该时间点所在的整个归档日志文件作为截止归档日志文件。 |
| BETWEEN … AND … | |
| ARCHIVEDIR | 指定还原的目标归档日志目录。 |
| DATABASE | 指定还原目标库的 dm.ini 文件路径,将归档日志还原到该库的归档日志目录中。 |
| OVERWRITE | 还原归档时,指定归档日志已经存在时的处理方式。可取值 1、2、3。1:跳过已存在的归档日志,继续其他日志的还原。跳过的日志信息会生成一条日志记录在安装目录的 log 目录中的 dm_BAKRES_年月.log 日志文件中。2:直接报错返回。3:强制覆盖已存在的归档日志。缺省为 1。 |
使用说明:
- 联机备份归档,保证数据库运行在归档模式及 OPEN 状态;
BACKUP ARCHIVE LOG ALL BACKUPSET '/dmdata/dmbak/arch_all_for_restore';
- 校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此处使用脱机校验;
RMAN> CHECK BACKUPSET '/dmdata/dmbak/arch_all_for_restore';
- 还原归档。启动 DMRMAN,设置 OVERWRITE 为 2,如果归档文件已存在,会报错。
指定还原的目标归档日志目录:
RMAN> RESTORE ARCHIVE LOG FROM BACKUPSET '/dmdata/dmbak/arch_all_for_restore' TO ARCHIVEDIR'/dmdata/data/DAMENG_FOR_RESTORE/arch_dest' OVERWRITE 2;
指定还原目标库的 dm.ini 文件路径:
RMAN> RESTORE ARCHIVE LOG FROM BACKUPSET '/dmdata/dmbak/arch_all_for_restore' TO DATABASE '/dmdata/data/DAMENG_FOR_RESTORE/dm.ini' OVERWRITE 2;
4、归档修复
使用 REPAIR 命令完成指定数据库的归档修复,归档修复会对目标库 dmarch.ini 中配置的所有本地归档日志目录执行修复。若目标库没有配置本地归档,则不执行修复。执行修复时,目标库一定不能处于运行状态。一般建议在数据库故障后,应立即执行归档修复,否则后续还原恢复将会导致联机日志中未刷入本地归档的 REDO 日志丢失,届时再利用本地归档恢复将无法恢复到故障前的最新状态。
REPAIR <ARCHIVE LOG | ARCHIVELOG> DATABASE '<ini_path>';
- 单机环境下,确保目标库已经停止工作后,执行归档修复
RMAN> REPAIR ARCHIVELOG DATABASE '/dmdata/data/DAMENG/dm.ini';
- DSC 环境下,需要每个节点停止工作后,每个节点独立执行修复操作
# 对于两节点 DSC01、DSC02 执行修复如下 RMAN> REPAIR ARCHIVELOG DATABASE '/opt/dmdbms/dsc/dm01.ini';RMAN> REPAIR ARCHIVELOG DATABASE '/opt/dmdbms/dsc/dm02.ini';
达梦社区:https://eco.dameng.com
相关文章:
dmrman备份还原
脱机还原工具-dmrman 前言 根据达梦官网文档整理 一、概述 DMRMAN 命令行设置参数执行又可分为命令行指定脚本、命令行指定语句两种执行方式。 指定语句 $ DMRMAN RMAN>BACKUP DATABASE/dmdata/data/DAMENG/dm.ini;指定脚本 创建一个名为 cmd_file.txt 的文件&#x…...
网页403错误(Spring Security报异常 Encoded password does not look like BCrypt)
这个错误通常表现为"403 Forbidden"或"HTTP Status 403",它指的是访问资源被服务器理解但拒绝授权。换句话说,服务器可以理解你请求看到的页面,但它拒绝给你权限。 也就是说很可能测试给定的参数有问题,后端…...
单细胞多组学整合与对齐的计算方法
Computational Methods for Single-cell Multi-omics Integration and Alignment Bioinformatics-2022-密西根大学 关键词:单细胞;多组学;机器学习;无监督学习;集成 摘要 最近发展起来的生成单细胞基因组数据的技术在生物学领域产生了革命性的影响。多组学测定提…...
33.openeuler OECA认证模拟题16
一 、选择题 1.如何查看系统支持的 shell? A、cat /etc/passwd B、cat /etc/shells C、echo SSHELL D、echo $0 答案 :B 2.下列哪项不是 shell的功能? A 、 用户界面,提供用户与内核交互接口 B 、 命令解释器 C 、提供编译环境 D 、 提供各种管理工具,…...
javaScript数组去重的几种实现方式——适用非引用数据去重
最传统的使用循环遍历 //最传统的使用循环遍历 function getUnique(arr) {let newArr [];for (let i 0; i < arr.length; i) {for (let j i 1; j < arr.length; j) {if (arr[i] arr[j]) {i; //相同丢掉前面的元素}}newArr.push(arr[i]);}return newArr; } 利用Set实…...
Nexus Repository Manager
Nexus Repository Manager https://s01.oss.sonatype.org/#welcome https://mvnrepository.com/-CSDN博客...
Python世界之运算符
一、算术运算符 以下假设变量: a10,b20: 运算符 描述 实例 加 - 两个对象相加 a b 输出结果 30 - 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -10 * 乘 - 两个数相乘或是返回一个被重复若干次的字符串 a * b 输出结…...
蓝桥杯倒计时47天!DFS基础——图的遍历
倒计时47天! 深度优先搜索——DFS 温馨提示:学习dfs之前最好先了解一下递归的思想。 DFS基础——图的遍历 仙境诅咒 问题描述 在一片神秘的仙境中,有N位修仙者,他们各自在仙境中独立修炼,拥有自己独特的修炼之道…...
体验LobeChat搭建私人聊天应用
LobeChat是什么 LobeChat 是开源的高性能聊天机器人框架,支持语音合成、多模态、可扩展的(Function Call)插件系统。支持一键免费部署私人 ChatGPT/LLM 网页应用程序。 地址:https://github.com/lobehub/lobe-chat 为什么要用Lobe…...
ClickHouse 指南(三)最佳实践 -- 主键稀疏索引
在ClickHouse主索引的实用介绍 ClickHouse release 24.1, 2024-01-30 1、简介 在本指南中,我们将深入研究ClickHouse索引。我们将详细说明和讨论: ClickHouse中的索引与传统的关系数据库管理系统有何不同ClickHouse是如何构建和使用表的稀疏主索引的什么是在Clic…...
【Nginx】Nginx配置反向代理 和 https
nginx.conf配置 进入linux /etc/nginx/ 打开nginx.conf 进行以下配置 http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {#监听443端口listen 443 ssl;#你的域名server_name huiblog.top;#ssl证书的pe…...
ChatGPT第七讲
ChatGPT为什么会被热炒? 2023年上半年,ChatGPT引起了广泛的热议,对于ChatGPT有多热,不需要我重复了,你可能在网上看到了很多报道,标题如《ChatGPT揭开AI战幔:杀死黄页一样摧毁Google?…...
Chapter 2 of Effective C++ (构造/析构/赋值运算)
条款06:了解C默默编写并调用哪些函数 Know what functions C silently writes and calls 编译器会为空类生成一个copy构造函数、copy assignment操作符和一个析构函数。此外如果你没有声明任何构造函数,它也会生成一个默认构造函数。 (对C1…...
Android学习笔记 service启动方式
在Android系统中,Service的启动方式主要有两种: ## 1. startService 这种方式用于启动一个服务执行后台任务,不进行通信。当你调用startService()方法启动服务后,服务会一直无限期运行下去,只有在外部调用了stopServi…...
Redis 工具类 与 Redis 布隆过滤器
Redis 工具类 1. 核心依赖 <!--redis--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency><groupId>com.google.guava…...
自定义el-upload 上传文件
前言 最近在做一个文件上传的功能,后端接口写好了、发现前端上传文件的页面不会写……(我很笨的)然后我就找啊找发现element有个组件是<el-upload/>能直接上传文件。我就想直接用拿来改改改成自己想要的,可是就是这样我花了…...
LeetCode69. x 的平方根(C++)
LeetCode69. x 的平方根 题目链接代码 题目链接 https://leetcode.cn/problems/sqrtx/description/ 代码 class Solution { public:int mySqrt(int x) {int right x, left 0, ans -1;while(left < right){long long mid left (right - left) / 2;if(mid * mid <…...
[c++] 单例模式 + cyberrt TimingWheel 单例分析
单例模式要求一个类在一个进程中只能创建一个对象。比如 cyberrt 中的 TimingWheel 类就是单例模式,这个类管理着一个进程内的所有定时器,只需要一个对象就可以。 单例模式的实现有两种方式,懒汉式和饿汉式。懒汉式,当第一次使用…...
如何在cmd里面创建一个vue项目
在命令提示符(CMD)中创建一个Vue项目,你需要先确保你已经全局安装了Vue CLI(Vue的命令行工具)。如果你还没有安装Vue CLI,可以通过以下命令进行安装: bash复制代码 npm install -g vue/cli # O…...
Day2 JS基础
2.1 运算符 赋值运算符 一元运算符 -- <script>let h20let kh hconsole.log(h) //22console.log(k) //42let i1console.log(i i i) //7 // 递增运算符:var a8aconsole.log(a) //9 var num10var bnumconsole.log(b) //10</script> 比较运…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...
Visual Studio Code 扩展
Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后,命令 changeCase.commands 可预览转换效果 EmmyLua…...
高分辨率图像合成归一化流扩展
大家读完觉得有帮助记得关注和点赞!!! 1 摘要 我们提出了STARFlow,一种基于归一化流的可扩展生成模型,它在高分辨率图像合成方面取得了强大的性能。STARFlow的主要构建块是Transformer自回归流(TARFlow&am…...
