当前位置: 首页 > news >正文

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:

在这里插入图片描述

注意:

  1. 设置的参数默认值仅在此 DMRMAN 实例存活期间有效。
  2. 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 完全备份

完全备份数据库步骤如下:

  1. 保证数据库处于脱机状态;
  2. 启动 DMRMAN 命令行工具;
  3. 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 备份步骤
  1. 配置归档;
  2. 保证数据库处于脱机状态;
  3. 启动 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_stmtSHOW 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>'];
image-20240222215414473
  • 检查备份集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 如何执行数据库还原操作。

  1. 联机备份数据库,保证数据库运行在归档模式及 OPEN 状态;
SQL> BACKUP DATABASE BACKUPSET '/dmdata/dmbak/db_full_bak_for_restore';
  1. 准备目标库。还原目标库可以是已经存在的数据库,也可使用 dminit 工具初始化一个新库。如下所示:
dminit path=/dmdata/data db_name=DAMENG_FOR_RESTORE
  1. 校验备份集

  2. 还原数据库

    • 直接指定还原目标库的 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 生成的库备份集进行数据库还原时,存在以下限制

  1. 还原目标库必须为正常退出的数据库。
  2. 在集群环境下,源库和目标库必须从属于同一集群,且目标库必须为集群中的备库。
  3. 备份时指定的 FROM LSN 必须小于等于目标库最小的 APPLY_LSN。
  4. 备份集的 END_LSN(即备份结束时系统的 CUR_LSN)必须大于等于目标库最大的 APPLY_LSN。
  5. 备份时指定的 FROM LSN 必须小于等于目标库检查点 LSN。

1.2 数据库恢复一致性

使用 RECOVER 命令完成数据库恢复工作,数据库恢复是指重做 REDO 日志。可以是基于备份集的恢复工作,也可以是使用本地归档日志的恢复工作。

如果还原后,不需要重做日志,数据就已经处于一致性状态了(例如正常关闭库的脱机备份还原),则可以跳过这一步,直接进入数据库更新阶段。

数据库恢复是指重做 REDO 日志,有两种方式:从备份集恢复,即重做备份集中的 REDO 日志;从归档恢复,即重做归档中的 REDO 日志。由于日志重做过程中,修改好的数据页首先存入缓冲区,缓冲区分批次将修改好的数据页写入磁盘,如果在此过程中发生异常中断,可能导致缓冲区中的数据页无法写入磁盘,造成数据的不一致,数据库启动时校验失败,所以数据库恢复过程中不允许异常中断。数据库恢复后,还需要执行数据库更新操作,将数据库调整为可正常工作的库才算完成。下面逐一进行说明。

1.2.1 从备份集恢复

如果备份集在备份过程中生成了日志,且这些日志在备份集中有完整备份(如联机数据库备份),在执行数据库还原后,可以重做备份集中备份的日志,将数据库恢复到备份时的状态,即从备份集恢复。完整的示例如下:

  1. 启动 DIsql 联机备份数据库;
BACKUP DATABASE BACKUPSET '/dmdata/dmbak/db_full_bak_for_recover_backupset';
  1. 准备目标库,可以使用备份库,也可以重新生成库;

重新生成库操作如下:

./dminit path=/dmdata/data db_name=DAMENG_FOR_RESTORE auto_overwrite=1
  1. 启动 RMAN,校验备份;
RMAN> CHECK BACKUPSET '/dmdata/dmbak/db_full_bak_for_recover_backupset';
  1. 还原数据库;
RMAN> RESTORE DATABASE '/dmdata/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/dmdata/dmbak/db_full_bak_for_recover_backupset';
  1. 恢复数据库。
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,则以较早的为结束点。

注意

  1. 使用DDL CLONE方式备份的数据库,不支持指定归档恢复。

  2. 指定归档恢复时,不建议使用联机状态下源库的归档,此时无法保证归档的完整性

  3. 由于从本地归档恢复允许使用 USE DB_MAGIC 指定待收集归档的 DB_MAGIC,那么就会存在跨库恢复情况,所以,归档日志的正确使用完全由用户保证。因此,为了保证用户能正确使用从归档恢复,除了下文这两种情况,其他情况(可能导致数据被破坏)不建议用户使用从本地归档恢复

使用异常退出源库的归档文件进行恢复

数据库运行过程中,持续写入 REDO 日志到本地联机日志文件,并同步到归档文件。一般认为,源库故障后,使用备份集和归档文件可以将目标库数据恢复到最新状态,这样的假设并不总是成立,考虑如下场景:

  1. 创建数据库 D1;
  2. 操作数据库并执行备份,产生备份集 B1;
  3. 继续操作数据库,操作过程中数据库故障,产生归档 A1。

如果故障发生在 REDO 日志已写入联机日志,但未写入归档文件时,由于归档文件缺少部分 REDO 日志,此时使用备份集 B1 及归档 A1 无法将目标数据库恢复到最新状态。

对于这样的情况,需要使用联机日志修复归档后,才可使用归档文件将目标数据库恢复到最新状态。

  1. 联机备份D1全库
SQL> backup database backupset 'B1';
  1. 循环插入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;
  1. 强杀达梦进程,异常退出

  2. 准备目标库D2,即待还原的库

dminit path=/dmdata/data db_name=D2
  1. 修复D1归档日志
RMAN> REPAIR ARCHIVELOG DATABASE '/dmdata/data/D1/dm.ini';
  1. 使用备份集 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 '<介质参数>']

使用说明:

  1. 表空间还原不能是 TEMP 表空间,指定文件还原也不能为 TEMP 表空间中文件。
  2. 表空间还原要求还原目标库与备份库为同一个库,否则将报错
  3. 还原目标库不能为已经执行过 RESTORE 但未执行过 RECOVER 的库。
  4. 处于 RES_OFFLINE 或 CORRUPT 状态的表空间不允许指定表空间中数据文件还原。
  5. 整个还原过程中不会修改数据库本身状态或者调整 CKPT_LSN。
  6. 不管是 DSC 环境,还是单机环境,若异常退出,需手动指定各节点归档修复后,使用各节点完整的归档日志执行还原恢复;否则,将可能无法恢复到最新状态。
  7. 若目标库中 SYSTEM 表空间故障,则必须优先还原 SYSTEM 表空间
  8. 在 DMDSC 环境中进行表空间还原,需要先确保所有节点实例都已退出,此时在任一节点上使用该节点的备份集均可进行表空间还原操作,且只要在一个节点上执行目标表空间还原即可。
  9. 如果 SYSTEM 表空间处于 ONLINE/OFFLINE 状态且文件丢失,则必须要通过库还原修复,不支持对其执行表空间还原。

以联机表空间备份集为例,展示 DMRMAN 如何完成表空间的还原:

  1. 联机备份表空间,保证数据库运行在归档模式及 OPEN 状态;
BACKUP TABLESPACE MAIN BACKUPSET '/dmdata/dmbak/ts_full_bak_for_restore';
  1. 校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此处使用脱机校验;
RMAN> CHECK BACKUPSET '/dmdata/dmbak/ts_full_bak_for_restore';
  1. 还原表空间。需要注意,表空间还原的目标库只能是备份集产生的源库,否则将报错。
RMAN> RESTORE DATABASE '/dmdata/data/DAMENG_FOR_RESTORE/dm.ini' TABLESPACE MAIN FROM BACKUPSET '/dmdata/dmbak/ts_full_bak_for_restore';
  1. 恢复表空间
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。

使用说明:

  1. 联机备份归档,保证数据库运行在归档模式及 OPEN 状态;
BACKUP ARCHIVE LOG ALL BACKUPSET '/dmdata/dmbak/arch_all_for_restore';
  1. 校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此处使用脱机校验;
RMAN> CHECK BACKUPSET '/dmdata/dmbak/arch_all_for_restore';
  1. 还原归档。启动 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"&#xff0c;它指的是访问资源被服务器理解但拒绝授权。换句话说&#xff0c;服务器可以理解你请求看到的页面&#xff0c;但它拒绝给你权限。 也就是说很可能测试给定的参数有问题&#xff0c;后端…...

单细胞多组学整合与对齐的计算方法

Computational Methods for Single-cell Multi-omics Integration and Alignment Bioinformatics-2022-密西根大学 关键词&#xff1a;单细胞;多组学;机器学习;无监督学习;集成 摘要 最近发展起来的生成单细胞基因组数据的技术在生物学领域产生了革命性的影响。多组学测定提…...

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世界之运算符

一、算术运算符 以下假设变量&#xff1a; a10&#xff0c;b20&#xff1a; 运算符 描述 实例 加 - 两个对象相加 a b 输出结果 30 - 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -10 * 乘 - 两个数相乘或是返回一个被重复若干次的字符串 a * b 输出结…...

蓝桥杯倒计时47天!DFS基础——图的遍历

倒计时47天&#xff01; 深度优先搜索——DFS 温馨提示&#xff1a;学习dfs之前最好先了解一下递归的思想。 DFS基础——图的遍历 仙境诅咒 问题描述 在一片神秘的仙境中&#xff0c;有N位修仙者&#xff0c;他们各自在仙境中独立修炼&#xff0c;拥有自己独特的修炼之道…...

体验LobeChat搭建私人聊天应用

LobeChat是什么 LobeChat 是开源的高性能聊天机器人框架&#xff0c;支持语音合成、多模态、可扩展的&#xff08;Function Call&#xff09;插件系统。支持一键免费部署私人 ChatGPT/LLM 网页应用程序。 地址&#xff1a;https://github.com/lobehub/lobe-chat 为什么要用Lobe…...

ClickHouse 指南(三)最佳实践 -- 主键稀疏索引

在ClickHouse主索引的实用介绍 ClickHouse release 24.1, 2024-01-30 1、简介 在本指南中&#xff0c;我们将深入研究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为什么会被热炒&#xff1f; 2023年上半年&#xff0c;ChatGPT引起了广泛的热议&#xff0c;对于ChatGPT有多热&#xff0c;不需要我重复了&#xff0c;你可能在网上看到了很多报道&#xff0c;标题如《ChatGPT揭开AI战幔&#xff1a;杀死黄页一样摧毁Google&#xff1f…...

Chapter 2 of Effective C++ (构造/析构/赋值运算)

条款06&#xff1a;了解C默默编写并调用哪些函数 Know what functions C silently writes and calls 编译器会为空类生成一个copy构造函数、copy assignment操作符和一个析构函数。此外如果你没有声明任何构造函数&#xff0c;它也会生成一个默认构造函数。 &#xff08;对C1…...

Android学习笔记 service启动方式

在Android系统中&#xff0c;Service的启动方式主要有两种&#xff1a; ## 1. startService 这种方式用于启动一个服务执行后台任务&#xff0c;不进行通信。当你调用startService()方法启动服务后&#xff0c;服务会一直无限期运行下去&#xff0c;只有在外部调用了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 上传文件

前言 最近在做一个文件上传的功能&#xff0c;后端接口写好了、发现前端上传文件的页面不会写……&#xff08;我很笨的&#xff09;然后我就找啊找发现element有个组件是<el-upload/>能直接上传文件。我就想直接用拿来改改改成自己想要的&#xff0c;可是就是这样我花了…...

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 类就是单例模式&#xff0c;这个类管理着一个进程内的所有定时器&#xff0c;只需要一个对象就可以。 单例模式的实现有两种方式&#xff0c;懒汉式和饿汉式。懒汉式&#xff0c;当第一次使用…...

如何在cmd里面创建一个vue项目

在命令提示符&#xff08;CMD&#xff09;中创建一个Vue项目&#xff0c;你需要先确保你已经全局安装了Vue CLI&#xff08;Vue的命令行工具&#xff09;。如果你还没有安装Vue CLI&#xff0c;可以通过以下命令进行安装&#xff1a; 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 ​// 递增运算符&#xff1a;var a8aconsole.log(a) //9 ​var num10var bnumconsole.log(b) //10</script> 比较运…...

mybatis----有用配置知识归纳(狂神说学习总结)

1.mybatis介绍 MyBatis 是一款优秀的持久层框架MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息&#xff0c;将接口和 Java 的 实体类映射成数据库中的记录 官网 Mybatis中文官方文档 : https…...

【TCP/IP】组播

一、组播介绍 组播&#xff08;Multicast&#xff09;是网络技术中数据传输的一种方法&#xff0c;它允许将数据包同时发送给一组指定的目标&#xff0c;而不是单个的目标&#xff08;单播 Unicast&#xff09;或所有可能的目标&#xff08;广播 Broadcast&#xff09;。组播传…...

java 内存模型

程序计数器 线程私有主要字节码解释器通过读取程序计数器来选取下一条需要执行的指令&#xff0c;比如分支&#xff0c;循环&#xff0c;跳转和异常处理如果执行的是java 方法&#xff0c;那么程序计数器记录的时候虚拟机字节码指令的地址&#xff0c;如果执行的是native 方法…...

Linux——缓冲区封装系统文件操作

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、FILE二、封装系统接口实现文件操作1、text.c2、mystdio.c3、mystdio.h 一、FILE 因为IO相…...

深度学习系列59:文字识别

1. 简单文本&#xff1a; 使用google加的tesseract&#xff0c;效果不错。 首先安装tesseract&#xff0c;在mac直接brew install即可。 python调用代码&#xff1a; import pytesseract from PIL import Image img Image.open(1.png) pytesseract.image_to_string(img, lan…...

学习JAVA的第七天(基础)

目录 static 静态变量 静态方法 工具类&#xff1a; static的注意事项 继承 继承的好处 继承的特点 方法的重写 书写格式 override重写注解 方法重写的要求 this关键字 super关键字 static static表示静态&#xff0c;是Java中的一个修饰符&#xff0c;可以修饰成…...

GoLand 相关

goland 下载依赖 go mod tidy&#xff1a;保持依赖整洁 go mod tidy 命令的作用是清理未使用的依赖&#xff0c;并更新 go.mod 以及 go.sum 文件。 go mod tidy 和 go mod vendor 两个命令是维护项目依赖不可或缺的工具。go mod tidy 确保了项目的 go.mod 文件精简且准确&…...

顶顶通呼叫中心中间件-如何使处于机器人话术中的通话手动转接到坐席分机上

文章目录 前言联系我们实现步骤freeswitch命令转接api接口转接 前言 本文讲解呼叫中心中间件如何手动转接通话。 场景&#xff1a;利用自动外呼进入机器人&#xff0c;在通话过程中&#xff0c;转接到坐席分机上。 联系我们 有意向了解呼叫中心中间件的用户&#xff0c;可以点…...

RabbitMQ开启MQTT协议支持

1&#xff09;RabbitMQ启用MQTT插件 rootmq:/# rabbitmq-plugins enable rabbitmq_mqtt Enabling plugins on node rabbitmq: rabbitmq_mqtt The following plugins have been configured:rabbitmq_managementrabbitmq_management_agentrabbitmq_mqttrabbitmq_web_dispatch Ap…...

Orange3数据预处理(列选择组件)数据角色及类型描述

在Orange3的文件组件中&#xff0c;datetime、categorical、numeric以及text代表不同种类的数据类型&#xff0c;具体如下&#xff1a; datetime&#xff1a;代表日期和时间类型的数据。通常用于时间序列分析、生存分析和其他需要考虑时间因素的机器学习任务中。例如&#xff0…...

哪个网站可以做优惠券/推客平台

一、Collection&#xff1a;存放独立元素 Collection中的接口都是可选操作&#xff0c;其实现类 并不一定实现了其所有接口&#xff0c;这是为了防止“接口爆炸”。最常见的Unsupported Operation 都源自于背后由固定尺寸的数据结构支持的容器&#xff0c;比如使用ArrayList.as…...

台州路桥网站建设/手游推广渠道

CNN卷积神经网络之ZFNet与OverFeat前言一、ZFNet1&#xff09;网络结构2&#xff09;反卷积可视化1.反最大池化(Max Unpooling)2.ReLu激活3.反卷积可视化得出的结论二、OverFeat1&#xff09;网络结构2&#xff09;创新方法1.全卷积2.多尺度预测3.Offset pooling前言 这两个网…...

外贸自建站如何收款/网站优化要做哪些

保存照片和视频到系统相册显示- http://blog.csdn.net/chendong_/article/details/52290329 Android 7.0 之拍照与图片裁剪适配-http://blog.csdn.net/yyh352091626/article/details/54908624 拍照、相册及裁剪的终极实现&#xff08;一&#xff09;——拍照及裁剪功能实现- ht…...

江都建设总部网站/今日头条十大新闻最新

运行行 AndroidStudio 程序。如下图&#xff0c;选择创建一个新的 androidstudio 工程&#xff08;基于 迅为-i.mx6开发板&#xff09; 应用名称改为“helloworld”&#xff0c;项目保存路径修改为自己的保存路径。 连续点击下一步&#xff0c;直到如下界面&#xff0c;选择“B…...

农业门户网站开发/百度推广关键词质量度

关键字volatile的主要作用是使变量在多个线程间可见。 1.关键字volatile与死循环 如果不是在多继承的情况下&#xff0c;使用继承Thread类和实现Runnable接口在取得程序运行的结果上并没有什么太大的区别。如果一旦出现“多继承”的情况&#xff0c;则用实现Runnable接口的方式…...

wordpress清理/网站主页

1、打开终端&#xff1b; 2、输入"IDLE3" 转载于:https://www.cnblogs.com/wus0ng/p/10353430.html...