备份还原实战

本章详细介绍如何利用 DM 提供的各种工具进行备份还原与恢复的操作,包括 DIsql 工具、DMRMAN 工具、图形化客户端管理工具 MANAGER 和 CONSOLE。DIsql 工具用于执行联机的数据备份与数据还原,包括数据库备份、归档备份、表空间备份与还原、表备份与还原;DMRMAN 工具用于执行脱机的数据备份、还原与恢复,包括脱机的数据库备份、还原与恢复,脱机还原表空间,归档的备份、还原与修复;客户端工具 MANAGER 和 CONSOLE 对应命令行工具 DIsql 和 DMRMAN 的功能,分别用于联机和脱机备份还原数据。这四种工具都可以独立使用,也可以相互配合,如使用 DIsql 或 MANAGER 工具联机备份的数据库备份文件可以用 DMRMAN 或 CONSOLE 工具还原。读者在阅读完本章的内容后,就可以动手配置归档,并进行备份与还原操作了。

本章内容主要包括:

  • 准备工作
  • 使用联机执行 SQL 语句进行备份还原
  • 使用脱机工具 DMRMAN 进行备份还原
  • 使用图形化客户端工具进行备份还原
警告

OPEN状态支持备份、还原和恢复的操作;
MOUNT状态支持归档备份;
SUPEND状态均不支持。

3.1 准备工作

本节介绍着手备份与还原之前的准备工作,主要内容包括:

  • 支持与限制
  • 归档配置

3.1.1 支持与限制

在着手备份与还原之前,先详细了解一下 DM 对备份与还原进行了哪些支持与限制,如下进行详细说明。

  • 联机备份

对联机备份的支持与限制:

  1. MPP 环境仅允许库和归档备份,且各节点都会执行,生成相应的备份集,支持 DDL CLONE;
  2. DSC 环境支持库备份、表空间备份和表备份,要求 DSC 环境的所有节点都处于 OPEN 状态;
  3. MOUNT 状态仅支持归档备份;
  4. SUSPEND 状态所有备份均不支持;
  5. OPEN 状态支持所有备份,支持 DDL CLONE;
  6. PRIMARY 模式支持所有备份,支持 DDL CLONE;
  7. STANDBY 模式仅支持库级、表空间级和归档备份,支持 DDL CLONE;
  8. DDL CLONE 必须备份归档,不允许指定 WITHOUT LOG。
  • 联机还原:

仅支持表级还原,对联机还原的支持与限制:

  1. MPP 和分布式数据库不支持;
  2. PRIMARY 支持;
  3. SUSPEND 状态所有还原均不支持;
  4. OPEN/NORMAL 支持。
  • 脱机备份

脱机备份支持库级和归档备份。

  1. MPP 视同单机环境,仅当前节点执行备份操作;
  2. 允许异常退出后备份,支持 DDL_CLONE;
  3. DSC 支持库级备份,支持 DDL_CLONE;当 DSC 环境下正常节点的 CKPT_LSN 小于故障节点的 CKPT_LSN 时,不支持脱机备份。
  • 脱机还原:

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

在一般的应用场景中,常规性的数据库维护工作,即在不影响数据库正常运行的情况下,建议定期执行联机数据库备份,且完全备份和增量备份结合使用。执行两次完全备份的时间间隔可以尽量长一点,在两次完全备份之间执行一定数量的增量备份,比如,可以选择每周执行一次完全备份,一周内每天执行一次增量备份。为了尽量减少对数据库正常工作的影响,建议备份时间,选择在工作量较少的时间,比如深夜。

注意

无论管理员选用哪一种备份方式,都要注意不应将备份产生的备份集与源备份库存放在同一磁盘或同一存储介质上,以避免存储介质发生硬件故障时,源备份库与备份集同时被毁坏。
备份与还原时,指定的备份集名称和目录名中最好不要包含中文、空格以及特殊字符,否则可能会因为字符处理及字符集问题导致一些不可预期的问题。

3.1.2 归档配置

3.1.2.1 概述

DM 数据库可以运行在归档模式或非归档模式下。如果是归档模式,联机日志文件中的内容保存到硬盘中,形成归档日志文件;如果是非归档模式,则不会形成归档日志。

采用归档模式会对系统的性能产生些许影响,然而系统在归档模式下运行会更安全,当出现故障时其丢失数据的可能性更小,这是因为一旦出现介质故障,如磁盘损坏时,利用归档日志,系统可被恢复至故障发生的前一刻,也可以还原到指定的时间点,而如果没有归档日志文件,则只能利用备份进行恢复。

通过 dm.ini 和 dmarch.ini 可以配置本地归档。dmarch.ini 生效的前提是 dm.ini 中的参数 ARCH_INI 置为 1。

DM 的 dmarch.ini 可以进行本地归档和远程归档的设置,DM 备份与还原过程中使用的日志均为本地归档日志。

查询 v​dm_arch_ini、varch_status 等动态视图可以获取归档配置以及归档状态等相关信息。

dmarch.ini 中与备份还原相关的配置参数及其介绍见下表。

表3.1 dmarch.ini相关配置项
配置项 配置含义
[ARCH_NAME] REDO 日志归档名
ARCH_TYPE REDO 日志归档类型,LOCAL 表示本地归档,REMOTE 表示远程
ARCH_DEST REDO 日志归档目标,LOCAL 对应归档文件存放路径;REMOTE 对应远程目标节点实例名
ARCH_FILE_SIZE 单个 REDO 日志归档文件大小,取值范围(64M~2048M),缺省 1024M,即 1G
ARCH_SPACE_LIMIT REDO 日志归档空间限制,当所有本地归档文件达到限制值时,系统自动删除最老的归档文件。0 表示无空间限制,取值范围(1024M~2147483647M),缺省为 0
ARCH_INCOMING_PATH 仅 REMOTE 归档有效,对应远程归档存放在本节点的实际路径

3.1.2.2 何时配置归档

联机备份数据库必须要配置归档。联机备份时,大量的事务处于活动状态,为确保备份数据的一致性,需要同时备份一段日志(备份期间产生的 REDO 日志),因此要求数据库必须配置本地归档且归档必须处于开启状态。

脱机备份数据库可配置归档也可以不配置。正常退出的库的备份不需要考虑本地归档日志的完整性,可以不配置归档;但对于故障退出的库的备份要求因故障未刷盘的日志也必须存在于本地归档中,因此必须配置归档,如果本地归档缺失,需要用户先修复归档,然后再备份。

备份表空间属于联机备份,必须配置归档。

备份表虽然是联机完全备份,但不需要配置归档。因为表在还原之后不需要再进行恢复操作,用不到归档日志。

备份归档日志必须配置归档。

3.1.2.3 联机配置归档

联机配置归档即在数据库实例启动的情况下,使用 SQL 语句完成 dmarch.ini 和 ARCH_INI 的配置。本地归档和远程归档均可以联机配置归档。

语法如下:

ALTER DATABASE <ADD|MODIFY|DELETE> ARCHIVELOG <归档配置语句>;

<归档配置语句>::= 'DEST = <归档目标>,TYPE = <归档类型>'

<归档类型>::=<local方式>|<remote方式>

<local方式>::=LOCAL [,FILE_SIZE = <文件大小>][,SPACE_LIMIT = <空间大小限制>]

<remote方式>::=REMOTE [,FILE_SIZE = <文件大小>][,SPACE_LIMIT = <空间大小限制>],INCOMING_PATH = <归档存放路径>

ADD:增加归档。该参数可以配置本地归档和远程归档。

MODIFY:修改归档。该参数可以修改已有归档的配置参数。不建议修改归档类型。

DELETE: 删除归档。在归档模式下,不允许删除本地归档。

图例:

图例

local 方式:

local 方式

remote 方式:

remote 方式

增加或修改归档的步骤如下:

  1. 修改数据库为 MOUNT 状态;
  2. 增加或修改归档;
  3. 开启归档模式;
  4. 修改数据库为 OPEN 状态。

删除归档的步骤如下:

  1. 修改数据库为 MOUNT 状态;
  2. 关闭归档模式;
  3. 删除归档。

修改数据库状态的语法如下:

ALTER DATABASE <MOUNT|ARCHIVELOG|NOARCHIVELOG|OPEN>;

MOUNT: 状态仅支持归档备份。

ARCHIVELOG: 开启归档模式。

NOARCHIVELOG: 关闭归档模式。

OPEN: 状态支持所有备份,支持 DDL CLONE。

例如:

--修改数据库为MOUNT状态

ALTER DATABASE MOUNT;

--配置本地归档

ALTER DATABASE ADD ARCHIVELOG 'DEST = /dmdata/dameng/arch_dsc0, TYPE = local, FILE_SIZE = 1024, SPACE_LIMIT = 2048';

--配置远程归档

ALTER DATABASE ADD ARCHIVELOG 'DEST = DSC1,TYPE = REMOTE,FILE_SIZE = 1024,SPACE_LIMIT = 2048,INCOMING_PATH = /dmdata/dameng/arch_dsc1';

--开启归档模式

ALTER DATABASE ARCHIVELOG;

--修改数据库为OPEN状态

ALTER DATABASE OPEN;
警告

1.使用SQL语句增加远程归档时,必须首先配置本地归档。
2.联机备份时,关闭已配置的本地归档之后再重新打开,会造成归档文件中部分日志缺失,备份时检查归档文件连续性时将会报错。存在该类操作时,若要避免该错误,备份前需要调用checkpoint(100)主动刷新检查点。

3.1.2.4 手动配置归档

手动配置归档即在数据库实例未启动的情况下,手动编写 dmarch.ini 文件和设置参数 ARCH_INI。下面将分别说明如何手动配置本地归档和远程归档。

  • 本地归档

步骤如下:

  1. 手动编辑 dmarch.ini 文件,之后保存在 dm.ini 所在的目录;

dmarch.ini 文件内容如下:

[ARCHIVE_LOCAL1] 

ARCH_TYPE = LOCAL 

ARCH_DEST = d:\dm_arch\arch

ARCH_FILE_SIZE = 1024 

ARCH_SPACE_LIMIT = 2048
  1. 编辑 dm.ini 文件,设置参数 ARCH_INI=1,保存;
  2. 启动数据库实例,数据库已运行于归档模式。
注意

多路归档,指配置多个本地归档。配置的第一个归档,称为第一路归档,后面依次是第二路、第三路......

  • 远程归档

与本地归档一样,远程归档也是配置在 dmarch.ini 文件中,配置步骤请参考本地归档。

一般建议 DMDSC 集群中的节点,在配置本地归档之外,再交叉配置集群中所有其他节点的远程归档。

下面以两节点 DMDSC 集群为例,说明如何编辑 dmarch.ini 文件以配置远程归档,DSC0 和 DSC1 是 DMDSC 集群中的两个实例,交叉进行 REMOTE 归档配置:

DSC0 实例的 dmarch.ini 配置:

ARCH_LOCAL_SHARE    = 1

[ARCHIVE_LOCAL1]

  ARCH_TYPE      	 = LOCAL

  ARCH_DEST     	 = +DMDATA/dameng/arch_dsc0

  ARCH_FILE_SIZE	 = 128

  ARCH_SPACE_LIMIT  = 0

[ARCH_REMOTE1]

  ARCH_TYPE      	= REMOTE

  ARCH_DEST      	= DSC1

  ARCH_INCOMING_PATH = +DMDATA/dameng/arch_dsc1

  ARCH_FILE_SIZE	 = 128

  ARCH_SPACE_LIMIT  = 0

DSC1 实例的 dmarch.ini 配置:

ARCH_LOCAL_SHARE         = 1

[ARCHIVE_LOCAL1]

  ARCH_TYPE     	 = LOCAL 

  ARCH_DEST     	 = +DMDATA/dameng/arch_dsc1

  ARCH_FILE_SIZE	 = 128

  ARCH_SPACE_LIMIT   = 0

[ARCH_REMOTE1]

  ARCH_TYPE     	 = REMOTE

  ARCH_DEST     	 = DSC0

  ARCH_INCOMING_PATH = +DMDATA/dameng/arch_dsc0

  ARCH_FILE_SIZE 	= 128

  ARCH_SPACE_LIMIT  = 0

3.2 使用联机执行 SQL 语句进行备份还原

本节介绍使用 DIsql 工具如何实现数据文件的备份、管理及还原。

本节内容主要包括:

  • 概述
  • 数据备份
  • 数据备份高级主题
  • 管理备份
  • 数据还原
  • 数据还原高级主题

3.2.1 概述

DM 支持通过联机执行 SQL 语句方式对数据库执行备份还原操作。联机方式支持数据库、用户表空间、用户表和归档的备份以及用户表的还原。在进行联机库级备份、归档备份和表空间备份时,必须保证系统处于归档模式,否则联机备份不能进行。

联机备份之前,请设置 INI 参数 BAK_USE_AP,选用合适的备份方式。

注意

在使用的SQL语句中,若指定的备份名、加密算法名长度超过128个字节,会导致语法分析错误。

需要说明的是,DM 备份还原在执行联机操作时,语句的解析执行使用的是 DM 服务器的编码方式,而文件操作使用操作系统的编码方式。因此,当 DM 建库参数的编码方式与操作系统编码方式不一致时,使用中文文件名或路径名等可能造成控制台打印信息和日志文件中的信息的中文部分显示乱码。

3.2.2 数据备份

本节主要介绍使用 DIsql 工具如何备份数据库、用户表空间、用户表和归档。

3.2.2.1 数据库备份

本节描述了如何使用 DIsql 完成最基本的数据库备份及实施一些备份策略,如限制备份集大小、加密备份等。主要内容包括:

  • 概述
  • 设置备份选项
  • 备份数据库
3.2.2.1.1 概述

在 DIsql 工具中使用 BACKUP 语句你可以备份整个数据库。通常情况下,在数据库实例配置归档后输入以下语句即可备份数据库:

SQL>BACKUP DATABASE BACKUPSET 'db_bak_01';

语句执行完后会在默认的备份路径下生成名为“db_bak_01”的备份集目录,默认的备份路径为 dm.ini 中 BAK_PATH 配置的路径,若未配置,则使用 SYSTEM_PATH 下的 bak 目录。这是最简单的数据库备份语句,如果要设置其他的备份选项需了解联机备份数据库的语法。

语法如下:

BACKUP DATABASE [[[FULL] [DDL_CLONE]]| INCREMENT [CUMULATIVE][WITH BACKUPDIR '<基备份搜索目录>'{,'<基备份搜索目录>'}]|[BASE ON BACKUPSET '<基备份目录>']][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 <拆分块大小>]];

FULL:备份类型。FULL 表示完全备份,可不指定,默认为完全备份。

DDL_CLONE:数据库克隆。该参数只能用于完全备份中,表示仅拷贝所有的元数据不拷贝数据。如对于数据库中的表来说,只备份表的定义不备份表中数据。表空间和表备份不支持该参数。数据库克隆必须备份日志。

注意

DDL_CLONE会克隆HUGE表的元数据信息,之后库还原时会还原HUGE表的表定义。

INCREMENT:备份类型。INCREMENT 表示增量备份,若要执行增量备份必须指定该参数。

CUMULATIVE:用于增量备份中,指明为累积增量备份类型,若不指定则缺省为差异增量备份类型。

WITH BACKUPDIR:用于增量备份中,指定基备份的搜索目录,最大长度为 256 个字节。若不指定,自动在默认备份目录和当前备份目录下搜索基备份。如果基备份不在默认的备份目录或当前备份目录下,增量备份必须指定该参数。

BASE ON BACKUPSET:用于增量备份中,指定基备份集路径。

注意

增量备份时,DM不会在默认备份目录或当前备份目录的子目录中搜索基备份集,因此若基备份集在默认备份目录或当前备份目录的子目录中,则需要指定基备份的搜索目录或直接指定基备份集路径,否则将无法搜索到相应的基备份集,备份操作将会失败。

TO:指定生成备份名称。若未指定,系统随机生成,默认备份名格式为:DB_库名_备份类型_备份时间。其中,备份时间为开始备份时的系统时间。

BACKUPSET:指定当前备份集生成路径。若指定为相对路径,则在默认备份路径中生成备份集。若不指定,则在默认备份路径中按约定规则,生成默认备份集目录。库级备份默认备份集目录名生成规则:DB_库名_备份类型_备份时间,如 DB_DAMENG_FULL_20180518_143057_123456。表明该备份集为 2018 年 5 月 18 日 14 时 30 分 57 秒 123456 毫秒时生成的库名为 DAMENG 的数据库完全备份集。若库名超长使备份集目录完整名称长度大于 128 个字节将直接报错路径过长。

DEVICE TYPE:指存储备份集的介质类型,支持 DISK 和 TAPE,默认 DISK。

PARMS:只对介质类型为 TAPE 时有效。

BACKUPINFO:备份的描述信息。最大不超过 256 个字节。

MAXPIECESIZE:最大备份片文件大小上限,以 M 为单位,最小 32M,32 位系统最大 2G,64 位系统最大 128G。

IDENTIFIED BY:指定备份时的加密密码。密码可以用双引号括起来,这样可以避免一些特殊字符通不过语法检测。密码的设置规则遵行 ini 参数 pwd_policy 指定的口令策略。

WITH ENCRYPTION:指定加密类型,0 表示不加密,不对备份文件进行加密处理;1 表示简单加密,对备份文件设置口令,但文件内容仍以明文方式存储;2 表示完全数据加密,对备份文件进行完全的加密,备份文件以密文方式存储。当不指定 WITH ENCRYPTION 子句时,采用简单加密。

ENCRYPT WITH:指定加密算法。当不指定 ENCRYPT WITH 子句时,使用 AES256_CFB 加密算法。

注意

加密算法包括:DES_ECB、DES_CBC、DES_CFB、DES_OFB、DESEDE_ECB、DESEDE_CBC、DESEDE_CFB、DESEDE_OFB、AES128_ECB、AES128_CBC、AES128_CFB 、AES128_OFB、AES192_ECB、AES192_CBC、AES192_CFB 、AES192_OFB、AES256_ECB、AES256_CBC、AES256_CFB 、AES256_OFB 、RC4
对于增量备份加密,如果基备份存在加密,则增量备份使用的加密密码、加密类型和加密算法必须与基备份保持一致;如果基备份未进行加密处理,则对增量备份使用的加密密码、加密类型和加密算法没有特殊要求。

COMPRESSED:是否对备份数据进行压缩处理。LEVEL 表示压缩等级,取值范围 0~9:0 表示不压缩;1 表示 1 级压缩;9 表示 9 级压缩。压缩级别越高,压缩速度越慢,但压缩比越高。若指定 COMPRESSED,但未指定 LEVEL,则压缩等级默认 1;若未指定 COMPRESSED,则默认不进行压缩处理。

WITHOUT LOG:联机数据库备份是否备份日志。如果使用,则表示不备份,否则表示备份。如果使用了 WITHOUT LOG 参数,则使用 DMRMAN 工具还原时,必须指定 WITH ARCHIVEDIR 参数。

TRACE FILE:指定生成的 TRACE 文件。启用 TRACE,但不指定 TRACE FILE 时,默认在 DM 数据库系统的 log 目录下生成 DM_SBTTRACE_年月.log 文件;若使用相对路径,则生成在执行码同级目录下;若用户指定 TRACE FILE,则指定的文件不能为已经存在的文件,否则报错。TRACE FILE 不可以为 ASM 文件。

TRACE LEVEL:是否启用 TRACE。有效值 1、2,默认为 1 表示不启用 TRACE,此时若指定了 TRACE FILE,会生成 TRACE 文件,但不写入 TRACE 信息;为 2 启用 TRACE 并在 TRACE 文件中写入 TRACE 相关内容。

TASK THREAD:备份过程中数据处理过程线程的个数,取值范围 0~64,默认为 4。若指定为 0,则调整为 1;若指定超过当前系统主机核数,则调整为主机核数。线程数(TASK THREAD)*并行数(PARALLEL)不得超过 512。

PARALLEL:指定并行备份的并行数和拆分块大小。并行数取值范围 0~128。若不指定并行数,则默认为 4,若指定为 0 或者 1 均认为非并行备份。若未指定关键字 PARALLEL,则认为非并行备份。并行备份不支持存在介质为 TAPE 的备份。线程数(TASK THREAD)*并行数(PARALLEL)不得超过 512。READ SIZE 指定并行备份大数据量的数据文件时的拆分块大小,默认为 1GB,最小为 512MB,当指定的拆分块大小小于 512MB 时,系统会自动调整为 512MB。若指定并行备份,但未指定拆分块大小,则直接使用默认拆分块大小进行拆分。当数据文件的大小小于拆分块大小时,不执行拆分;当数据文件的大小大于拆分块大小时,执行拆分。并行数不能大于拆分之后的总块数。

图例:

图例 01

图例 02

increment_statement:

图例 03

identified_statement:

图例 04

使用说明:

  1. 备份成功后会在<备份集路径>或者默认备份目录下生成备份集。备份集中包括一个备份元数据文件,后缀.meta,以及一个或多个备份片文件,后缀.bak。
  2. 当备份数据超过限制大小时,会生成新的备份文件,新的备份文件名是初始文件名后加文件编号。
  3. 系统处于归档模式下时,才允许进行数据库联机备份。若备份库为 DSC 集群实例,且未指定 WITHOUT LOG,则需要配置远程归档。
  4. MOUNT 状态下,不允许进行数据库备份。
  5. DDL_CLONE 库备份集不能作为增量备份的基备份,仅能用于库级还原。
  6. 在执行联机数据库备份过程中,如果报错归档不完整,则需要先执行生成检查点操作,才能正常备份。例如:select checkpoint(50);
3.2.2.1.2 设置备份选项

DIsql 中备份语句如果仅指定了必选参数如“BACKUP DATABASE BACKUPSET 'db_bak_01';”,那么会默认地指定备份介质类型、备份路径、备份片大小及备份联机日志等。用户备份时也可以指定这些参数来修改默认值,本节将介绍以下几种常用的备份选项:

  • 设置联机数据库备份集路径
  • 设置备份名
  • 增量备份指定基备份集路径
  • 指定介质类型
  • 添加备份描述
  • 限制备份片大小
  • 加密备份
  • 备份压缩

设置联机数据库备份集路径

备份语句中的 BACKUPSET 参数用于指定备份集的输出路径,例 3.1 备份数据库到指定的路径“/home/dm_bak/db_bak_3_01”。

例 3.1 指定备份集路径为“/home/dm_bak/db_bak_3_01”。

SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_01';

BACKUPSET 为可选参数。如果该参数仅指定备份集名称即指定为相对路径,备份集会生成到默认的备份路径下。如果仅指定该关键字,不指定目标备份集目录,那么将会在默认备份路径下自动生成备份集。

设置备份名

系统为每个备份指定一个备份名,它可作为识别备份的一种方式。备份时用户可以采用系统生成的备份名也可以指定属于自己的备份名。

备份名可以有效地表示备份的目的或者不同类型备份的用途。比如对于一个用于还原的数据库完全备份可设置备份名为“db_full_for_restore”。

如果不显式地指定备份名,系统会默认为备份创建一个备份名。备份名的格式为:DB_库名_备份类型_备份时间,DB 表示备份为数据库备份,备份类型表示该备份为完全备份还是增量备份,数据库名为当前连接数据库的名称,备份时间为开始执行备份的系统时间。

若一次备份产生多个备份片,那么每个备份片的备份名是相同的。

指定的备份名不能与默认备份目录中已有的备份名相同,但可以与非默认备份目录中已有的备份名相同。备份目录指备份集名称的上一层目录,如例 3.1 中的备份目录为“/home/dm_bak”。

备份名最大长度为 128 个字节,如果超长会报语法分析出错。备份名的设置不可以使用特殊的格式,如 %NAME。

例 3.2 创建备份集,备份名设置为“WEEKLY_FULL_BAK”。

SQL>BACKUP DATABASE TO WEEKLY_FULL_BAK BACKUPSET '/home/dm_bak/db_bak_3_02';

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

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

下面以增量备份用户 MAIN 表空间为例,指定 BASE ON BACKUPSET 参数执行增量备份:

SQL>BACKUP TABLESPACE MAIN BACKUPSET 'ts_full_bak_01';

SQL>BACKUP TABLESPACE MAIN INCREMENT BACKUPSET 'ts_increment_bak_01';

SQL>BACKUP TABLESPACE MAIN INCREMENT BASE ON BACKUPSET'ts_full_bak_01'
BACKUPSET 'ts_increment_bak_02';

上述示例中,增量备份 ts_increment_bak_02 若不指定备份集 ts_full_bak_01 作为基备份,那么默认会使用最近一次的备份集 ts_increment_bak_01 作为基备份。

指定介质类型

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

如果备份、还原时指定 DEVICE TYPE 为 TAPE,且使用第三方提供的 dmsbtex.dll(dmsbtex.so)来完成备份文件的存取功能,则 DEVICE TYPE 指定 TAPE 时还会提供 PARMS 关键字,用于传递第三方可识别的自定义字符串。使用第三方提供的动态库时,用户层应用不受影响。默认 DEVICE TYPE 为 DISK,使用达梦自带 SBT 磁盘存储。

添加备份描述

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

例 3.4 创建备份为备份集添加描述信息为“完全备份”。

SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_04' BACKUPINFO '完全备份';

用户如果不指定该参数,备份集对应的描述信息属性则为空。

限制备份片大小

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

MAXPIECESIZE 指定了单个备份片文件大小的上限,单位为 M,最小为 32M,32 位系统最大可设置为 2G,64 位系统最大可设置为 128G。如果不设置该参数则 32 位系统默认为 2G,64 位系统默认为 4G。例如,要限制备份片大小不超过 300M,可指定 MAXPIECESIZE 300,备份时会限定所有的备份片大小不超过 300M。

限制备份片大小主要用于解决文件系统或介质管理器对文件最大值的限制小于备份片默认值的情况,当备份片较大时会导致无法存储。

例 3.5 创建备份限制备份片大小为 300M。

SQL> BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_05' MAXPIECESIZE 300;

备份压缩

所有的备份语句都可以设置压缩选项,指定 COMPRESSED 参数后备份集会先被压缩然后再写到磁盘或磁带。压缩选项有不同的压缩级别可以选择,取值范围为 0~9。0 表示不压缩,1 表示 1 级压缩,9 表示 9 级压缩。压缩级别越高,压缩越慢,但压缩比越高。若仅指定 COMPRESSED,则压缩级别为 1。实际应用中用户可根据存储空间、数据文件大小、备份效率等确定合适的压缩级别。

例 3.6 执行备份压缩,压缩级别设置为 5。

SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_06' COMPRESSED LEVEL 5;

并行备份

DM 支持对库级和表空间级的并行备份,待备份数据文件很大时使用并行备份可以显著提高备份效率。用户可通过关键字 PARALLEL 指定是否执行并行备份,以及执行并行备份的并行数。执行备份时实际使用的并行数由用户指定的并行数和实际可使用的最大并行数决定,而实际可使用的最大并行数由数据文件的个数决定。

例 3.7 创建并行备份,指定并行数为 8。

SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_07' PARALLEL 8;
3.2.2.1.3 备份数据库

完全备份和增量备份是数据库备份的最常用策略,本节将详细介绍这两种类型备份。

完全备份

执行数据库备份,数据库必须处于 OPEN 状态,MOUNT 和 SUSPEND 状态下不允许执行数据库备份。

数据库完全备份中包含了指定库的全部有效数据页,为了保证数据安全应该对数据库定期执行完全备份。多久执行一次完全备份才合适,一般规则是数据库经过频繁修改后最好执行一次完全备份。

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

  1. 配置归档;
  2. 保证数据库处于 OPEN 状态;
  3. DIsql 中输入备份数据库语句,最简单的不设置其他参数的完全备份语句如下:
SQL>BACKUP DATABASE FULL BACKUPSET '/home/dm_bak/db_full_bak_01';

备份语句中的参数 FULL 可以省略,不指定备份类型会默认指定备份类型为完全备份。

增量备份

增量备份指基于指定的库(或者表空间)的某个备份(完全备份或者增量备份),备份自该备份以来所有发生修改的数据页。执行增量备份的主要目的是快速备份数据库中的修改,减少备份时间和避免重复的备份。

备份策略要根据可接受的最小恢复时间进行制定。例如,每周执行一次完全备份,每天执行一次增量备份,那么恢复时要重做的归档就不会超过一天。

增量备份数据库步骤如下:

  1. 配置归档;
  2. 保证数据库处于 OPEN 状态;
  3. DIsql 中输入备份数据库语句,最简单的不设置其他参数的增量备份语句如下:
SQL>BACKUP DATABASE INCREMENT WITH BACKUPDIR '/home/dm_bak' BACKUPSET '/home/dm_bak/db_increment_bak_02';

备份语句中的 INCREMENT 参数不可省略,该参数用来指定执行的备份类型为增量备份。若要创建累积增量备份,还需要指定 CUMULATIVE 参数,否则缺省为差异增量备份。WITH BACKUPDIR 参数用来指定基备份集的搜索目录,如果基备份集不在默认备份目录或当前备份目录则该参数不可省略。

3.2.2.1.4 DSC 环境使用说明

DSC 环境下库备份情况与单机环境下类似,连接到 DSC 集群中的任意活动节点即可完成库备份操作。当 DSC 集群中存在故障节点时,库备份存在额外的限制:

1.保证故障节点的 [CKPT_LSN,FILE_LSN] 之间日志修改的数据页已写入磁盘。只有所有活动节点的 CKPT_LSN 大于等于故障节点的 FILE_LSN 才允许备份操作。

2.主库备份时,只有所有活动节点 CKPT_LSN 推进到 MAX[APPLY_LSN] 之后,才允许备份操作。

3.备库备份时,需要触发检查点将所有活动节点 CKPT_LSN 推进到 MAX[APPLY_LSN] 之后,才能启动备份操作。

根据以上限制,DSC 集群联机备份时,如果活动节点 CKPT_LSN 小于故障节点 FILE_LSN,则强制推进检查点然后执行备份。对于故障节点,直接取其 FILE_LSN 及对应 PKG_SEQNO 作为 BEGIN_LSN 和 BEGIN_SEQ。该种策略下,由于故障节点所有修改数据页已经写入磁盘,无论活动节点推进到什么值,故障节点总是不需要备份该节点日志。

3.2.2.2 表空间备份

本节描述了如何使用 DIsql 完成最基本的表空间备份及实施一些备份策略,如限制备份集大小、加密备份等。主要内容包括:

  • 概述
  • 设置备份选项
  • 备份表空间
3.2.2.2.1 概述

在 DIsql 工具中使用 BACKUP 语句也可以备份单个表空间。同备份数据库一样,执行表空间备份数据库实例也必须运行在归档模式下,启动 DIsql 输入以下语句即可备份表空间:

SQL>BACKUP TABLESPACE MAIN BACKUPSET 'ts_bak_01';

备份集“ts_bak_01”会生成到默认的备份路径下。如要设置其他备份选项需参考下文的联机备份表空间语法。

语法如下:

BACKUP TABLESPACE <表空间名> [FULL | INCREMENT [CUMULATIVE][WITH BACKUPDIR '<基备份搜索目录>'{,'<基备份搜索目录>'}]| [BASE ON BACKUPSET '<基备份集目录>']][TO <备份名>] [BACKUPSET '<备份集路径>'] 

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

[BACKUPINFO '<备份描述>'] [MAXPIECESIZE <备份片限制大小>] 

[IDENTIFIED BY <密码>|"<密码>" [WITH ENCRYPTION<TYPE>][ENCRYPT WITH <加密算法>]] [COMPRESSED [LEVEL <压缩级别>]] 

[TRACE FILE '<TRACE文件名>'] [TRACE LEVEL <TRACE日志级别>] 

[TASK THREAD <线程数>][PARALLEL [<并行数>][READ SIZE <拆分块大小>] ];

表空间名:指定备份的表空间名称(除了 temp 表空间)。

FULL|INCREMENT:备份类型,FULL 表示完全备份,INCREMENT 表示增量备份。若不指定,默认为完全备份。

CUMULATIVE:用于增量备份中,指明为累积增量备份类型,若不指定则缺省为差异增量备份类型。

WITH BACKUPDIR:用于增量备份中,指定备份目录,最大长度为 256 个字节。若不指定,自动在默认备份目录和当前备份目录下搜索基备份。如果基备份不在默认的备份目录或当前备份目录下,增量备份必须指定该参数。

BASE ON BACKUPSET:用于增量备份中,指定基备份集路径。

注意

增量备份时,DM不会在默认备份目录或当前备份目录的子目录中搜索基备份集,因此若基备份集在默认备份目录或当前备份目录的子目录中,则需要指定基备份的搜索目录或直接指定基备份集路径,否则将无法搜索到相应的基备份集,备份操作将会失败。

TO:指定生成备份名称。若未指定,系统随机生成,默认备份名格式为:DB_备份类型_表空间名_备份时间。其中,备份时间为开始备份的系统时间。

BACKUPSET:指定当前备份集生成路径。若指定为相对路径,则在默认备份路径中生成备份集。若不指定,则在默认备份路径下以约定规则生成默认的表空间备份集目录。表空间级备份默认备份集目录名生成规则:TS_表空间名_备份类型_时间,如 TS_MAIN_INCREMENT_20180518_143057_123456。表明该备份集为 2018 年 5 月 18 日 14 时 30 分 57 秒 123456 毫秒时生成的表空间名为 MAIN 的表空间增量备份集。若表空间名称超长使备份集目录完整名称长度大于 128 个字节将直接报错路径过长。

DEVICE TYPE:指存储备份集的介质类型,支持 DISK 和 TAPE,默认 DISK。

PARMS:只对介质类型为 TAPE 时有效。

BACKUPINFO:备份的描述信息。最大不超过 256 个字节。

MAXPIECESIZE:最大备份片文件大小上限,以 M 为单位,最小 32M,32 位系统最大 2G,64 位系统最大 128G。

IDENTIFIED BY:指定备份时的加密密码。密码可以用双引号括起来,这样可以避免一些特殊字符通不过语法检测。密码的设置规则遵行 ini 参数 pwd_policy 指定的口令策略。

WITH ENCRYPTION:指定加密类型,0 表示不加密,不对备份文件进行加密处理;1 表示简单加密,对备份文件设置口令,但文件内容仍以明文方式存储;2 表示完全数据加密,对备份文件进行完全的加密,备份文件以密文方式存储。当不指定 WITH ENCRYPTION 子句时,采用简单加密。

ENCRYPT WITH:指定加密算法。当不指定 ENCRYPT WITH 子句时,使用 AES256_CFB 加密算法。

注意

加密算法包括:DES_ECB、DES_CBC、DES_CFB、DES_OFB、DESEDE_ECB、DESEDE_CBC、DESEDE_CFB、DESEDE_OFB、AES128_ECB、AES128_CBC、AES128_CFB 、AES128_OFB、AES192_ECB、AES192_CBC、AES192_CFB 、AES192_OFB、AES256_ECB、AES256_CBC、AES256_CFB 、AES256_OFB 、RC4

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

COMPRESSED:是否对备份数据进行压缩处理。LEVEL 表示压缩等级,取值范围 0~9:0 表示不压缩;1 表示 1 级压缩;9 表示 9 级压缩。压缩级别越高,压缩速度越慢,但压缩比越高。若指定 COMPRESSED,但未指定 LEVEL,则压缩等级默认 1;若未指定 COMPRESSED,则默认不进行压缩处理。

TRACE FILE:指定生成的 TRACE 文件。启用 TRACE,但不指定 TRACE FILE 时,默认在 DM 数据库系统的 log 目录下生成 DM_SBTTRACE_年月.log 文件;若使用相对路径,则生成在执行码同级目录下;若用户指定 TRACE FILE,则指定的文件不能为已经存在的文件,否则报错。TRACE FILE 不可以为 ASM 文件。

TRACE LEVEL:是否启用 TRACE。有效值 1、2,默认为 1 表示不启用 TRACE,此时若指定了 TRACE FILE,会生成 TRACE 文件,但不写入 TRACE 信息;为 2 启用 TRACE 并在 TRACE 文件中写入 TRACE 相关内容。

TASK THREAD:备份过程中数据处理过程线程的个数,取值范围 0~64,默认为 4。若指定为 0,则调整为 1;若指定超过当前系统主机核数,则调整为主机核数。线程数(TASK THREAD)*并行数(PARALLEL)不得超过 512。

PARALLEL:指定并行备份的并行数和拆分块大小。

图例:

图例 01

图例 02

使用说明:

  1. 当备份数据超过限制大小时,会生成新的备份文件,新的备份文件名是初始文件名后加文件编号。
  2. 系统处于归档模式下时,才允许进行表空间备份。
  3. MOUNT 状态下,不允许进行表空间备份。
  4. MPP 环境不允许进行表空间备份。
3.2.2.2.2 设置备份选项

表空间备份也可指定备份集路径、介质类型、备份名等备份选项。本节主要介绍 BASE ON BACKUPSET 参数的使用。

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

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

下面以增量备份用户 MAIN 表空间为例,指定 BASE ON BACKUPSET 参数执行增量备份:

SQL>BACKUP TABLESPACE MAIN BACKUPSET 'ts_full_bak_01';

SQL>BACKUP TABLESPACE MAIN INCREMENT BACKUPSET 'ts_increment_bak_01';

SQL>BACKUP TABLESPACE MAIN INCREMENT BASE ON BACKUPSET'ts_full_bak_01'
BACKUPSET 'ts_increment_bak_02';

上述示例中,增量备份 ts_increment_bak_02 若不指定备份集 ts_full_bak_01 作为基备份,那么默认会使用最近一次的备份集 ts_increment_bak_01 作为基备份。

3.2.2.2.3 备份表空间

同数据库备份一样,表空间备份也可分为完全备份和增量备份。本节主要内容包括:

  • 完全备份
  • 增量备份

完全备份

执行表空间备份,表空间必须处于 OPEN 状态,MOUNT 和 SUSPEND 状态下不允许执行表空间备份。表空间备份就是拷贝表空间内所有数据文件中的有效数据的过程。DM 仅支持表空间联机备份,完全备份一个表空间步骤如下:

  1. 配置归档;
  2. 保证数据库处于 OPEN 状态;
  3. DIsql 中输入备份表空间语句,最简单的不设置其他参数的完全备份表空间语句,如下所示:
SQL>BACKUP TABLESPACE MAIN FULL BACKUPSET '/home/dm_bak/ts_full_bak_01';

备份语句中的 FULL 参数可以省略,不指定备份类型会默认指定备份类型为完全备份。

增量备份

执行表空间增量备份的主要目的同数据库增量备份一样是为了快速备份数据库中的修改,减少备份时间和避免重复的备份。

增量备份表空间步骤如下:

  1. 配置归档;
  2. 保证数据库处于 OPEN 状态;
  3. DIsql 中输入备份表空间语句,最简单的不设置其他参数的增量备份语句如下:
SQL>BACKUP TABLESPACE MAIN INCREMENT WITH BACKUPDIR '/home/dm_bak'BACKUPSET
'/home/dm_bak/ts_increment_bak_02';

备份语句中指定的 INCREMENT 参数表示执行的备份类型为增量备份,不可省略。若要创建累积增量备份,还需要指定 CUMULATIVE 参数,否则缺省为差异增量备份。WITH BACKUPDIR 参数用来指定基备份集的搜索目录,如果基备份集不在默认备份目录或当前备份目录则该参数不可省略。

3.2.2.3 表备份

本节主要介绍使用 DIsql 完成表备份及实施一些备份策略,如限制备份集大小、加密备份等。主要内容包括:

  • 概述
  • 设置备份选项
  • 备份表
3.2.2.3.1 概述

与备份数据库与表空间不同,备份表不需要服务器配置归档,DIsql 中输入以下即可备份用户表:

SQL>BACKUP TABLE TAB_01 BACKUPSET 'tab_bak_01';

备份集“tab_bak_01”会生成到默认的备份路径下。如要设置其他备份选项需参考下文的备份表语法。

语法如下:

BACKUP TABLE <表名>  

[TO <备份名>] [BACKUPSET '<备份集路径>'] [DEVICE TYPE <介质类型> [PARMS '<介质参数>']] 

[BACKUPINFO '<备份描述>'] 

[MAXPIECESIZE <备份片限制大小>] 

[IDENTIFIED BY <密码>|"<密码>" [WITH ENCRYPTION <TYPE>][ENCRYPT WITH <加密算法>]] 

[COMPRESSED [LEVEL <压缩级别>]] 

[TRACE FILE '<TRACE文件名>'] [TRACE LEVEL <TRACE日志级别>];

TABLE:指定备份的表,只能备份用户表。

TO:指定生成备份名称。若未指定,系统随机生成,默认备份名格式为:DB_备份类型_表名_备份时间。其中,备份时间为开始备份的系统时间。

BACKUPSET:指定当前备份集生成路径。若指定为相对路径,则在默认备份路径中生成备份集。若不指定具体备份集路径,则在默认备份路径下以约定规则生成默认的表备份集目录。表备份默认备份集目录名生成规则:TAB_表名_BTREE_时间,如 TAB_T1_BTREE_20180518_143057_123456。表明该备份集为 2018 年 5 月 18 日 14 时 30 分 57 秒 123456 毫秒时生成的表名为 T1 的表备份集。若表名超长使备份集目录完整名称长度大于 128 个字节将直接报错路径过长。

DEVICE TYPE:指存储备份集的介质类型,表备份暂时只支持 DISK。

PARMS:只对介质类型为 TAPE 时有效。

BACKUPINFO:备份的描述信息。最大不超过 256 个字节。

MAXPIECESIZE:最大备份片文件大小上限,以 M 为单位,最小 32M,32 位系统最大 2G,64 位系统最大 128G。

IDENTIFIED BY:指定备份时的加密密码。密码可以用双引号括起来,这样可以避免一些特殊字符通不过语法检测。密码的设置规则遵行 ini 参数 pwd_policy 指定的口令策略。

WITH ENCRYPTION:指定加密类型,0 表示不加密,不对备份文件进行加密处理;1 表示简单加密,对备份文件设置口令,但文件内容仍以明文方式存储;2 表示完全数据加密,对备份文件进行完全的加密,备份文件以密文方式存储。当不指定 WITH ENCRYPTION 子句时,采用简单加密。

ENCRYPT WITH:指定加密算法。当不指定 ENCRYPT WITH 子句时,使用 AES256_CFB 加密算法。

注意

加密算法包括:DES_ECB、DES_CBC、DES_CFB、DES_OFB、DESEDE_ECB、DESEDE_CBC、DESEDE_CFB、DESEDE_OFB、AES128_ECB、AES128_CBC、AES128_CFB 、AES128_OFB、AES192_ECB、AES192_CBC、AES192_CFB 、AES192_OFB、AES256_ECB、AES256_CBC、AES256_CFB 、AES256_OFB 、RC4

COMPRESSED:是否对备份数据进行压缩处理。LEVEL 表示压缩等级,取值范围 0~9:0 表示不压缩;1 表示 1 级压缩;9 表示 9 级压缩。压缩级别越高,压缩速度越慢,但压缩比越高。若指定 COMPRESSED,但未指定 LEVEL,则压缩等级默认 1;若未指定 COMPRESSED,则默认不进行压缩处理。

TRACE FILE:指定生成的 TRACE 文件。启用 TRACE,但不指定 TRACE FILE 时,默认在 DM 数据库系统的 log 目录下生成 DM_SBTTRACE_年月.LOG 文件;若使用相对路径,则生成在执行码同级目录下;若用户指定 TRACE FILE,则指定的文件不能为已经存在的文件,否则报错。TRACE FILE 不可以为 ASM 文件。

TRACE LEVEL:是否启用 TRACE。有效值 1、2,默认为 1 表示不启用 TRACE,此时若指定了 TRACE FILE,会生成 TRACE 文件,但不写入 TRACE 信息;为 2 启用 TRACE 并在 TRACE 文件中写入 TRACE 相关内容。

图例:

图例 02

使用说明:

  1. 仅支持对用户的非分区的行存储表和堆表进行备份,不支持对分区表的备份。在非分区表中,也不支持对临时表、物化视图表、物化视图附属表、日志表和特定模式(DBG_PKG/INFORMATION_SCHEMA/INFO_SCHEM/SYSREP/SYSGEO/SYSJOB/SYSCPT/SYS)下的表进行表备份。
  2. 表的列类型为对象类型的表不支持表备份。
  3. 表备份不备份表上的注释以及 default 表达式中的函数定义,因此还原时需用户自行确认。
  4. 不支持在加密库上进行表备份与还原。
  5. 当备份数据超过限制大小时,会生成新的备份文件,新的备份文件名是初始文件名后加文件编号。
  6. 表备份时,其所属表空间必须处于联机状态。
  7. 目前表备份不支持备份到 TAPE 介质上。
3.2.2.3.2 设置备份选项

表备份常用的备份选项有设置备份名、设置备份集路径、指定介质参数、添加备份描述等,设置方式同数据库备份相同。

3.2.2.3.3 备份表

表备份拷贝指定表所使用的所有数据页到备份集中,并记录各个数据页之间的逻辑关系用来恢复表数据结构。表备份均为联机完全备份,不需要备份归档日志,不存在增量备份之说。当数据库中某张表比较重要而又没必要备份整个数据库或表空间时就可以选择表备份。

完整的备份表步骤如下:

  1. 保证数据库处于 OPEN 状态;
  2. 创建待备份的表 TAB_01:
SQL>CREATE TABLE TAB_01(C1 INT);
  1. DIsql 中输入备份表语句,简单的备份语句如下:
SQL>BACKUP TABLE TAB_01 BACKUPSET '/home/dm_bak/tab_bak_01';

3.2.2.4 归档备份

本节主要介绍使用 DIsql 完成归档备份及实施一些备份策略,如限制备份集大小、加密备份等。主要内容包括:

  • 概述
  • 设置备份选项
  • 备份归档
3.2.2.4.1 概述

在 DIsql 工具中使用 BACKUP 语句可以备份归档日志。归档备份的前提:一,归档文件的 db_magic、permanent_magic 值和库的 db_magic、permanent_magic 值必须一样;二,服务器必须配置归档;三,归档日志必须连续,如果出现不连续的情况,前面的连续部分会忽略,仅备份最新的连续部分。如果未收集到指定范围内的归档,则不会备份。联机备份的时候经常会切换归档文件,最后一个归档总是空的,所以最后一个归档不会被备份。

DIsql 中输入以下即可备份归档:

SQL>BACKUP ARCHIVE LOG ALL BACKUPSET 'arch_bak_01';

备份集“arch_bak_01”会生成到默认的备份路径下。如要设置其他备份选项需参考下文的归档备份语法。

语法如下:

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>']

ALL:备份所有的归档。若不指定,则默认为 ALL。

FROM LSN:指定备份的起始 lsn。

UNTIL LSN:指定备份的截止 lsn。

注意

归档日志的有效LSN范围(起始lsn,截止lsn)可以通过V$ARCH_FILE查看,或者通过dmclvt工具分析日志的结果查看。

如果用户无法确定准确的 lsn,也可以指定一个模糊的 lsn 值,取值范围(1~9223372036854775807)。只要指定的 FROM LSN、UNTIL LSN 与有效 LSN 范围有重叠部分,就会备份包含重叠部分的完整日志文件。

FROM TIME:指定备份的开始的时间点。

UNTIL TIME:指定备份的截止的时间点。

BETWEEN ... AND ...:指定备份的区间。指定区间后,只会备份指定区间内的归档文件。

\<notBackedUpSpec\>:搜索过滤。搜索过滤仅限于根据备份指定条件能找到的所有归档备份集。1)num TIMES,num 取值范围为 0~2147483647,指若归档文件已经备份了 num 次,则不再备份;否则备份。如 num=3,则认为已经备份了 3 次的归档文件就不再备份。若 num=0,则认为所有归档文件都不需要备份。2)SINCE TIME 'datetime_string',对指定时间 datetime_string 开始没有备份的归档文件进行备份。3)若以上两个参数均未指定,则备份所有未备份过的归档日志文件。

DELETE INPUT:用于指定备份完成之后,是否删除归档操作。

TO:指定生成备份名称。若未指定,系统随机生成,默认备份名格式为:ARCH_备份时间。其中,备份时间为开始备份的系统时间。

BACKUPSET:指定当前备份集生成路径,若指定为相对路径,则在默认备份路径中生成备份集。若不指定具体备份集路径,则在默认备份路径下,以约定归档备份集命名规则生成默认的归档备份集目录。归档备份默认备份集目录名生成规则:ARCH_LOG_时间,如 ARCH_LOG_20180518_143057_123456。表明该备份集为 2018 年 5 月 18 日 14 时 30 分 57 秒 123456 毫秒时生成的归档备份集。

DEVICE TYPE:指存储备份集的介质类型,支持 DISK 和 TAPE,默认 DISK。

PARMS:只对介质类型为 TAPE 时有效。

BACKUPINFO:备份的描述信息。最大不超过 256 个字节。

MAXPIECESIZE:最大备份片文件大小上限,以 M 为单位,最小 32M,32 位系统最大 2G,64 位系统最大 128G。

IDENTIFIED BY:指定备份时的加密密码。密码可以使用双引号括起来,这样可以避免一些特殊字符通不过语法检测。密码的设置规则遵行 ini 参数 pwd_policy 指定的口令策略。

WITH ENCRYPTION:指定加密类型,0 表示不加密,不对备份文件进行加密处理;1 表示简单加密,对备份文件设置口令,但文件内容仍以明文方式存储;2 表示完全数据加密,对备份文件进行完全的加密,备份文件以密文方式存储。当不指定 WITH ENCRYPTION 子句时,采用简单加密。

ENCRYPT WITH:指定加密算法。当不指定 ENCRYPT WITH 子句时,使用 AES256_CFB 加密算法。

注意

加密算法包括:DES_ECB、DES_CBC、DES_CFB、DES_OFB、DESEDE_ECB、DESEDE_CBC、DESEDE_CFB、DESEDE_OFB、AES128_ECB、AES128_CBC、AES128_CFB 、AES128_OFB、AES192_ECB、AES192_CBC、AES192_CFB 、AES192_OFB、AES256_ECB、AES256_CBC、AES256_CFB 、AES256_OFB 、RC4

COMPRESSED:是否对备份数据进行压缩处理。LEVEL 表示压缩等级,取值范围 0~9:0 表示不压缩;1 表示 1 级压缩;9 表示 9 级压缩。压缩级别越高,压缩速度越慢,但压缩比越高。若指定 COMPRESSED,但未指定 LEVEL,则压缩等级默认 1;若未指定 COMPRESSED,则默认不进行压缩处理。

WITHOUT LOG:只是语法支持,不起任何作用。

TRACE FILE:指定生成的 TRACE 文件。启用 TRACE,但不指定 TRACE FILE 时,默认在 DM 数据库系统的 log 目录下生成 DM_SBTTRACE_年月.LOG 文件;若使用相对路径,则生成在执行码同级目录下;若用户指定 TRACE FILE,则指定的文件不能为已经存在的文件,否则报错。TRACE FILE 不可以为 ASM 文件。

TRACE LEVEL:是否启用 TRACE。有效值 1、2,默认为 1 表示不启用 TRACE,此时若指定了 TRACE FILE,会生成 TRACE 文件,但不写入 TRACE 信息;为 2 启用 TRACE 并在 TRACE 文件中写入 TRACE 相关内容。

TASK THREAD:备份过程中数据处理过程线程的个数,取值范围 0~64,默认为 4。若指定为 0,则调整为 1;若指定超过当前系统主机核数,则调整为当前主机核数。线程数(TASK THREAD)*并行数(PARALLEL)不得超过 512。

PARALLEL:指定并行备份的并行数和拆分块大小。

图例:

图例 01

<备份集子句>:

图例 01

图例 01

notBackedUpSpec:

图例 01

3.2.2.4.2 设置备份选项

归档备份常用的备份选项有设置备份名、设置备份集路径、指定介质参数、添加备份描述等,设置方式与数据库备份相同。

3.2.2.4.3 备份归档

归档备份拷贝指定归档目录下的所有的归档文件到备份集中,并记录各个归档文件的属性、文件大小以及 LSN 区间等。归档备份不存在增量备份之说。当需要保存库的归档时,可以使用归档备份。

完整的备份归档步骤如下:

  1. 配置归档;
  2. 保证数据库处于 OPEN 或者 MOUNT 状态;
  3. DIsql 中输入备份数据库语句。

例如,备份归档日志,通过 LSN BETWEEN ... AND ...来指定起始和截至 LSN。

首先,确定 LSN 范围。

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

查询结果为:

ARCH_LSN CLSN PATH

38758 40301 d:\arch\ARCHIVE_LOCAL1_20180727105417748.log

40302 40303 d:\arch\ARCHIVE_LOCAL1_20180727111411079.log

40304 40305 d:\arch\ARCHIVE_LOCAL1_20180727111513679.log

……

50412 50413 d:\arch\ARCHIVE_LOCAL1_20180727171801098.log

50414 50478 d:\arch\ARCHIVE_LOCAL1_20180727171849712.log

……

通过查询结果选出备份的起始LSN和截至LSN。比如50414 50478

其次,备份归档。

SQL>BACKUP ARCHIVELOG LSN BETWEEN 50414 AND 50478 BACKUPSET '/home/dm_bak/arch_bak_time_14-78';

3.2.3 数据备份高级主题

本节介绍高级的联机备份过程,主要内容包括:

  • 加密备份
  • 设置跟踪日志文件

DM 的数据库、表空间、表备份和归档备份均支持创建加密备份和备份时设置跟踪日志文件,本节仅以数据库备份为例说明这两种类型备份的创建。

加密备份

DM 提供加密备份的方式保护用户的备份集,没有权限的用户无法访问加密的备份集。

备份语句中通过指定 IDENTIFIED BY...WITH ENCRYPTION...ENCRYPT WITH...执行加密备份。其中,IDENTIFIED BY 子句指定加密密码,密码长度为 9 到 48 个字节,若密码长度不符合要求会报错;WITH ENCRYPTION 子句指定加密类型,加密类型分为简单加密和复杂加密,简单加密是对备份文件设置口令,但文件内容仍以明文存储,复杂加密则对备份文件进行完全的加密,备份文件以密文方式存储,用户可根据备份数据的重要程度选择加密类型;ENCRYPT WITH 子句指定加密算法,默认使用的加密算法为 AES256_CFB。

加密备份过程中 IDENTIFIED BY 子句必须指定,子句 WITH ENCRYPTION 和子句 ENCRYPT WITH 可不指定,此时 WITH ENCRYPTION 默认值为 1,ENCRYPT WITH 默认值为 AES256_CFB。例如,以下两种加密备份语句都是合法的:

SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_for_encrypt' IDENTIFIED BY "cdb546789";

SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_for_encrypt' IDENTIFIED BY "cdb546789" ENCRYPT WITH RC4;

若指定了加密密码,但加密类型 WITH ENCRYPTION 指定为 0,则为非加密备份,如下所示:

SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_for_encrypt' IDENTIFIED BY "cdb546789" WITH ENCRYPTION 0;

下面以数据库完全备份为例,创建加密密码为“cdb546789”,加密算法为“rc4”的复杂类型数据库加密备份,完整步骤如下:

  1. 配置归档;
  2. 保证数据库处于 OPEN 状态;
  3. 备份数据库,输入以下语句:
SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_for_encrypt_01' IDENTIFIED BY "cdb546789" WITH ENCRYPTION 2 ENCRYPT WITH RC4;

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

设置跟踪日志文件

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

与生成跟踪日志文件相关的参数有两个:TRACE FILE 和 TRACE LEVEL。 TRACE FILE 用于指定生成的跟踪日志文件路径,TRACE LEVEL 表示是否启用 TRACE。TRACE LEVEL 有效值包括 1 和 2。1 表示不启用 TRACE 功能,2 表示启用,系统默认值为 1。

指定参数 TRACE FILE 但 TRACE LEVEL 值设置为 1 即不启用 TRACE 功能,则会生成 TRACE 文件,但不会写入 TRACE 信息。如下所示:

SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_for_trace' TRACE

FILE'/home/dm_log/db_trace.log' TRACE LEVEL 1;

TRACE LEVEL 值设置为 2 即启用 TRACE 功能,但若 TRACE FILE 没有指定,则系统默认在执行码路径的 log 目录下生成 DM_SBTTRACE_年月.log 文件。如下所示:

SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_for_trace' TRACE LEVEL 2;

若 TRACE FILE 使用相对路径,日志文件生成在执行码同级目录下。

以数据库完全备份为例,为备份设置跟踪日志文件的操作步骤如下:

  1. 配置归档;
  2. 保证数据库处于 OPEN 状态;
  3. 备份数据库,输入以下语句:
SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_for_trac_01' TRACE

FILE'/home/dm_log/db_bak_trace.log' TRACE LEVEL 2;

如果指定的 TRACE 文件已存在,则报错。

3.2.4 管理备份

本章节主要介绍如何使用 DIsql 工具管理数据库备份、表空间备份、表备份,以及归档备份。本节内容主要包括:

  • 概述
  • 备份目录管理
  • 备份集校验与删除
  • 备份信息查看
  • 监控备份过程

3.2.4.1 概述

管理备份一个重要的目的是删除不再需要的备份,DM 没有提供自动删除过期备份的功能,删除备份需要手动执行。

备份管理相关系统过程与函数总结如下:

  • 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:显示当前备份任务待备份数据文件列表。
注意

SF_BAKSET_BACKUP_DIR_ADD添加备份目录仅对当前会话有效。调用删除备份等函数或查看动态视图时要先调用SF_BAKSET_BACKUP_DIR_ADD添加备份目录,否则仅搜索默认备份路径下的备份集。

各个函数和动态视图的使用,下文将进行详细介绍。

3.2.4.2 备份目录管理

这里的备份目录是指备份集搜索目录,这些目录被记录在内存中,当执行动态视图或批量删除备份集时,均会从这些指定目录中先搜索所有备份集信息。

本节主要内容包括:

  • SF_BAKSET_BACKUP_DIR_ADD
  • SF_BAKSET_BACKUP_DIR_REMOVE
  • SF_BAKSET_BACKUP_DIR_REMOVE_ALL
  • SF_BAKSET_BACKUP_DIR_ADD 函数

添加备份目录。若添加目录已经存在或者为库默认备份路径,则认为已经存在,不添加,但也不报错。

定义:

INT SF_BAKSET_BACKUP_DIR_ADD(

  device_type varchar,

  backup_dir varchar(256)

)

参数说明:

device_type:待添加的备份目录对应存储介质类型,DISK 或者 TAPE。目前,无论指定介质类型为 DISK 或者 TAPE,都会同时搜索两种类型的备份集。

backup_dir:待添加的备份目录。

返回值:

1:目录添加成功;其它情况下报错。

举例说明:

SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK','/home/dm_bak');

执行结果

1
  • SF_BAKSET_BACKUP_DIR_REMOVE 函数

删除备份目录。若待删除目录为库默认备份路径,不进行删除,认为删除失败;若待删除目录存在于记录的合法目录中,则删除;若待删除目录不存在或者为空则跳过,正常返回。

定义:

INT SF_BAKSET_BACKUP_DIR_REMOVE (

  device_type varchar,

  backup_dir varchar(256)

)

参数说明:

device_type:待删除的备份目录对应存储介质类型,DISK 或者 TAPE。

backup_dir:待删除的备份目录。

返回值:

1:目录删除成功、目录不存在或者目录为空;0:目录为库默认备份路径;其他情况报错。

举例说明:

SQL>SELECT SF_BAKSET_BACKUP_DIR_REMOVE('DISK','/home/dm_bak');

执行结果

1
  • SF_BAKSET_BACKUP_DIR_REMOVE_ALL 函数

清理全部备份目录,默认备份目录除外。

定义:

INT SF_BAKSET_BACKUP_DIR_REMOVE_ALL ()

返回值:

1:目录全部清理成功;其它情况下报错。

举例说明:

SQL>SELECT SF_BAKSET_BACKUP_DIR_REMOVE_ALL();

执行结果

1

3.2.4.3 备份集校验与删除

本节介绍备份管理中最重要的功能,备份集校验和备份集删除。单个备份集删除时并行备份中的子备份集不允许单独删除;在给定备份集搜集目录中发现存在引用删除备份集作为基备份的需要执行级联删除,默认报错。批量删除备份集时,跳过收集到的单独的子备份集。主要内容如下:

  • 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
  • SF_BAKSET_CHECK 函数

对备份集进行校验。

定义:

INT SF_BAKSET_CHECK(

	device_type varchar,

	bakset_pathvarchar(256)

)

参数说明:

device_type:设备类型,DISK 或 TAPE。

bakset_path:待校验的备份集目录。

返回值:

1:备份集目录存在且合法;否则报错。

举例说明:

SQL>BACKUP DATABASE FULL BACKUPSET '/home/dm_bak/db_bak_for_check';

SQL>SELECT SF_BAKSET_CHECK('DISK','/home/dm_bak/db_bak_for_check');

执行结果

1
  • SF_BAKSET_REMOVE 函数

删除指定设备类型和指定备份集目录的备份集。一次只检查一个合法.meta 文件,然后删除对应备份集;若存在非法或非正常备份的.meta 文件,则报错或直接返回,不会接着检查下一个.meta 文件;若同一个备份集下还存在其它备份文件或备份集,则只删除备份文件,不会删除整个备份集。

定义:

INT SF_BAKSET_REMOVE (

	device_type varchar,

	backsetpath varchar(256),

	option integer

)

参数说明:

device_type:设备类型,DISK 或 TAPE。

backsetpath:待删除的备份集目录。

Option:删除备份集选项,0 单独删除,1 级联删除。可选参数,默认为 0。并行备份集中子备份集不允许单独删除。单独删除时,若目标备份集被其他备份集引用为基备份,则报错;级联删除时,递归将相关的增量备份也删除。

返回值:

1:备份集目录删除成功,其它情况下报错。

举例说明:

SQL>BACKUP DATABASE FULL BACKUPSET '/home/dm_bak/db_bak_for_remove';

SQL>BACKUP DATABASE INCREMENT BACKUPSET '/home/dm_bak/db_bak_for_remove_incr';

SQL>SELECT SF_BAKSET_REMOVE('DISK','/home/dm_bak/db_bak_for_remove');

执行结果

[-8202]:[/home/dm_bak/db_bak_for_remove_incr]的基备份,不能删除。
SQL>SELECT SF_BAKSET_REMOVE('DISK','/home/dm_bak/db_bak_for_remove',1);

执行结果

1
  • SF_BAKSET_REMOVE_BATCH 函数

批量删除满足指定条件的所有备份集。使用该方法前,需要先使用 SF_BAKSET_BACKUP_DIR_ADD 添加将要删除的备份集目录,否则只删除默认备份路径下的备份集。

定义:

INT SF_BAKSET_REMOVE_BATCH (

	device_type varchar,

	end_time datetime,

	range int,

	obj_name varchar(257)

)

参数说明:

device_type:设备类型,DISK 或 TAPE。若指定为 NULL,则忽略存储设备的区分。

end_time:删除备份集生成的结束时间,仅删除 end_time 之前的备份集,必须指定。

range:指定删除备份的级别。1 代表库级,2 代表表空间级,3 代表表级,4 代表归档备份。若指定为 NULL,则忽略备份集备份级别的区分。

obj_name:待删除备份集中备份对象的名称,仅表空间级和表级有效。若为表级备份删除,则需指定完整的表名(模式.表名),否则,将认为删除会话当前模式下的表备份。若指定为 NULL,则忽略备份集中备份对象名称区分。

返回值:

1:备份集目录删除成功,其它情况下报错。

举例说明:

SQL>BACKUP DATABASE FULL BACKUPSET '/home/dm_bak/db_bak_for_remove';

SQL>BACKUP TABLESPACEMAIN FULL BACKUPSET '/home/dm_bak/ts_bak_for_remove';

SQL>SELECT SF_BAKSET_REMOVE_BATCH ('DISK', now(), NULL, NULL);

执行结果

1
  • SP_DB_BAKSET_REMOVE_BATCH 过程

批量删除指定时间之前的数据库备份集。使用该方法前,需要先使用 SF_BAKSET_BACKUP_DIR_ADD 添加将要删除的备份集目录,否则只删除默认备份路径下的备份集。

定义:

SP_DB_BAKSET_REMOVE_BATCH (

	device_type varchar,

	end_time datetime

)

参数说明:

device_type:设备类型,DISK 或 TAPE。若指定为 NULL,则忽略存储设备的区分。

end_time:删除备份集生成的结束时间,仅删除 end_time 之前的备份集,必须指定。

举例说明:

SQL>BACKUP DATABASE FULL BACKUPSET '/home/dm_bak/db_bak_for_batch_del';

SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK','/home/dm_bak');

SQL>CALL SP_DB_BAKSET_REMOVE_BATCH('DISK', NOW());
  • SP_TS_BAKSET_REMOVE_BATCH 过程

批量删除指定表空间对象及指定时间之前的表空间备份集。使用该方法前,需要先使用 SF_BAKSET_BACKUP_DIR_ADD 添加将要删除的备份集目录,否则只删除默认备份路径下的备份集。

定义:

SP_TS_BAKSET_REMOVE_BATCH (

	device_type varchar,

	end_time datetime,

	ts_name varchar(128)

)

参数说明:

device_type:设备类型,DISK 或 TAPE。若指定为 NULL,则忽略存储设备的区分。

end_time:删除备份集生成的结束时间,仅删除 end_time 之前的备份集,必须指定。

ts_name:表空间名,若未指定,则认为删除所有满足条件的表空间备份集。

举例说明:

SQL>BACKUP TABLESPACE MAIN BACKUPSET '/home/dm_bak/ts_bak_for_batch_del';

SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK','/home/dm_bak');

SQL>CALL SP_TS_BAKSET_REMOVE_BATCH('DISK',NOW(),'MAIN');
  • SP_TAB_BAKSET_REMOVE_BATCH 过程

批量删除指定表对象及指定时间之前的表备份集。使用该方法前,需要先使用 SF_BAKSET_BACKUP_DIR_ADD 添加将要删除的备份集目录,否则只删除默认备份路径下的备份集。

定义:

SP_TAB_BAKSET_REMOVE_BATCH (

	device_type varchar,

	end_time datetime,

	sch_name varchar(128),

	tab_name varchar(128)

)

参数说明:

device_type:设备类型,DISK 或 TAPE。若指定为 NULL,则忽略存储设备的区分。

end_time:删除备份集生成的结束时间,仅删除 end_time 之前的备份集,必须指定。

sch_name:表所属的模式名。

tab_name:表名,只要模式名和表名有一个指定,就认为需要匹配目标;若均指定为 NULL,则认为删除满足条件的所有表备份。

举例说明:

SQL>CREATE TABLE TAB_FOR_BATCH_DEL(C1 INT);

SQL>BACKUP TABLE TAB_FOR_BATCH_DEL BACKUPSET'/home/dm_bak/tab_bak_for_batch_del';

SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK','/home/dm_bak');

SQL>CALL SP_TAB_BAKSET_REMOVE_BATCH('DISK',NOW(),'SYSDBA','TAB_FOR_BATCH_DEL');
  • SP_ARCH_BAKSET_REMOVE_BATCH 过程

批量删除指定时间之前的归档备份集。使用该方法前,需要先使用 SF_BAKSET_BACKUP_DIR_ADD 添加将要删除的备份集目录,否则只删除默认备份路径下的备份集。

定义:

SP_ARCH_BAKSET_REMOVE_BATCH (

	device_type varchar,

	end_time datetime

)

参数说明:

device_type:设备类型,DISK 或 TAPE。若指定为 NULL,则忽略存储设备的区分。

end_time:删除备份集生成的结束时间,仅删除 end_time 之前的备份集,必须指定。

举例说明:

SQL>BACKUP ARCHIVELOG BACKUPSET '/home/dm_bak/arch_bak_for_batch_del';

SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK','/home/dm_bak');

SQL>CALL SP_ARCH_BAKSET_REMOVE_BATCH('DISK', NOW());

3.2.4.4 备份信息查看

DM 提供了一系列动态视图供用户查看备份集相关信息,在查看之前应先使用 SF_BAKSET_BACKUP_DIR_ADD 添加备份集目录,否则只显示默认备份路径下的备份集信息,使用方法如下例所示:

SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK', '/home/dm_bak');

下面逐个介绍 DM 提供的备份相关动态视图。

  • V$BACKUPSET

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

序号 数据类型 说明
1 DEVICE_TYPE VARCHAR(10) 备份集存储介质类型
2 BACKUP_ID INTEGER 备份 ID
3 PARENT_ID INTEGER 并行备份的子备份集所属备份的 ID
4 BACKUP_NAME VARCHAR(512) 备份名
5 BACKUP_PATH VARCHAR(1024) 备份路径
6 TYPE INTEGER 0:基备份,1:增量备份,2:表备份,3:归档备份
7 LEVEL INTEGER 是否脱机备份。0:联机备份,1:脱机备份
8 RANGE## INTEGER 1:库备份,2:表空间备份,3:表级备份,4:归档备份
9 OBJECT_NAME VARCHAR(1025) 对象名:数据库名、表空间名或者表名
10 OBJECT_ID INTEGER 对象 ID,表备份时无效
11 BASE_NAME VARCHAR(512) 基备份名,表备份时无效
12 BACKUP_TIME DATETIME(6) 备份时间
13 DESC## VARCHAR(1024) 备份描述信息
14 ENCRYPT_TYPE INTEGER 加密类型
15 COMPRESS_LEVEL INTEGER 压缩级别
16 WITHOUT_LOG INTEGER 联机数据库备份是否备份日志, 表备份时无效
17 USE_PWR INTEGER 增量备份过程中是否使用 PWR 优化,实际上均不使用,保留仅为了兼容
18 PKG_SIZE INTEGER 数据包大写标志,内部实现
19 BEGIN_LSN BIGINT 备份的起始 LSN 值,表备份时无效
20 END_LSN BIGINT 结束备份的 LSN 值,表备份时无效
21 BKP_NUM INTEGER 备份片个数,即备份集中.bak 文件个数
22 DBF_NUM INTEGER 备份集中包含的数据库\表空间数据文件个数,表备份时无效
23 PARALLEL_NUM INTEGER 并行备份的并行数,0 或者 1 为非并行备份集
24 BAKSET_TYPE INTEGER 备份集类型。0:普通备份集(NORMAL),1:DDL_CLONE 备份集(DDL_CLONE),2:联机拷贝备份集(COPY)
25 MPP_FLAG INTEGER MPP 库备份标识,0:不是,1:是
26 MIN_TRX_START_LSN BIGINT 该参数未使用,始终为 0
27 MIN_EXEC_VER INTEGER 备份集适用的最小执行码的版本号,转换为 16 进制匹配版本号。例如:属性值 0x0801010C 对应版本号为 V8.1.1.12
28 CUMULATIVE INTEGER 增量备份时,是否为累积增量备份。1:是,0:否
29 MIN_DCT_VER INTEGER 备份集适用的最小字典版本号
30 DDL_CLONE INTEGER 是否数据库克隆。1:是,0:否

下面以创建数据库备份为例,查看备份集的介质类型、备份路径、备份类型等基本信息:

SQL>BACKUP DATABASE FULL BACKUPSET '/home/dm_bak/db_bak_for_info';

SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK', '/home/dm_bak');

SQL>SELECT DEVICE_TYPE,BACKUP_PATH, TYPE, RANGE## FROM V$BACKUPSET;

查询结果:

LINEID DEVICE_TYPE BACKUP_PATH TYPE RANGE##

---------- ----------- ---------------------------- ----------- -----------

1 DISK /home/dm_bak/db_bak_for_info 0 1
  • V$BACKUPSET_DBINFO

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

序号 数据类型 说明
1 DEVICE_TYPE VARCHAR(10) 备份集存储介质类型
2 BACKUP_ID INTEGER 备份 ID
3 BACKUP_NAME VARCHAR(512) 备份名
4 BACKUP_PATH VARCHAR(1024) 备份路径
5 EXTENT_SIZE INTEGER 数据文件使用的簇大小
6 PAGE_SIZE INTEGER 页大小
7 LOG_PAGE_SIZE INTEGER 日志文件页大小
8 CASE_SENSITVE INTEGER 大小写敏感标志
9 DB_MAGIC INTEGER 数据库魔数
10 PMNT_MAGIC INTEGER 永久魔数(permenant_magic)
11 UNICODE_FLAG INTEGER unicode 标志
12 DB_VERSION INTEGER 数据库版本
13 GLOBAL_VERSION VARCHAR(512) 数据库全局版本信息
14 ENABLE_POLICY INTEGER 安全策略
15 ARCH_FLAG INTEGER 归档是否打开的标志
16 DSC_NODE INTEGER 高性能集群的节点数目
17 PAGE_CHECK INTEGER 数据页校验配置
18 RLOG_ENCRYPT INTEGER 归档日志是否加密
19 EX_CIPHER_NAME VARCHAR(512) 外部加密算法名称
20 EX_CIPHER_ID INTEGER 外部加密算法名称对应的 ID
21 EX_HASH_NAME VARCHAR(512) 外部 HASH 算法名称
22 EX_HASH_ID INTEGER 外部 HASH 算法名称对应的 ID
23 LENGTH_IN_CHAR INTEGER VARCHAR 类型长度是否以字符为单位
24 USE_NEW_HASH INTEGER 是否使用改进的字符类型 HASH 算法
25 BLANK_PAD_MODE INTEGER 数据库空格填充模式
26 SRC_DB_MAGIC INTEGER 源库 DB_MAGIC

表还原时要求目标库的特定建库参数要与源库一致,如页大小、簇大小等,通过查看备份文件的数据库信息可确定目标库需要设置哪些建库参数。下面以创建表备份为例,查看备份集的页大小、簇大小、大小写是否敏感、UNICODE_FLAG 等数据库信息:

SQL>BACKUP TABLE TAB_01 BACKUPSET '/home/dm_bak/tab_bak_01';

SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK', '/home/dm_bak');

SQL>SELECT BACKUP_PATH, PAGE_SIZE, EXTENT_SIZE, CASE_SENSITIVE FROM V$BACKUPSET_DBINFO WHERE BACKUP_PATH='/home/dm_bak/tab_bak_01';

查询结果:

LINEID BACKUP_PATH PAGE_SIZE EXTENT_SIZE CASE_SENSITIVE

---------- ------------------------------ ----------- ----------- -------

1 /home/dm_bak/db_bak_for_dbinfo 8192 16 1
  • V$BACKUPSET_DBF

显示备份集中数据文件的相关信息,表备份时无效。

序号 数据类型 说明
1 DEVICE_TYPE VARCHAR(10) 备份集存储介质类型
2 BACKUP_ID INTEGER 备份 ID
3 BACKUPNAME VARCHAR(512) 备份名
4 BACKUPPATH VARCHAR(1024) 备份路径
5 FILE_SEQ INTEGER 备份的数据文件序号
6 TS_ID INTEGER 表空间 ID
7 FILE_ID INTEGER 数据文件 ID
8 TS_STATE INTEGER 表空间状态
9 TS_NAME VARCHAR(512) 表空间名
10 FILE_NAME VARCHAR(1024) 包含完整路径的数据文件名
11 MIRROR_PATH VARCHAR(1024) 镜像文件路径
12 FILE_LEN BIGINT 数据文件占用的字节大小
13 MAX_LIMIT_SIZE INTEGER 文件最大大小,以 M 为单位
14 AUTO_EXTEND INTEGER 是否支持自动扩展:1:支持,0:不支持
15 NEXT_SIZE INTEGER 文件每次扩展大小,以 M 为单位
16 START_BKP_SEQ INTEGER 起始备份片编号
17 START_BKP_OFF BIGINT 起始备份片偏移
18 END_BKP_SEQ INTEGER 结束备份片编号
19 END_BKP_OFF BIGINT 结束备份片偏移

数据库和表空间备份集中记录了备份的数据文件具体信息,如果想了解备份集中包含了哪些数据文件且这些数据文件有什么属性,可通过查询 V$BACKUPSET_DBF 实现。下面以表空间备份为例,查看备份集中的数据文件信息。

SQL>CREATE TABLESPACE TS_FOR_DBF DATAFILE'TS_FOR_DBF_01.DBF' SIZE 128;

SQL>ALTER TABLESPACE TS_FOR_DBF ADD DATAFILE'TS_FOR_DBF_02.DBF' SIZE 128;

SQL>BACKUP TABLESPACE TS_FOR_DBF BACKUPSET '/home/dm_bak/ts_bak_for_dbf';

SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK', '/home/dm_bak');

SQL>SELECT FILE_SEQ, TS_ID, FILE_ID, TS_NAME, FILE_NAME FROM V\$BACKUPSET_DBF WHERE BACKUPPATH ='/home/dm_bak/ts_bak_for_dbf';

查询结果:

LINEID FILE_SEQ TS_ID FILE_ID TS_NAME FILE_NAME

--------------------- ----------- ----------- ----------

1 1 5 0 TS_FOR_DBF /home/xm/DAMENG/TS_FOR_DBF_01.DBF

2 2 5 1 TS_FOR_DBF /home/xm/DAMENG/TS_FOR_DBF_02.DBF
  • V$BACKUPSET_ARCH

显示备份集中归档文件的信息,且仅归档备份才会有数据。

序号 数据类型 说明
1 DEVICE_TYPE VARCHAR(10) 备份集存储介质类型
2 BACKUP_ID INTEGER 备份 ID
3 BACKUPNAME VARCHAR(512) 备份名
4 BACKUPPATH VARCHAR(1024) 备份路径
5 FILE_SEQ INTEGER 备份的数据文件序号
6 FILE_NAME VARCHAR(1024) 归档文件路径
7 FILE_LEN BIGINT 归档文件大小
8 DSC_SEQNO INTEGER DSC 节点号
9 BEGIN_SEQNO BIGINT 归档起始 PKG SEQNO
10 BEGIN_LSN BIGINT 归档起始 LSN 值
11 END_SEQNO BIGINT 归档结束 PKG SEQNO
12 END_LSN BIGINT 归档结束 LSN 值
13 CREATE_TIME DATETIME(6) 归档文件的创建时间
14 CLOSE_TIME DATETIME(6) 归档文件的关闭时间
15 START_BKP_SEQ INTEGER 起始备份片编号
16 START_BKP_OFF BIGINT 起始备份片偏移
17 END_BKP_SEQ INTEGER 结束备份片编号
18 END_BKP_OFF BIGINT 结束备份片偏移

备份集日志信息可以是联机库备份中备份开始到备份结束这段时间数据库产生的日志,也可以是归档备份中备份的归档信息。接下来以数据库备份为例查询备份集日志信息。

SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_for_arch';

SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK', '/home/dm_bak');

SQL>SELECT BACKUPPATH, FILE_SEQ, BEGIN_LSN, END_LSN FROM V$BACKUPSET_ARCH
WHERE BACKUPPATH='/home/dm_bak/db_bak_for_arch';

查询结果:

LINEID BACKUPPATH FILE_SEQ BEGIN_LSN END_LSN

---------- -------------------------- ----------- ---------- ----------

1 /home/dm_bak/db_bak_for_arch 6 280037 281471
  • V$BACKUPSET_BKP

显示备份集的备份片信息。

序号 数据类型 说明
1 DEVICE_TYPE VARCHAR(10) 备份集存储介质类型
2 BACKUP_ID INTEGER 备份 ID
3 BACKUPNAME VARCHAR(512) 备份名
4 BACKUPPATH VARCHAR(1024) 备份路径
5 BKP_NTH INTEGER 备份片文件编号
6 FILE_NAME VARCHAR(1024) 备份文件名
7 BKP_LEN BIGINT 备份片长度

以数据库备份为例,查看备份集中的备份片信息。

SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_for_bkp';

SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK', '/home/dm_bak');

SQL>SELECT BACKUPPATH, BKP_NTH, FILE_NAME, BKP_LEN FROM V$BACKUPSET_BKP WHERE
BACKUPPATH='/home/dm_bak/db_bak_for_bkp';

查询结果:

LINEID BACKUPPATH BKP_NTH FILE_NAME BKP_LEN

---------- --------------------------- ------ -------------------- --------

1 /home/dm_bak/db_bak_for_bkp 0 db_bak_for_bkp.bak 15378944

2 /home/dm_bak/db_bak_for_bkp 1 db_bak_for_bkp_1.bak 9216
  • V$BACKUPSET_SEARCH_DIRS

显示备份集搜索目录。

序号 数据类型 说明
1 DIR VARCHAR(1024) 备份集搜索目录

查询 V$BACKUPSET_SEARCH_DIRS 显示当前会话已添加的备份目录,即备份集搜索目录。若用户没有添加备份目录,那么仅显示默认的备份目录。

SQL>SELECT SF_BAKSET_BACKUP_DIR_REMOVE_ALL();

SQL>SELECT * FROM V$BACKUPSET_SEARCH_DIRS;

查询结果:

LINEID DIR

---------- -------------------

1 /home/xm/DAMENG/bak

如果添加备份目录,查询结果包括默认备份目录和用户添加的备份目录。

SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK', '/home/dm_bak');

SQL>SELECT * FROM V$BACKUPSET_SEARCH_DIRS;

查询结果:

LINEID DIR

---------- -------------------

1 /home/dm_bak

2 /home/xm/DAMENG/bak
  • V$BACKUPSET_TABLE

显示表备份集中备份表信息,仅表备份有效。

序号 数据类型 说明
1 DEVICE_TYPE VARCHAR(10) 备份集存储介质类型
2 BACKUP_ID INTEGER 备份 ID
3 BACKUPNAME VARCHAR(512) 备份名
4 BACKUPPATH VARCHAR(1024) 备份路径
5 SCHEMANAME VARCHAR(512) 备份表所属的模式名
6 USERNAME VARCHAR(512) 执行表备份的用户名
7 TSNAME VARCHAR(512) 备份表存储的表空间名
8 TABLENAME VARCHAR(512) 备份表名
9 TABLETYPE INTEGER 表类型
10 INIT_SQL VARCHAR(4096) 完整建表语句,忽略无效的约束 (语句可能会被截断)
11 DCONS_SQL VARCHAR(4096) 备份表中被禁用约束的创建语句(语句可能会被截断,DMRMAN 可查看完整语句)
12 DIDX_SQL VARCHAR(4096) 备份表中无效二级索引的创建语句(语句可能会被截断,DMRMAN 可查看完整语句)
13 BIDX_NUM INT 备份集中备份的二级索引个数
14 META_VERSION INT 当前表备份的元信息的版本号

下面创建表备份并查看备份中备份名、备份路径、表名等信息。

SQL>CREATE TABLE TAB_FOR_INFO(C1 INT);

SQL>BACKUP TABLE TAB_FOR_INFO TO TAB_BAK_FOR_INFO BACKUPSET '/home/dm_bak/tab_bak_for_info';

SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK', '/home/dm_bak');

SQL>SELECT BACKUPNAME, TABLENAME FROM V$BACKUPSET_TABLE WHERE BACKUPPATH='/home/dm_bak/tab_bak_for_info';

查询结果:

LINEID BACKUPNAME TABLENAME

---------- ---------------- ------------

1 TAB_BAK_FOR_INFO TAB_FOR_INFO
  • V$BACKUPSET_SUBS

显示并行备份中生成的子备份集信息。

序号 数据类型 说明
1 DEVICE_TYPE VARCHAR(10) 备份集存储介质类型
2 BACKUPNAME VARCHAR(512) 备份名
3 BACKUP_ID INTEGER 备份 ID
4 PARENT_ID INTEGER 子备份集所属主备份集 ID
5 BACKUPPATH VARCHAR(1024) 各备份集绝对路径
6 BKP_NUM INTEGER 各备份集中备份片文件个数,可能为 0
7 DBF_NUM INTEGER 各备份集中备份数据文件个数,可能为 0

数据库和表空间支持并行备份,备份后会在主备份集中生成多个子备份集,查询视图 V$BACKUPSET_SUBS 可获取子备份集中包含的备份片文件个数及备份数据文件个数等信息。以创建数据库并行备份为例,查看子备份集的相关信息。

SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_for_subs' PARALLEL 3;

SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK', '/home/dm_bak');

SQL>SELECT BACKUPPATH, BKP_NUM, DBF_NUM FROM V$BACKUPSET_SUBS;

查询结果:

LINEID BACKUPPATH BKP_NUM DBF_NUM

---------- ---------------------------------------------- -----------

1 /home/dm_bak/db_bak_for_subs/db_bak_for_subs_0 1 1

2 /home/dm_bak/db_bak_for_subs/db_bak_for_subs_1 1 1

3 /home/dm_bak/db_bak_for_subs/db_bak_for_subs_2 1 1

3.2.4.5 监控备份过程

对于联机库级备份,DM 提供了一系列动态视图以实时监控备份过程。

下面逐个介绍 DM 提供的备份相关动态视图。

  • V$BACKUP_MONITOR

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

序号 数据类型 说明
1 PATH VARCHAR(256) 备份集路径
2 BAKSET_MAGIC INTEGER 备份集魔数
3 START_TIME DATETIME(6) 备份开始时间
4 REMAINING VARCHAR(16) 预估剩余时间
5 TOTAL_SIZE BIGINT 待备份数据文件大小
6 PCNT DECIMAL(6, 2) 备份完成百分比
7 READ_SIZE BIGINT 已读取数据文件大小
8 WRITE_SIZE BIGINT 备份集写入数据大小
9 AVG_READ DECIMAL(16, 2) 平均读取速度,单位 M/S
10 MIN_READ DECIMAL(16, 2) 最小读取速度,单位 M/S
11 MAX_READ DECIMAL(16, 2) 最大读取速度,单位 M/S
12 CUR_READ DECIMAL(16, 2) 当前读取速度,单位 M/S
13 AVG_WRITE DECIMAL(16, 2) 平均写入速度,单位 M/S
14 MIN_WRITE DECIMAL(16, 2) 最小写入速度,单位 M/S
15 MAX_WRITE DECIMAL(16, 2) 最大写入速度,单位 M/S
16 CUR_WRITE DECIMAL(16, 2) 当前写入速度,单位 M/S

下面以创建数据库备份为例,查看当前备份任务的待备份数据文件大小、备份完成百分比、当前读取速度以及当前写入速度等基本信息:

SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_for_monitor';

SQL>SELECT TOTAL_SIZE, PCNT, CUR_READ, CUR_WRITE FROM V$BACKUP_MONITOR;

查询结果:

--第一次查询

行号     TOTAL_SIZE       PCNT CUR_READ CUR_WRITE

---------- -------------------- ----- -------- ---------

1       27262976         54.33 60.36  24.21  

--第二次查询

行号     TOTAL_SIZE       PCNT  CUR_READ CUR_WRITE

---------- -------------------- ------ -------- ---------

1       27262976         100.00 0    0.04
  • V$BACKUP_FILES

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

序号 数据类型 说明
1 PATH VARCHAR(256) 数据文件路径
2 SIZE BIGINT 数据文件大小
3 OFFSET BIGINT 已读取数据文件偏移
4 START_TIME DATETIME(6) 开始备份时间

下面以创建数据库备份为例,查看当前备份任务的待备份数据文件的路径、大小、已读取数据文件偏移等基本信息:

SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_for_files';

SQL>SELECT PATH, SIZE, OFFSET FROM V$BACKUP_FILES;

查询结果:

行号    PATH                 SIZE         OFFSET

-------- ------------------------------- ----------------- ---------------

1     /home/db/db_dev2/DAMENG/SYSTEM.DBF 14811136      14811136

2     /home/db/db_dev2/DAMENG/ROLL.DBF   12320768      12320768

3     /home/db/db_dev2/DAMENG/MAIN.DBF   131072       131072   
  • V$BACKUP_HISTORY

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

序号 数据类型 说明
1 PATH VARCHAR(256) 备份集路径
2 START_TIME DATETIME(6) 备份开始时间
3 END_TIME DATETIME(6) 备份结束时间
4 READ_SIZE BIGINT 已读取数据文件大小
5 WRITE_SIZE BIGINT 备份集写入数据大小
6 AVG_READ DECIMAL(16, 2) 平均读取速度,单位 M/S
7 MIN_READ DECIMAL(16, 2) 最小读取速度,单位 M/S
8 MAX_READ DECIMAL(16, 2) 最大读取速度,单位 M/S
9 AVG_WRITE DECIMAL(16, 2) 平均写入速度,单位 M/S
10 MIN_WRITE DECIMAL(16, 2) 最小写入速度,单位 M/S
11 MAX_WRITE DECIMAL(16, 2) 最大写入速度,单位 M/S

下面以创建数据库备份为例,查看最近 100 条备份监控信息的已读取数据文件大小、备份集写入数据大小、平均读取速度以及平均写入速度等基本信息:

SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_for_history';

SQL>SELECT READ_SIZE, WRITE_SIZE, AVG_READ, AVG_WRITE FROM V$BACKUP_HISTORY;

查询结果:

行号    READ_SIZE      WRITE_SIZE      AVG_READ AVG_WRITE

---------- -------------------- -------------------- -------- ---------

1     27262976       15634944       10.40  5.96

3.2.5 数据还原

DM 仅支持表的联机还原,数据库、表空间和归档日志的还原必须通过脱机工具 DMRMAN 执行。本章节主要介绍如何使用 DIsql 工具还原表。

本章内容主要包括:

  • 表还原

3.2.5.1 表还原

3.2.5.1.1 概述

表还原之后不需要恢复操作。DIsql 中输入以下简单的 RESTORE 语句就可还原表:

SQL>RESTORE TABLE TAB_01 FROM BACKUPSET 'tab_bak_01';

语法如下:

RESTORE TABLE [<表名>] [STRUCT] [KEEP TRXID] 

FROM BACKUPSET'<备份集路径>' [DEVICE TYPE <介质类型> [PARMS '<介质参数>']] 

[IDENTIFIED BY <密码>|"<密码>" [ENCRYPT WITH <加密算法>]] 

[TRACE FILE '<TRACE文件名>'] [TRACE LEVEL <TRACE日志级别>];

表名:指定需要还原的表名称。指定表名还原时数据库中必须存在该表,否则报错,不会从备份集判断是否存在目标表。

STRUCT:执行表结构还原,若未指定,则认为是表中数据还原;表数据还原要求还原目标表结构与备份集中完全一致,否则报错,所以表结构还原可以在表数据还原之前执行,减少报错。

KEEP TRXID:指定还原后数据页上记录的 TRXID 保持不变,若发现备份时系统最大的 TRXID 大于等于当前系统的最大 TRXID,则将当前系统最大事务 ID+1000。调整后副作用:rec_id >= next_trxid 的记录,或者 rec_id <= bak_max_trxid + 1000 的记录,可能因为执行了表还原,导致查询结果不正确,原本不可见的数据,变得可见了。

BACKUPSET:表备份时指定的备份集路径。若指定为相对路径,会在默认备份目录下搜索备份集。

DEVICE TYPE:指存储备份集的介质类型,表还原暂时只支持 DISK。

PARMS:只对介质类型为 TAPE 时有效。

IDENTIFIED BY:加密备份表时,用户设置的加密密码。密码可以用双引号括起来,这样可以避免一些特殊字符通不过语法检测。

ENCRYPT WITH:加密备份表时,用户设置的加密算法。当不指定 ENCRYPT WITH 子句时,默认为 AES256_CFB 加密算法。

注意

加密算法包括:DES_ECB、DES_CBC、DES_CFB、DES_OFB、DESEDE_ECB、DESEDE_CBC、DESEDE_CFB、DESEDE_OFB、AES128_ECB、AES128_CBC、AES128_CFB 、AES128_OFB、AES192_ECB、AES192_CBC、AES192_CFB 、AES192_OFB、AES256_ECB、AES256_CBC、AES256_CFB 、AES256_OFB 、RC4

TRACE FILE:指定生成的 TRACE 文件。启用 TRACE,但不指定 TRACE FILE 时,默认在 DM 数据库系统的 log 目录下生成 DM_SBTTRACE_年月.log 文件;若使用相对路径,则生成在执行码同级目录下;若用户指定 TRACE FILE,则指定的文件不能为已经存在的文件,否则报错。TRACE FILE 不可以为 ASM 文件。

TRACE LEVEL:是否启用 TRACE。有效值 1、2,默认为 1 表示不启用 TRACE,此时若指定了 TRACE FILE,会生成 TRACE 文件,但不写入 TRACE 信息;为 2 启用 TRACE 并在 TRACE 文件中写入 TRACE 相关内容。

图例:

图例 01

使用说明:

  1. 仅支持对普通用户表进行还原,包括堆表。其中,系统表、临时表、物化视图表、物化视图附属表、日志表以及特定模式(DBG_PKG/INFORMATION_SCHEMA/INFO_SCHEM/SYSREP/SYSGEO/SYSJOB/SYSCPT/SYS)下的表不支持还原。
  2. 列类型为对象类型的表不支持表还原。
  3. 若还原表中存在位图连接索引和位图连接虚索引则不支持还原。
  4. 不支持在加密库上进行表还原。
  5. 备份集路径指备份集所在目录,其中应包含完整备份数据,包括元数据文件(.meta)和备份片文件(.bak)。仅支持从表备份集中还原表。
  6. 表名设置为可选参数。若指定,则数据库中必须存在该表且表定义必须与备份表严格一致;若不指定,则使用备份集中记录的备份表作为还原目标表。
  7. 目标表所在的表空间必须处于联机状态。
  8. 数据守护环境下,主库允许表备份还原,备库不允许。
  9. MOUNT 和 SUSPEND 状态下不允许进行表还原。
  10. MPP 环境不允许进行表还原。
  11. 若在语句中指定 STRUCT 关键字,则执行表结构还原。表结构还原会根据备份集中备份表还原要求,对目标表定义进行校验,并删除目标表中已存在的二级索引和约束。
  12. 若不指定 STRUCT 关键字,则执行表数据还原,表数据还原默认仅会将备份表中聚集索引上的数据进行还原。表数据还原默认仅会在目标表定义与备份表一致且不存在二级索引和约束的情况下执行。
  13. 若在未指定 STRUCT 的情况下,执行还原出现存在二级索引或冗余约束的错误,或在不指定目标表的情况下,报目标不存在的错误,可先执行 STRUCT 还原后,再继续执行实际数据的还原。
  14. 若用户指定 TRACE FILE,则指定的文件不能为已经存在的文件,否则报错;也不可以为 ASM 文件。
  15. 若表中存在大字段列,且表备份时 INI 参数 BLOB_OUTROW_REC_STOR 大于 0,但建立还原目标表时 INI 参数 BLOB_OUTROW_REC_STOR 等于 0,那么若大字段列存在行外数据,则在执行表还原时会报错,且表数据会丢失。
  16. 表还原不检查目标表的缺省表达式(default 值)。
  17. 若表列进行了加密,则表还原时不能跨库或跨表还原,只能还原到自身。
3.2.5.1.2 表还原

执行表还原,数据库必须处于 OPEN 状态,MOUNT 和 SUSPEND 状态下不允许执行表还原。表还原不需要配置归档,因为表还原是联机完全备份还原,所以不需要借助本地归档日志进行恢复。完整的表备份还原步骤如下:

  1. 保证数据库为 OPEN 状态;
  2. 创建待备份的表;
SQL>CREATE TABLE TAB_FOR_RES_01(C1 INT);
  1. 备份表数据;
SQL>BACKUP TABLE TAB_FOR_RES_01 BACKUPSET '/home/dm_bak/tab_bak_for_res_01';
  1. 校验备份,此步骤为可选;
SQL>SELECT SF_BAKSET_CHECK('DISK','/home/dm_bak/tab_bak_for_res_01');
  1. 还原表数据。
SQL>RESTORE TABLE TAB_FOR_RES FROM BACKUPSET '/home/dm_bak/tab_bak_for_res_01';

表还原实质是表内数据的还原,以及索引和约束等的重建。如果备份文件与目标表中都包含索引或约束该如何还原呢?下面以表中包含索引为例说明如何还原表,具体步骤如下:

  1. 保证数据库为 OPEN 状态;
  2. 创建待备份的表;
SQL>CREATE TABLE TAB_FOR_RES_02(C1 INT);
  1. 创建索引;
SQL>CREATE INDEX I_TAB_FOR_RES_02 ON TAB_FOR_RES_02(C1);
  1. 备份表;
SQL>BACKUP TABLE TAB_FOR_RES_02 BACKUPSET '/home/dm_bak/tab_bak_for_res_02';
  1. 校验备份,此步骤为可选;
SQL>SELECT SF_BAKSET_CHECK('DISK','/home/dm_bak/tab_bak_for_res_02');
  1. 执行表结构还原,表备份和目标表中都包含索引,如果直接执行表数据还原会报错:还原表中存在二级索引或冗余约束;
SQL>RESTORE TABLE TAB_FOR_RES_02 STRUCT FROM BACKUPSET '/home/dm_bak/tab_bak_for_res_02';
  1. 执行表数据还原。
SQL>RESTORE TABLE TAB_FOR_RES_02 FROM BACKUPSET '/home/dm_bak/tab_bak_for_res_02';

3.2.6 数据还原高级主题

本节介绍使用 DIsql 工具联机数据还原的高级过程,DIsql 工具仅支持对表进行还原。

本节主要内容包括:

  • 表还原

3.2.6.1 表还原

前面已经介绍了表备份还原的基本常用操作,本节将介绍一些表还原的高级过程。主要内容包括:

  • 指定还原时不重建索引
  • 指定还原时不重建约束

指定还原时不重建索引

表备份时会默认备份表中的索引,还原时使用 RESTORE TABLE...WITHOUT INDEX...语句可选择不还原索引。完整示例如下:

  1. 保证数据库为 OPEN 状态;
  2. 准备数据,创建待备份的表及索引;
SQL>CREATE TABLE TAB_FOR_IDX_01(C1 INT);

SQL>CREATE INDEX I_TAB_FOR_IDX_01 ON TAB_FOR_IDX_01 (C1);
  1. 备份表数据;
SQL>BACKUP TABLE TAB_FOR_IDX_01 BACKUPSET '/home/dm_bak/tab_bak_for_res_01';
  1. 校验备份,此步骤为可选;
SQL>SELECT SF_BAKSET_CHECK('DISK','/home/dm_bak/tab_bak_for_res_01');
  1. 还原表数据,但不重建索引。
SQL>RESTORE TABLE TAB_FOR_RES WITHOUT INDEX FROM BACKUPSET '/home/dm_bak/tab_bak_for_res_01';

指定还原时不重建约束

表备份时会默认备份表中的索引定义,还原时使用 RESTORE TABLE...WITHOUT CONSTRAINT...语句可选择还原时不重建约束。完整示例如下:

  1. 保证数据库为 OPEN 状态;
  2. 准备数据,创建待备份的表及索引;
SQL>CREATE TABLE TAB_FOR_CONS_01(C1 INT);

SQL>CREATE INDEX I_TAB_FOR_CONS_01 ON TAB_FOR_CONS_01 (C1);
  1. 备份表数据;
SQL>BACKUP TABLE TAB_FOR_CONS_01 BACKUPSET '/home/dm_bak/tab_bak_for_res_01';
  1. 校验备份,此步骤为可选;
SQL>SELECT SF_BAKSET_CHECK('DISK','/home/dm_bak/tab_bak_for_res_01');
  1. 还原表数据,但不还原约束。
SQL>RESTORE TABLE TAB_FOR_RES WITHOUT CONSTRAINT FROM BACKUPSET '/home/dm_bak/tab_bak_for_res_01';

3.3 使用脱机工具 DMRMAN 进行备份还原

DMRMAN(DM RECOVERY MANAGER)是 DM 的脱机备份还原管理工具,由它来统一负责库级脱机备份、脱机还原、脱机恢复等相关操作,该工具支持命令行指定参数方式和控制台交互方式执行,降低了用户的操作难度。

通过 DMRMAN 工具执行脱机操作过程中,仅会使用通过关键字 DATABASE 指定的目标库的本地归档配置信息,不会对本地归档配置文件中其他类型归档配置信息进行校验。例如:DATABASE 指定目标库为/opt/dmdbms/data/dm.ini,为单机环境且配置参数 ARCH_INI 为 1,那么只会相应的读取 dmarch.ini 中本地归档日志信息。此时,即使 dmarch.ini 中配置了 REALTIME、MARCH、TIMELY 等其他类型的归档日志,也不会去校验 dmmal.ini、dmtimer.ini 等是否有效。

本章节内容主要包括:

  • DMRMAN 概述
  • 启动和配置 DMRMAN
  • 数据备份
  • 管理备份
  • 数据库还原和恢复
  • 表空间还原和恢复
  • 归档还原
  • 归档修复
  • 查看操作日志
注意

应使用与DM数据库版本配套的DMRMAN工具进行操作。当使用DM7的DMRMAN工具操作DM8数据库时,无法检测DM8数据库实例是否处于启动状态。

3.3.1 DMRMAN 概述

DMRMAN 是 DM 提供的命令行工具,无需额外安装。DMRMAN 的结构比较复杂,为了更好地使用它我们需要了解它的结构。接下来将对 DMRMAN 的重要组成部分进行介绍。

源库

源库是待备份的数据库。使用 DMRMAN 工具只可对数据库进行脱机备份,联机备份需要通过 DIsql 工具实现。DMRMAN 可以针对整个数据库执行脱机完全备份和增量备份,数据库可以配置归档也可以不配置。

目标库

目标库是待还原的数据库,即用来做还原的库,也称为目标还原库。目标库可以是通过 dm.ini 文件指定的数据库,也可以是目标文件目录。通过 dm.ini 指定库时,dm.ini 及其配置中的 CTL_PATH 必须有效,且库必须处于关闭状态;指定文件目录时,指定目录作为 SYSTEM_PATH 处理,可以存在,也可以不存在,但必须有效。目前目标库的还原仅支持脱机还原,可通过 DMRMAN 和 CONSOLE 工具实现。

DMRMAN 客户端

DMRMAN 客户端是 DM 软件的一部分,用来执行数据库的备份还原操作。DMRMAN 客户端是一个命令行工具,命令行的好处是管理员可以编写复杂的脚本,将 DMRMAN 和操作系统的任务调度结合起来可以实现备份的自动化。

备份集

利用 DMRMAN 工具将数据库中的一个或多个数据文件、数据库信息等备份到一个称为“备份集”的逻辑结构中,备份集的格式是特定的,只能由 DMRMAN 创建和访问。一个备份集中会包含一个或多个二进制文件,该二进制文件被称为备份片。备份数据库会产生一个备份集,该备份集可能包含一个或者多个备份片。备份片的个数由数据库中数据文件的大小和文件系统对文件大小的限制共同决定。如果备份的数据文件大小超过了文件系统对文件大小的限制就会产生多个备份片。

在对数据库进行备份时可以指定备份片的大小来适应存储设备的容量。例如,一个数据库产生的数据文件的大小约为 40GB,一盘磁带的容量为 10GB,这时可以指定备份片大小为 10G,备份后备份集将包含 4 个备份片,正好使用 4 盘磁带。

3.3.2 启动和配置 DMRMAN

本节介绍如何启动命令行工具 DMRMAN 并进行交互。主要内容包括:

  • 启动和退出 DMRMAN
  • 输入 DMRMAN 命令
  • DMRMAN 环境配置

3.3.2.1 启动和退出 DMRMAN

安装 DM 数据库后,DMRMAN 可执行程序与数据库其他可执行程序一样位于安装路径的执行码目录下。比如,LINUX 上数据库的执行码目录为/opt/dmdbms/bin,转到执行码目录直接在操作系统的命令行中输入以下命令就可启动 DMRMAN。若配置了环境变量 DM_HOME,可直接命令行执行:

./dmrman

启动后控制台中输入 exit 命令即可退出 DMRMAN 环境:

RMAN>exit

3.3.2.2 输入 DMRMAN 命令

DMRMAN 工具支持控制台输入命令、命令行设置参数两种操作方式。下面分别对这两种操作方式进行介绍。

DMRMAN 控制台输入命令

当 DMRMAN 客户端已经启动且可以输入命令时会显示命令提示符。如下所示:

RMAN>

输入以下用于执行的 DMRMAN 命令:

RMAN>HELP

RMAN>BACKUP DATABASE'/opt/dmdbms/data/DAMENG/dm.ini';

大多数的 DMRMAN 命令会设置多个参数,命令的结尾可以加分号结束,也可以不使用分号。

DMRMAN 控制台还可以执行脚本。如首先创建一个名为 cmd_file.txt 的文件,文件中包含“BACKUP DATABASE'/opt/dmdbms/data/DAMENG/dm.ini'”命令,保存到/home/dm_cmd 目录下,则该文件的执行方式如下:

RMAN>`/home/dm_cmd/cmd_file.txt

DMRMAN 是按行解析命令,如果输入一行不完整的命令执行会报错,如一条完整的命令分三行输入会导致报错:

BACKUP

DATABASE

'/opt/dmdbms/data/DAMENG/dm.ini';

DMRMAN 命令行设置参数执行

DMRMAN 命令行设置参数执行又可分为命令行指定脚本、命令行指定语句两种执行方式。DMRMAN 支持的参数如表 3.3.1 所示。

表3.3.1 DMRMAN参数
参数 含义 备注
CTLFILE 指定执行语句所在的文件路径,不能和 CTLSTMT 同时使用。脚本文件格式支持*.txt 可选参数
CTLSTMT 指定待执行语句,不能和 CTLFILE 同时使用。如:CTLSTMT="BACKUP DATABASE '/home/dmdbms/data/DAMENG/dm.ini'" 可选参数
DCR_INI 指定 dmdcr.ini 路径,用于 ASM 存储时访问 ASM 服务;若未指定,则认为不存在 ASM 存储。可单独使用,也可与其他参数配合使用。主要用于 DMDSC 环境 可选参数
DFS_INI 指定 dmdfs.ini 路径;若未指定且当前目录中 dmdfs.ini 存在,则使用当前目录中的 dmdfs.ini。可单独使用,也可与其他参数配合使用 可选参数
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 打印帮助信息 可选参数

命令行指定脚本执行,要求我们先创建一个包含 DMRMAN 命令的文件,然后设置 CTLFILE 参数,参数后面指定文件的路径。例如,创建一个名为 cmd_rman.txt 的文件,保存到/home/dm_cmd 目录下,文件中包含一行如下所示的 DMRMAN 命令:

BACKUP DATABASE'/opt/dmdbms/data/DAMENG/dm.ini';

设置 CTLFILE 参数启动 DMRMAN 工具,指定脚本文件中的命令将被执行:

./dmrman CTLFILE=/home/dm_cmd/cmd_rman.txt

命令执行完后 DMRMAN 工具会自动退出。

命令行执行语句执行,是 DMRMAN 工具设置 CTLSTMT 参数,参数后面执行需要执行的 DMRMAN 命令,使用方法如下所示:

./dmrman CTLSTMT="BACKUP DATABASE'/opt/dmdbms/data/DAMENG/dm.ini';"
注意

CTLFILE中存在多条语句或CTLSTMT中一次输入多条语句时,每条语句都必须以分号结尾;执行单条语句,语句结尾可以加分号也可以不加。CTLSTMT中,待执行语句外层双引号一定要加。执行完毕后工具自动退出。CTLFILE和CTLSTMT不能同时指定。若使用DMASM文件系统,可通过DCR_INI指定目标联机的ASM服务器。若使用DMTDD,可通过DFS_INI指定目标日志服务器。

3.3.2.3 DMRMAN 环境配置

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

  • 显示和清除现有参数的默认配置
  • 配置存储介质类型:DISK 或 TAPE
  • 配置跟踪日志文件
  • 配置备份集搜集目录
  • 配置归档日志搜集目录

语法如下:

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]

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:默认搜集备份的目录,可以设置为不存在但在系统中有效的路径。

ARCHIVEDIR :默认搜集归档的目录,可以设置为不存在但在系统中有效的路径。

ADD:添加默认备份集搜索目录或归档日志目录,若已经存在,则替换原来的。

DELETE:删除指定默认备份集搜索目录或者归档日志目录。

图例:

图例 01

sub_conf_stmt:

图例 01

使用说明:

  1. 设置的参数默认值仅在此 DMRMAN 实例存活期间有效。
  2. DMRMAN 命令中如果指定了相同的参数,会覆盖 CONFIGURE 的默认设置。

显示和清除所有默认配置项

使用 CONFIGURE 命令就可显示 DMRMAN 配置项的当前值。示例如下:

RMAN>CONFIGURE;

THE DMRMAN DEFAULT SETTING:

DEFAULT DEVICE:

MEDIA : DISK

DEFAULT TRACE :

FILE :

LEVEL : 1

DEFAULT BACKUP DIRECTORY:

TOTAL COUNT :0

DEFAULT ARCHIVE DIRECTORY:

TOTAL COUNT :0

RMAN>CONFIGURE CLEAR;

使用 CONFIGURE DEFAULT ... CLEAR 命令可恢复任意一个配置项到默认值。示例如下:

RMAN>CONFIGURE DEFAULT DEVICE CLEAR;

或使用 CONFIGURE CLEAR 命令恢复所有配置项到默认值。示例如下:

RMAN>CONFIGURE CLEAR;

配置存储介质类型:DISK 或 TAPE

备份时如果没指定备份介质类型参数,则会使用 CONFIGURE 中配置的默认介质类型。DMRMAN 默认配置的介质类型为 DISK,不需要特别指定。

修改介质类型默认配置的步骤如下:

  1. 启动 DMRMAN;
  2. 执行 CONFIGURE 命令查看介质类型当前的默认值;
RMAN>CONFIGURE;
  1. 执行 CONFIGURE DEFAULT DEVICE TYPE 修改默认值。
RMAN>CONFIGURE DEFAULT DEVICE TYPE TAPE PARMS 'command';

配置跟踪日志文件

跟踪日志文件记录了 SBT 接口的调用过程,用户通过查看日志可跟踪备份还原过程。DMRMAN 备份还原命令中不支持设置跟踪日志文件,只能用 CONFIGURE 命令配置,默认配置不记录跟踪日志。

配置跟踪日志文件步骤如下:

1)显示 TRACE 文件的默认配置;

RMAN>CONFIGURE DEFAULT TRACE;
  1. 配置默认 TRACE 文件;
RMAN>CONFIGURE DEFAULT TRACE FILE '/home/dm_trace/trace.log';
  1. 配置默认 TRACE 级别。
RMAN>CONFIGURE DEFAULT TRACE LEVEL 2;

其中,TRACE 文件和 TRACE 级别也可以同时设置:

RMAN>CONFIGURE DEFAULT TRACE FILE '/home/dm_trace/trace.log ' TRACE LEVEL 2;

配置备份集搜集目录

备份集搜索目录用于增量备份还原中搜索基备份。单个目录最大长度为 256 个字节,可配置的备份集搜索目录没有限制。如果不指定备份集搜集目录只会在库的默认备份目录和当前备份执行备份集目录的上级目录下搜索备份集。

配置备份集搜索目录步骤如下:

RMAN>CONFIGURE DEFAULT BACKUPDIR;

RMAN>CONFIGURE DEFAULT BACKUPDIR '/home/dm_bak1’,'/home/dm_bak2';

若要增加或删除部分备份集搜索目录,不需要对所有的目录重新进行配置,只要添加或删除指定的目录即可。

RMAN>CONFIGURE DEFAULT BACKUPDIR ADD '/home/dm_bak3';

RMAN>CONFIGURE DEFAULT BACKUPDIR DELETE '/home/dm_bak3';

配置归档日志搜集目录

归档日志搜索目录用于增量备份还原中搜索归档日志。单个目录最大长度为 256 个字节,可配置的归档日志搜索目录没有限制。

配置归档日志搜索目录步骤如下:

RMAN>CONFIGURE DEFAULT ARCHIVEDIR;

RMAN>CONFIGURE DEFAULT ARCHIVEDIR '/home/dm_arch1’,'/home/dm_arch2';

若要增加或删除部分归档日志搜索目录,不需要对所有的目录重新进行配置,只要添加或删除指定的目录即可。

RMAN>CONFIGURE DEFAULT ARCHIVEDIR ADD '/home/dm_arch3';

RMAN>CONFIGURE DEFAULT ARCHIVEDIR DELETE '/home/dm_arch3';

3.3.3 数据备份

本节介绍使用 DMRMAN 工具如何执行数据库和归档的备份操作。

本节内容主要包括:

  • 备份数据库
  • 备份归档

3.3.3.1 备份数据库

3.3.3.1.1 概述

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

RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini';

命令执行完后会在默认的备份路径下生成备份集目录,默认的备份路径为 dm.ini 中 BAK_PATH 的配置值,若未配置,则为 SYSTEM_PATH 下的 bak 目录。这是最简单的脱机数据库备份语句,如果要设置其他备份选项请参考下文的语法及使用说明。

语法如下:

BACKUP DATABASE '<INI文件路径>' [[[FULL][DDL_CLONE]] |INCREMENT [CUMULATIVE][WITH BACKUPDIR '<基备份搜索目录>'{,'<基备份搜索目录>'}]|[BASE ON BACKUPSET '<基备份集目录>']] 

[TO <备份名>] [BACKUPSET '<备份集路径>'][DEVICE TYPE <介质类型>[PARMS '<介质参数>'] [BACKUPINFO '<备份描述>'] [MAXPIECESIZE <备份片限制大小>] 

[IDENTIFIED BY <密码>|”<密码>” [WITH ENCRYPTION<TYPE>][ENCRYPT WITH <加密算法>]] 

[COMPRESSED [LEVEL <压缩级别>]][WITHOUT LOG] 

[TASK THREAD <线程数>][PARALLEL [<并行数>][READ SIZE <拆分块大小>]];

DATABASE:必选参数。指定备份源库的 INI 文件路径。

FULL:备份类型。FULL 表示完全备份,可不指定,DMRMAN 会默认为完全备份。

DDL_CLONE:数据库克隆。该参数只能用于完全备份中,表示仅拷贝所有的元数据不拷贝数据。如对于数据库中的表来说,只备份表的定义不备份表中数据。

INCREMENT:备份类型。INCREMENT 表示增量备份,若要执行增量备份必须指定该参数。

CUMULATIVE:用于增量备份中,指明为累积增量备份类型,若不指定则缺省为差异增量备份类型。

WITH BACKUPDIR:用于增量备份中,指定基备份的搜索目录,最大长度为 256 个字节。若不指定,自动在默认备份目录和当前备份目录下搜索基备份。如果基备份不在默认的备份目录或当前备份目录下,增量备份必须指定该参数。

BASE ON BACKUPSET:用于增量备份中,为增量备份指定基备份集路径。如果没有指定基备份集,则会自动搜索一个最近可用的备份集作为基备份集。

注意

增量备份时,DM不会在默认备份目录或当前备份目录的子目录中搜索基备份集,因此若基备份集在默认备份目录或当前备份目录的子目录中,则需要指定基备份的搜索目录或直接指定基备份集路径,否则将无法搜索到相应的基备份集,备份操作将会失败。

TO:指定生成备份名称。若未指定,系统随机生成,默认备份名格式为:DB_库名_备份类型_备份时间。其中,备份时间为开始备份时的系统时间。

BACKUPSET:指定当前备份集生成路径。若指定为相对路径,则在默认备份路径中生成备份集。若不指定,则在默认备份路径中按约定规则,生成默认备份集目录。库级备份默认备份集目录名生成规则:DB_库名_备份类型_备份时间,如 DB_DAMENG_FULL_20180518_143057_123456。表明该备份集为 2018 年 5 月 18 日 14 时 30 分 57 秒 123456 毫秒时生成的库名为 DAMENG 的数据库完全备份集。若库名超长使备份集目录完整名称长度大于 128 个字节将直接报错路径过长。

DEVICE TYPE:指存储备份集的介质类型,支持 DISK 和 TAPE,默认 DISK。

PARMS:只对介质类型为 TAPE 时有效。

BACKUPINFO:备份的描述信息。最大不超过 256 个字节。

MAXPIECESIZE:最大备份片文件大小上限,以 M 为单位,最小 32M,32 位系统最大 2G,64 位系统最大 128G。

IDENTIFIED BY:指定备份时的加密密码。密码长度为 9 到 48 个字节。密码可以用双引号括起来,这样可以避免一些特殊字符通不过语法检测。密码的设置规则遵行 ini 参数 pwd_policy 指定的口令策略。

WITH ENCRYPTION:指定加密类型,0 表示不加密,不对备份文件进行加密处理;1 表示简单加密,对备份文件设置口令,但文件内容仍以明文方式存储;2 表示完全数据加密,对备份文件进行完全的加密,备份文件以密文方式存储。当不指定 WITH ENCRYPTION 子句时,采用简单加密。

ENCRYPT WITH:指定加密算法。缺省情况下,算法为 AES256_CFB。

COMPRESSED:是否对备份数据进行压缩处理。LEVEL 表示压缩等级,取值范围 0~9:0 表示不压缩;1 表示 1 级压缩;9 表示 9 级压缩。压缩级别越高,压缩速度越慢,但压缩比越高。若指定 COMPRESSED,但未指定 LEVEL,则压缩等级默认 1;若未指定 COMPRESSED,则默认不进行压缩处理。

WITHOUT LOG:脱机数据库备份是否备份日志。如果使用,则表示不备份,否则表示备份。如果使用了 WITHOUT LOG 参数,则使用 DMRMAN 工具还原时,必须指定 WITH ARCHIVEDIR 参数。

TASK THREAD:备份过程中数据处理过程线程的个数,取值范围 0~64,默认为 4。若指定为 0,则调整为 1;若指定大于当前系统主机核数,则调整为当前主机核数。线程数(TASK THREAD)*并行数(PARALLEL)不得超过 512。

PARALLEL:指定并行备份的并行数和拆分块大小。

图例:

图例 01

图例 01

使用说明:

  1. 备份成功后会在<备份集目录>或者默认备份目录下生成备份集。备份集中包括一个备份元数据文件,后缀.meta,以及一个或多个备份片文件,后缀.bak。
  2. 对于并行备份的备份集,备份集中还包括其他子备份集目录,但每个子备份集目录中也都包含一个元数据文件,以及 0 个或多个备份片文件。
  3. DDL_CLONE 库备份集不能作为增量备份的基备份,仅能用于库级还原。
  4. 脱机备份的数据库可以是正常退出的数据库,也可以是故障退出的数据库。若是故障退出的数据库,则备份前,需先进行归档修复。
  5. 在执行脱机数据库备份过程中,如果报错归档不完整,则需要检查库是不是异常退出。如果库是异常退出,则需要先进行归档修复。
  6. STANDBY 模式下的库不支持脱机备份。
  7. 备份还原回来的库,服务器没有经过重启的库,不支持脱机备份。
  8. STANDBY 模式切换为 PRIMARY 模式后,服务器没有经过重启的库,不支持脱机备份。
  9. 只有建库时指定 RLOG_GEN_FOR_HUGE 参数为 1,备份数据库时才会备份 HUGE 表数据。
3.3.3.1.2 备份数据库

本节主要描述使用 DMRMAN 如何执行基本的脱机数据库备份及实施一些备份策略,包括:

  • 设置备份选项
  • 创建完全备份
  • 创建增量备份

设置备份选项

备份命令如果仅指定了必选参数如“BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'”,那么 DMRMAN 会根据配置的环境及内置的参数默认值自动指定备份介质类型、备份路径、备份片大小等参数。用户备份时也可以指定这些参数来覆盖默认值,常见的备份选项有设置备份集路径、指定备份名、限制备份片大小、添加描述信息、并行备份等。DMRMAN 脱机备份数据库的语法与使用 DIsql 联机备份类似。

创建完全备份

执行数据库备份要求数据库处于脱机状态。若是正常退出的数据库,则脱机备份前不需要配置归档;若是故障退出的数据库,则备份前,需先进行归档修复。以正常退出的数据库为例,一个完整的创建脱机数据库备份的步骤如下:

  1. 保证数据库处于脱机状态;
  2. 启动 DMRMAN 命令行工具;
  3. DMRMAN 中输入以下命令:
RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FULL BACKUPSET '/home/dm_bak/db_full_bak_01';

命令中的 FULL 参数表示执行的备份为完全备份,也可以不指定该参数,DMRMAN 默认执行的备份类型为完全备份。

创建增量备份

增量备份指基于指定的库的某个备份(完全备份或者增量备份),备份自该备份以来所有发生修改了的数据页。脱机增量备份要求两次备份之间数据库必须有操作,否则备份会报错。

增量备份示例如下:

1) 保证数据库处于脱机状态;

2) 启动 DMRMAN 命令行工具;

3) DMRMAN 中输入以下命令:

RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' INCREMENT WITH BACKUPDIR
'/home/dm_bak'BACKUPSET '/home/dm_bak/db_increment_bak_02';

命令中的 INCREMENT 参数表示执行的备份为增量备份,增量备份时该参数不可省略。如果增量备份的基备份不在默认备份目录中,则必须指定 WITH BACKUPDIR 参数用于搜索基备份集,或者使用 CONFIGURE DEFAULT BACKUPDIR 命令配置默认的基备份集搜索目录。

DSC 环境下的脱机库备份与联机库备份存在相同的使用限制。由于脱机备份无法推进检查点,当不满足该约束时,备份将失败。

3.3.3.2 备份归档

3.3.3.2.1 概述

在 DMRMAN 工具中使用 BACKUP 命令可以备份库的归档。使用 DMRMAN 备份归档需要设置归档,否则会报错。关闭数据库实例,在 DMRMAN 中输入以下命令即可备份归档:

RMAN>BACKUP ARCHIVE LOG DATABASE '/opt/dmdbms/data/DAMENG/dm.ini';

命令执行完后会在默认的备份路径下生成备份集目录,默认的备份路径为 dm.ini 中 BAK_PATH 的配置值,若未配置,则使用 SYSTEM_PATH 下的 bak 目录。这是最简单的脱机归档备份语句,如果要设置其他备份选项请参考下文的语法及使用说明。

语法如下:

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 <拆分块大小>]]

<notBackedUpSpec> 请参考3.2.2.4.1概述

ALL:备份所有的归档。若不指定,则默认为 ALL。

FROM LSN ,UNTIL LSN:备份的起始和截止 lsn。

FROM TIME:指定备份的开始时间点。例如,'2018-12-10'。

UNTIL TIME:指定备份的截止时间点。

BETWEEN ...AND ...:指定备份的区间。指定区间后,只会备份指定区间内的归档文件。

<notBackedUpSpec>:搜索过滤。

DELETE INPUT:用于指定备份完成后,是否删除归档操作。

DATABASE:必选参数。指定备份源库的 INI 文件路径。

TO: 指定生成备份名称。若未指定,系统随机生成,默认备份名格式为:ARCH_备份时间。其中,备份时间为开始备份的系统时间。

BACKUPSET: 指定当前备份集生成目录。若指定为相对路径,则在默认备份路径中生成备份集。若不指定具体备份集路径,则在默认备份路径下,以约定归档备份集命名规则生成默认的归档备份集目录。归档备份默认备份集目录名生成规则:ARCH_LOG_时间,如 ARCH_LOG_20180518_143057_123456。表明该备份集为 2018 年 5 月 18 日 14 时 30 分 57 秒 123456 毫秒时生成的归档备份集。

DEVICE TYPE:指存储备份集的介质类型,支持 DISK 和 TAPE,默认 DISK。

PARMS:只对介质类型为 TAPE 时有效。

BACKUPINFO:备份的描述信息。最大不超过 256 个字节。

MAXPIECESIZE:最大备份片文件大小上限,以 M 为单位,最小 32M,32 位系统最大 2G,64 位系统最大 128G。

IDENTIFIED BY:指定备份时的加密密码。密码可以用双引号括起来,这样可以避免一些特殊字符通不过语法检测。密码的设置规则遵行 ini 参数 pwd_policy 指定的口令策略。

WITH ENCRYPTION:指定加密类型,0 表示不加密,不对备份文件进行加密处理;1 表示简单加密,对备份文件设置口令,但文件内容仍以明文方式存储;2 表示完全数据加密,对备份文件进行完全的加密,备份文件以密文方式存储。当不指定 WITH ENCRYPTION 子句时,采用简单加密。

ENCRYPT WITH:指定加密算法。缺省情况下,算法为 AES256_CFB。

COMPRESSED:是否对备份数据进行压缩处理。LEVEL 表示压缩等级,取值范围 0~9:0 表示不压缩;1 表示 1 级压缩;9 表示 9 级压缩。压缩级别越高,压缩速度越慢,但压缩比越高。若指定 COMPRESSED,但未指定 LEVEL,则压缩等级默认 1;若未指定 COMPRESSED,则默认不进行压缩处理。

TASK THREAD:备份过程中数据处理过程线程的个数,取值范围 0~64,默认为 4。若指定为 0,则调整为 1;若指定超过当前系统主机核数,则调整为主机核数。线程数(TASK THREAD)*并行数(PARALLEL)不得超过 512。

PARALLEL:指定并行备份的并行数和拆分块大小。

图例:

图例 01

< 备份集子句 >:

图例 01

图例 01

3.3.3.2.2 备份归档

本节主要描述使用 DMRMAN 如何执行基本的脱机归档备份及实施一些备份策略,包括:

  • 设置备份选项
  • 创建归档备份
  • 创建设置条件的归档备份

设置备份选项

备份命令如果仅指定了必选参数如“BACKUP ARCHIVE LOG DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'”,那么 DMRMAN 会根据配置的环境及内置的参数默认值自动指定备份介质类型、备份路径、备份片大小等参数。用户备份时也可以指定这些参数来覆盖默认值,常见的备份选项有设置备份集路径、指定备份名、限制备份片大小、添加描述信息、并行备份等。DMRMAN 脱机备份归档的语法与使用 DIsql 联机备份类似。

创建归档备份

执行归档备份要求数据库处于脱机状态。与联机归档备份一样,脱机归档备份需要配置归档。一个完整的创建脱机归档备份的示例如下:

  1. 配置归档;
  2. 保证数据库处于脱机状态;
  3. 启动 DMRMAN 命令行工具;
  4. DMRMAN 中输入以下命令:
RMAN>BACKUP ARCHIVE LOG ALL DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET '/home/dm_bak/arch_all_bak_01';

命令中的 ALL 参数表示执行的备份为备份所有的归档,也可以不指定该参数,DMRMAN 默认执行的备份类型为 ALL 类型归档备份。

创建设置条件的归档备份

设置条件的归档备份指通过设置 LSN 或者时间点,控制需要备份归档的范围。脱机设置条件归档备份的示例如下:

  1. 配置归档;
  2. 保证数据库处于脱机状态;
  3. 启动 DMRMAN 命令行工具;
  4. DMRMAN 中输入以下命令:
RMAN>BACKUP ARCHIVE LOG LSN BETWEEN 50000 AND 120000 DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET '/home/dm_bak/arch_lsn_bak_02';

命令中的 LSN BETEEWN start AND end 表示备份 LSN 值在 start 与 end 之间的归档,也可以设置 FROM LSN(TIME)或 UNTIL LSN(TIME)。

3.3.3.3 数据备份高级主题

本节介绍使用 DMRMAN 工具执行高级的数据库脱机备份过程,主要内容包括:

  • 加密备份
  • 设置跟踪日志文件

加密备份

DMRMAN 同 DIsql 工具一样可使用加密的方式备份数据库,没有权限的用户无法访问加密的备份集。

DMRMAN 备份命令中通过指定 IDENTIFIED BY ... WITH ENCRYPTION ... ENCRYPT WITH ... 命令执行加密备份。其中,加密备份相关参数的含义与联机备份中的含义相同。

加密备份过程中参数 IDENTIFIED BY 必须指定,参数 WITH ENCRYPTION 和参数 ENCRYPT WITH 可不指定。加密备份时若不指定 WITH ENCRYPTION 参数,则该参数默认为 1,若不指定 ENCRYPT WITH 参数,则该参数默认值为 AES256_CFB。

例如,以下两种加密备份命令都是合法的:

RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET
'/home/dm_bak/db_bak_for_encrypt_01' IDENTIFIED BY "cdb546789";

RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET
'/home/dm_bak/db_bak_for_encrypt_02' IDENTIFIED BY "cdb546789" ENCRYPT WITH RC4;

若指定了加密密码,但加密类型 WITH ENCRYPTION 参数指定为 0,则为非加密备份,如下所示:

RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET
'/home/dm_bak/db_bak_for_encrypt_03' IDENTIFIED BY "cdb546789" WITH ENCRYPTION 0;

下面以数据库完全备份为例,创建加密密码为“cdb546789”,加密算法为“rc4”的复杂加密类型的数据库加密备份,完整步骤如下:

  1. 保证数据库处于关闭状态;
  2. 备份数据库。启动 DMRMAN 工具并输入以下命令:
RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET
'/home/dm_bak/db_bak_for_encrypt_04' IDENTIFIED BY "cdb546789" WITH ENCRYPTION 2 ENCRYPT WITH RC4;

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

设置跟踪日志文件

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;

指定参数 TRACE FILE 但 TRACE LEVEL 值设置为 1 即不启用 TRACE 功能,则会生成 TRACE 文件,但不会写入 TRACE 信息。如下所示:

RMAN>CONFIGURE DEFAULT TRACE FILE'/home/dm_log/db_trace.log' TRACE LEVEL 1;

TRACE LEVEL 值设置为 2 即启用 TRACE 功能,但若 TRACE FILE 没有指定,则系统默认在执行码路径的 log 目录下生成 DM_SBTTRACE_年月.log 文件。如下所示:

RMAN> CONFIGURE DEFAULT TRACE LEVEL 2;

若 TRACE FILE 使用相对路径,日志文件则生成在执行码同级目录下。

为数据库脱机备份设置跟踪日志文件的操作步骤如下:

  1. 保证数据库处于关闭状态;
  2. 使用 CONFIGURE 命令配置生成跟踪日志文件:
RMAN>CONFIGURE DEFAULT TRACE FILE '/home/dm_trace/trace.log' TRACE LEVEL 2;
  1. 备份数据库。启动 DMRMAN 工具输入以下命令:
RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET '/home/dm_bak/db_bak_for_trace_01' ;

查看/home/dm_trace/trace.log 文件即可跟踪本次备份的 SBT 接口调用过程。

如果指定的 TRACE 文件已存在,不会覆盖已存在的文件而是在已有文件基础上继续记录日志。

3.3.4 管理备份

本章节主要介绍如何使用 DMRMAN 工具管理数据库备份、表空间备份及表备份。本节内容主要包括:

  • 概述
  • 备份集查看
  • 备份集校验
  • 备份集删除
  • 备份集导出
  • 备份集映射文件导出

3.3.4.1 概述

管理备份一个重要的目的是删除不再需要的备份。DMRMAN 工具提供 SHOW、CHECK、REMOVE、LOAD 等命令分别用来查看、校验、删除和导出备份集。下文将对这些命令进行详细介绍。若命令中指定了 dm.ini,则要求 dm.ini 配置正确。

3.3.4.2 备份集查看

3.3.4.2.1 概述

DMRMAN 中使用 SHOW 命令可以查看备份集的信息,包括:

  • 备份集的数据库信息
  • 备份集的元信息
  • 备份集中文件信息(如备份数据文件 DBF 和备份片文件)
  • 备份集中表信息(仅对表备份集有效)

若指定具体备份集目录,则会生成相应的备份集链表信息。

语法如下:

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 个字节。在 SHOW BACKUPSET 语句中,WITH BACKUPDIR 指定基备份集搜索目录,即当 BACKUPSET 指定的备份为增量备份时,WITH BACKUPDIR 用于搜索该增量备份的基备份集。在 SHOW BACKUPSETS 语句中,WITH BACKUPDIR 指定备份集搜索目录,即批量查看该目录下符合条件的所有备份集信息。

<info_type_stmt>:指定显示备份集信息内容,可以组合指定,不同信息类型之间用逗号间隔,若未指定该项,则显示全部。信息类型包括:

  • DB:显示备份集的数据库信息;
  • META:显示备份集的元信息;
  • FILE:显示备份集中文件信息,如备份数据文件 DBF 和备份片文件;
  • TABLE:显示备份集中表信息,仅对表备份集有效。

<use_db_magic_stmt>:SHOW BACKUPSETS 可以指定仅显示指定 DB_MAGIC 即指定数据库的备份集信息。

<to_file_stmt>:指定备份集信息输出的目标文件路径,若不指定,仅控制台打印。文件格式有两种类型,TXT 和 XML 格式,默认是 TXT 格式。不支持输出到 DMASM 文件系统中。指定的文件不能为已经存在的文件,否则报错。

图例:

图例 01

图例 01

<device_type_stmt>:

图例 01

<database_bakdir_lst_stmt>:

图例 01

<info_type_stmt>:

图例 01

<use_db_magic_stmt>:

图例 01

<to_file_stmt>:

图例 01

3.3.4.2.2 备份信息查看

SHOW 命令支持查看单个备份集信息也支持批量查看多个备份集的信息。本节主要举例说明如何执行简单的常用的查看备份集信息操作,包括:

  • 查看单个备份集信息
  • 批量显示备份集信息
  • 查看指定数据库所有备份集的信息
  • 指定显示部分备份集信息
  • 以 xml 格式输出备份信息到文件

查看单个备份集信息

SHOW BACKUPSET...命令用于查看单个备份集信息。当仅需要查看某个特定备份集信息时可以使用此命令。执行步骤如下:

RMAN> show backupset'/home/dm_bak/DB_FULL_DAMENG_20190522_133248_000770'

show backupset '/home/dm_bak/DB_FULL_DAMENG_20190522_133248_000770'

total 0 packages processed...

<backupset [DEVICE TYPE:DISK, BACKUP_PATH:
/home/dm_bak/DB_FULL_DAMENG_20190522_133248_000770] info start ..........>

<DB INFO>

system path: /home/DAMENG

pmnt_magic: 1018589430

src_db_magic: 1408921336

db_magic: 1408921336

dsc node: 1

sys mode: 0

page check: 0

rlog encrypt: 0

external cipher[id/name]: 0/

external hash[id/name]: 0/

length in char: 0

use new hash: 1

page size: 8KB

extent size: 16

case sensitive: 1

log page size: 512B

unicode_flag/charset: 0

data version: 0x7000A

sys version: V8.1.0.160-Build(2019.05.21-107084)ENT

enable policy: 0

archive flag: 1

blank_pad_mode: 0

crc_check: TRUE

<META INFO>

backupset sig: BA

backupset version: 0x4009

database name: DAMENG

backup name: DB_FULL_DAMENG_20190522_133248_000770

backupset description:

n_magic: 0x68305D27

parent n_magic: 0xFFFFFFFF

meta file size : 86528

compressed level: 0

encrypt type: 0

parallel num: 1

backup range: database

mpp_timestamp: 1558503168

with_huge: FALSE

backupset_type: NORMAL

mpp_flag: FALSE

backup level: online

backup type: full

without log: FALSE

end_lsn: 1274185

max_trxid: 1269276

base begin_lsn: -1

base end_lsn: -1

base n_magic: 0xFFFFFFFF

base name:

base backupset:

backup time: 2019-05-22 13:32:55

min exec ver: 0x0701060C

min dct ver: 4

pkg size: 0x02000000

<EP INFO>

EP[0]:

begin_pkg_seq: 6132

begin_lsn: 1268123

end_pkg_seq: 6191

end_lsn: 1274185

<FILE INFO>

backupset directory: /home/dm_bak/DB_FULL_DAMENG_20190522_133248_000770

backupset name: DB_FULL_DAMENG_20190522_133248_000770

backup data file num: 6

backup piece num: 2

backup huge file num: 0

<backup_piece_list>

$file_seq |$size(KB) |$pos_desc |$content_type

0 |42410 |DB_FULL_DAMENG_20190522_133248_000770.bak |DATA

1 |740 |DB_FULL_DAMENG_20190522_133248_000770_1.bak |LOG

<data_file_list>

$file_seq |$group_id |$group_name |$file_id |$file_path |$mirror_path
|$file_len

1 |0 |SYSTEM |0 |/home/DAMENG/SYSTEM.DBF | |201326592

2 |0 |SYSTEM |1 |F:\tmp\db_dev2\DAMENG\SYSTEM_01.dbf| |104857600

3 |1 |ROLL |0 |/home/DAMENG/ROLL.DBF | |1073741824

4 |1 |ROLL |1 |/home/DAMENG/ROLL_01.dbf| |104857600

5 |4 |MAIN |0 |/home/DAMENG/MAIN.DBF | |231735296

<arch_file_list>

$file_seq |$dsc_seq |$file_len |$begin_seqno |$begin_lsn |$end_seqno
|$end_lsn

6 |0 |753152 |6132 |1268123 |6191 |1274185

<backupset [DEVICE TYPE:DISK, BACKUP_PATH:
/home/dm_bak/DB_FULL_DAMENG_20190522_133248_000770] info end .>

show backupsets successfully.

time used: 249.062(ms)

显示的备份集信息分为三类,依次是元数据信息(META INFO)、文件信息(FILE INFO)和数据库信息(DB INFO)。用户可根据自身需要只显示部分备份集信息,本节下文中会有介绍。

批量显示备份集信息

SHOW BACKUPSETS...命令用于批量显示指定搜索目录下的备份集信息。如需要查看的多个备份集不在同一个目录下,可通过 WITH BACKUPDIR 参数指定多个备份集搜索目录,同时查看所有的备份集。操作如下:

RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'

BACKUPSET'/home/dm_bak1/db_bak_for_show_01';

RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'

BACKUPSET'/home/dm_bak2/db_bak_for_show_01';

RMAN>SHOW BACKUPSETS WITH BACKUPDIR '/home/dm_bak1','/home/dm_bak2';

查看指定数据库所有备份集的信息

如果指定的备份搜索目录下包含不同数据库的备份集,而我们只想查看某个特定数据库的所有备份集信息,此时可以使用 SHOW BACKUPSETS ... USE DB_MAGIC ... 命令实现。具体操作如下:

1) 备份不同数据库至同一目录下;

RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'

BACKUPSET'/home/dm_bak/db_bak_for_show_db_magic_01';

RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG2/dm.ini' BACKUPSET'/home/dm_bak/
db_bak_for_show_db_magic_02';

2) 查看指定数据库备份集的信息,获取 DB_MAGIC 信息;

RMAN>SHOW BACKUPSET'/home/dm_bak/db_bak_for_show_db_magic_01';

通过查看备份集信息可知,数据库/opt/dmdbms/data/DAMENG 的 DB_MAGIC 值为 1447060265。

3) 查看指定目录下数据库/opt/dmdbms/data/DAMENG 的所有备份集信息。

RMAN>SHOW BACKUPSETS WITH BACKUPDIR '/home/dm_bak' USE DB_MAGIC 1447060265;

指定显示部分备份集信息

SHOW BACKUPSET ... INFO ... 命令可以显示部分备份集信息,例如 SHOW BACKUPSET...INFO META 命令可以查看备份集的元数据信息。操作步骤如下:

RMAN> show backupset'/home/dm_bak/DB_FULL_DAMENG_20190522_133248_000770' info meta

show backupset '/home/dm_bak/DB_FULL_DAMENG_20190522_133248_000770'

total 0 packages processed...

<backupset [DEVICE TYPE:DISK, BACKUP_PATH: /home/dm_bak/DB_FULL_DAMENG_20190522_133248_000770] info start ..........>

<META INFO>

backupset sig: BA

backupset version: 0x4009

database name: DAMENG

backup name: DB_FULL_DAMENG_20190522_133248_000770

backupset description:

n_magic: 0x68305D27

parent n_magic: 0xFFFFFFFF

meta file size : 86528

compressed level: 0

encrypt type: 0

parallel num: 1

backup range: database

mpp_timestamp: 1558503168

with_huge: FALSE

backupset_type: NORMAL

mpp_flag: FALSE

backup level: online

backup type: full

without log: FALSE

end_lsn: 1274185

max_trxid: 1269276

base begin_lsn: -1

base end_lsn: -1

base n_magic: 0xFFFFFFFF

base name:

base backupset:

backup time: 2019-05-22 13:32:55

min exec ver: 0x0701060C

min dct ver: 4

pkg size: 0x02000000

<EP INFO>

EP[0]:

begin_pkg_seq: 6132

begin_lsn: 1268123

end_pkg_seq: 6191

end_lsn: 1274185

<backupset [DEVICE TYPE:DISK, BACKUP_PATH:
/home/dm_bak/DB_FULL_DAMENG_20190522_133248_000770] info end .>

show backupsets successfully.

time used: 249.062(ms)

这里获取的是单个备份集的元数据信息,也可以使用 SHOW BACKUPSETS...INFO META 命令批量获取元数据信息。同样地,我们可以使用类似的命令指定获取备份集的数据库信息、文件信息和表信息,或这些信息的任意组合。

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

DMRMAN 可以将显示的备份集信息输出到文件,目前支持的格式包括 TXT 和 XML,默认为 TXT 文件格式。使用 SHOW BACKUPSETS...TO 'file_path' FORMAT XML 命令可将备份信息以 XML 格式显示并输出到文件,如下所示:

RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET'/home/dm_bak1/db_bak_for_xml_01';

RMAN>SHOW BACKUPSET'/home/dm_bak1/db_bak_for_xml_01' TO
'/home/dm_info/bkp_info.txt' FORMAT XML;

3.3.4.3 备份集校验

DMRMAN 中使用 CHECK 命令对备份集进行校验,校验备份集是否存在及合法。

语法如下:

CHECK BACKUPSET '<备份集目录>'

[DEVICE TYPE <介质类型> [PARMS '<介质参数>']][DATABASE '<INI_PATH>'];

BACKUPSET:指定目标校验备份集目录。

DEVICE TYPE:指存储备份集的介质类型,支持 DISK 和 TAPE,默认 DISK。

PARMS:只对介质类型为 TAPE 时有效。

DATABASE:数据库 dm.ini 文件路径,若指定,则该数据库的默认备份目录将作为备份集搜索目录之一。

图例:

图例 01

校验特定的备份集

CHECK BACKUPSET...命令用于校验特定备份集,每次只能检验一个备份集。

RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET'/home/dm_bak/db_bak_for_check_01';

RMAN>CHECK BACKUPSET '/home/dm_bak/db_bak_for_check_01';

若备份集在默认备份路径下,可指定相对路径校验备份集,如下所示:

RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET'db_bak_for_check_02';

RMAN>CHECK BACKUPSET 'db_bak_for_check_02' DATABASE '/opt/dmdbms/data/DAMENG/dm.ini';

3.3.4.4 备份集删除

备份集删除是备份管理的主要功能,本节主要对如何删除备份进行描述。内容包括:

  • 概述
  • 删除备份集
3.3.4.4.1 概述

DMRMAN 中使用 REMOVE 命令删除备份集,可删除单个备份集,也可批量删除备份集。单个备份集删除时并行备份中的子备份集不允许单独删除;在指定备份集搜集目录中,发现存在引用待删除备份集作为基备份的需要执行级联删除,默认报错。批量删除备份集时,跳过收集到的单独的子备份集。

语法如下:

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:指定待删除的备份集目录。

DEVICE TYPE:指存储备份集的介质类型,支持 DISK 和 TAPE,默认 DISK。

注意

目前DM的介质管理不支持TAPE类型介质的备份集删除,若使用支持此操作的第三方介质管理,则可指定 DEVICE TYPE TAPE子句。

PARMS:只对介质类型为 TAPE 时有效。

DATABASE:指定数据库 dm.ini 文件路径,若指定,则该数据库的默认备份目录作为备份集搜索目录之一。

WITH BACKUPDIR:备份集搜索目录,用于搜索指定目录下的所有备份集。

CASCADE:当目标备份集已经被其他增量备份引用为基备份集,默认不允许删除,若指定 CASCADE,则递归删除所有引用的增量备份。

DATABASE|TABLESPACE|TABLE|ARCHIVELOG|ARCHIVE LOG:指定待删除备份集的类型,分别为库级备份、表空间级备份、表级备份以及归档级备份,其中 ARCHIVELOG 和 ARCHIVE LOG 等价。若不指定备份集类型,则全部删除。指定 TABLESPACE 时,若指定目标表空间名,则仅会删除满足条件的指定表空间名称的表空间备份集,否则,删除所有满足条件的表空间备份集。指定 TABLE 时,若指定目标表名,则仅会删除满足条件的指定表名的表备份集,否则,删除所有满足条件的表备份集。

UNTIL TIME:删除备份集生成的最大时间,即删除指定时间之前的备份集,若未指定,则删除所有备份集。

BEFORE:删除距离当前时间前 n_day 天产生的备份集;n_day 取值范围 0~365,单位:天。

图例:

图例 01

图例 01

<backupset_type>:

图例 01

3.3.4.4.2 删除备份集

本节举例说明如何使用 DMRMAN 的 REMOVE 命令删除备份集,主要内容包括:

  • 删除特定的备份集
  • 批量删除所有备份集
  • 批量删除指定时间之前的备份集

删除特定的备份集

使用 REMOVE BACKUPSET ... 命令可删除特定备份集,每次只能删除一个备份集。若删除备份集已经被引用为其他备份集的基备份且未指定 CASCADE,则报错。

RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET'/home/dm_bak/db_bak_for_remove_01';

RMAN>REMOVE BACKUPSET '/home/dm_bak/db_bak_for_remove_01';

如果备份集在数据库默认备份目录下还可使用以下方式删除备份集:

RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET'db_bak_for_remove_01';

RMAN>REMOVE BACKUPSET 'db_bak_for_remove_01' DATABASE '/opt/dmdbms/data/DAMENG/dm.ini';

如果待删除备份集为其他增量备份的基备份,且待删除备份集和增量备份都在数据库默认备份目录下还可使用以下方式删除备份集:

RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET'db_bak_for_remove_01';

--增量备份之前,启动数据库,以便成功生成增量备份

RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' INCREMENT BACKUPSET'db_bak_for_remove_01_incr';

RMAN>REMOVE BACKUPSET 'db_bak_for_remove_01' DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' CASCADE;

批量删除所有备份集

使用 REMOVE ... BACKUPSETS ... 命令可批量删除备份集。批量删除可选择备份集的备份类型,备份类型包括数据库备份、表空间备份、表备份以及归档备份,不指定备份类型则全部删除。下面示例为删除/home/dm_bak 目录下的所有备份集,可以是联机生成的备份集,也可以是脱机工具 DMRMAN 生成的备份集。

RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET'/home/dm_bak/db_bak_for_remove_02';

RMAN>REMOVE BACKUPSETS WITH BACKUPDIR '/home/dm_bak';

批量删除指定时间之前的备份集

REMOVE ... BACKUPSETS ... UNTIL TIME 命令用来批量删除指定时间之前的备份集。通常情况下,用户并不想删除指定目录下所有的备份集,这时可以选择只删除指定时间之前的备份集。如何确定删除备份的截止时间点,需要结合用户的备份计划合理指定。若用户每周做一次完全备份,每天进行增量备份,那么删除的时间可指定为 7 天前的某个特定时间。假设今天的日期为 2019-6-8,要删除 7 天前/home/dm_bak 目录下的所有备份在 DMRMAN 中输入以下命令:

RMAN>REMOVE BACKUPSETS WITH BACKUPDIR '/home/dm_bak' UNTIL TIME '2019-6-1 00:00:00';

3.3.4.5 备份集导出

备份集导出是备份管理的主要功能,本节主要对如何导出备份集进行描述。内容包括:

  • 概述
  • 导出备份集
3.3.4.5.1 概述

DMRMAN 中使用 LOAD 命令导出备份集。

语法如下:

LOAD BACKUPSETS FROM <device_type_stmt> [WITH BACKUPDIR '<备份集搜索目录>'{,'<备份集搜索目录>'}]TO BACKUPDIR '<备份集存放目录>';

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

DEVICE TYPE:指存储备份集的介质类型,包括 DISK 和 TAPE,目前只支持 TAPE。

PARMS:只对介质类型为 TAPE 时有效。

WITH BACKUPDIR:备份集搜索目录,用于搜索指定目录下的所有备份集。

TO BACKUPDIR:指从 TAPE 上导出的备份集 meta 文件存放到本地磁盘的目标目录,要求为空或不存在。

图例:

图例 01

3.3.4.5.2 导出备份集

本节举例说明如何使用 DMRMAN 的 LOAD 命令导出磁带上的备份集。

例:导出磁带/dev/nst0 上所有备份集的 meta 文件到目录/mnt/hgfs/dmsrc/bak_ dir 中。直接输入导出语句将报错,如下所示:

RMAN>LOAD BACKUPSETS FROM DEVICE TYPE TAPE TO BACKUPDIR '/mnt/hgfs/dmsrc/bak_dir';

LOAD BACKUPSETS FROM DEVICE TYPE TAPE TO BACKUPDIR '/mnt/hgfs/dmsrc/bak_dir';

load backupsets failed.error code:-10000

[-10000]:[错误码:-20022]磁带打开失败

退出 dmrman,设置环境变量 TAPE,值为/dev/nst0:

[root@192 debug]## export TAPE=/dev/nst0

[root@192 debug]##echo $TAPE

/dev/nst0

启动 dmrman,再次执行:

[root@192 debug]## ./dmrman

dmrman V8.1.0.166-Build(2019.06.10-107924)ENT

RMAN>LOAD BACKUPSETS FROM DEVICE TYPE TAPE TO BACKUPDIR '/mnt/hgfs/dmsrc/bak_dir';

LOAD BACKUPSETS FROM DEVICE TYPE TAPE TO BACKUPDIR '/mnt/hgfs/dmsrc/bak_dir';

load meta file [SBT_TEST_T-20140909192629000000-4966] to path [/mnt/hgfs/dmsrc/bak_dir/0/0.meta]...

load meta file [SBT_TEST_T-20140909192629000000-4966] to path
[/mnt/hgfs/dmsrc/bak_dir/0/0.meta]...success

load meta file [SBT_TEST_T2-20140909192746000000-9983] to path
[/mnt/hgfs/dmsrc/bak_dir/1/1.meta]...

load meta file [SBT_TEST_T2-20140909192746000000-9983] to path
[/mnt/hgfs/dmsrc/bak_dir/1/1.meta]...success

load backupsets successfully.

退出 dmrman,查看本地磁盘目录/mnt/hgfs/dmsrc/bak_dir:

[root@192 debug]## ls -1 /mnt/hgfs/dmsrc/bak_dir

total 0

drwxrwxrwx 1 root root 0 Sep 11 00:23 0

drwxrwxrwx 1 root root 0 Sep 11 00:23 1

[root@192 debug]## ls -1 /mnt/hgfs/dmsrc/bak_dir/0

total 12

-rwxrwxrwx 1 root root 24576 Sep 11 00:23 0.meta

[root@192 debug]## ls -1 /mnt/hgfs/dmsrc/bak_dir/1

total 12

-rwxrwxrwx 1 root root 24576 Sep 11 00:23 1.meta

3.3.4.6 备份集映射文件导出

备份集映射文件,又称为 mapped file。备份集映射文件导出,是备份管理的主要功能,是将备份集中各数据文件的原始路径或者调整后的路径生成到一个本地文件中,可通过关键字 MAPPED FILE 应用于表空间和库的还原操作中。本节主要对如何将备份集中数据文件路径导出到本地进行描述。内容包括:

  • 概述
  • 导出备份集映射文件
3.3.4.6.1 概述

DMRMAN 中使用 DUMP 命令导出映射文件。不支持导出到 DMASM 文件系统中。

语法如下:

DUMP BACKUPSET '<备份集目录>'

[<device_type_stmt>]

[DATABASE '<ini_path>' | TO '<system_dir>']

MAPPED FILE '<映射文件路径>';

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

BACKUPSET: 待导出映射文件的目标备份集,仅支持库级和表空间级备份。

DEVICE TYPE:指存储备份集的介质类型,包括 DISK 和 TAPE,默认为 DISK。

PARMS:只对介质类型为 TAPE 时有效。

DATABASE: 备份集还原到目标库的 dm.ini 路径。若指定,则根据 dm.ini 对应库的系统目录调整数据文件路径;若不指定,则保持备份集中数据文件的原始路径。

TO: 备份集还原到目标库的 system.dbf 数据文件路径,将其作为数据库系统目录处理。

注意

数据文件路径指定ini_path或者system_dir调整策略:若指定ini_path,则取出配置中system_path作为数据库系统目录,若指定system_dir,则直接作为数据库系统目录。对于库备份集,与2.3.1.1库还原中数据库文件路径构造策略描述一致。对于表空间备份集仅支持原库还原,若指定ini_path或者system_dir,则认为需要构造,构造策略与库备份集中数据文件路径构造策略一致。

MAPPED FILE:输出到本地的目标映射文件路径。用户指定的文件不能为已经存在的文件,否则报错。文件生成之后,允许手动调整数据文件路径到其他路径,真正使用映射文件时,会再次校验。不支持导出到 DMASM 文件系统中。

图例:

图例 01

3.3.4.6.2 导出备份集映射文件

本节举例说明如何使用 DMRMAN 的 DUMP 命令导出备份集数据文件路径到映射文件,主要内容包括:

  • 导出原始路径
  • 导出指定 ini_path 调整后的路径

导出原始路径

导出备份集中数据文件的原始路径:

RMAN>DUMP BACKUPSET'/mnt/dmsrc/db_bak'DEVICE TYPE DISK MAPPED FILE '/mnt/dmsrc/db_bak_mapped.txt';

导出指定 ini_path 调整后的路径

指定 ini_path,导出调整后的数据文件路径到映射文件:

RMAN>DUMP BACKUPSET'/mnt/dmsrc/db_bak'DEVICE TYPE DISK DATABASE
'/opt/dmdbms/data/DAMENG/dm.ini'MAPPED FILE '/mnt/dmsrc/db_bak_mapped.txt';

3.3.5 数据库还原和恢复

本章节介绍在数据文件损坏后如何使用 DMRMAN 还原和恢复数据库,主要内容包括:

  • 执行数据库还原和恢复
  • 执行数据库还原和恢复:高级场景

3.3.5.1 执行数据库还原和恢复

3.3.5.1.1 数据库还原

使用 RESTORE 命令完成脱机还原操作,在还原语句中指定库级备份集,可以是脱机库级备份集,也可以是联机库级备份集。数据库的还原包括数据库配置文件还原和数据文件还原,目前可能需要还原的数据库配置文件包括 dm.ini、dm.ctl、服务器秘钥文件(dm_service.prikey 或者 dm_external.config,若备份库指定 usbkey 加密,则无秘钥文件)、联机日志文件。

语法如下:

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][OVERWRITE] [FORCE] 

<type2>::= TO '<system_dbf_dir>' [WITH CHECK] [OVERWRITE] 

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

DATABASE:指定还原目标库的 dm.ini 文件路径或 system.dbf 文件路径。

BACKUPSET:指定用于还原目标数据库的备份集路径。若指定为相对路径,会在默认备份目录下搜索备份集。

DEVICE TYPE:指存储备份集的介质类型,包括 DISK 和 TAPE,默认为 DISK。

PARMS:介质参数,只对介质类型为 TAPE 时有效。

IDENTIFIED BY:指定备份时使用的加密密码,供还原过程解密使用。密码可以用双引号括起来,这样可以避免一些特殊字符通不过语法检测。

ENCRYPT WITH:指定备份时使用的加密算法,供还原过程解密使用,若未指定,则使用默认算法 AES256_CFB。

WITH BACKUPDIR:用于增量备份的还原中,指定基备份的搜索目录,最大长度为 256 个字节。若不指定,自动在默认备份目录和当前备份目录下搜索基备份。如果基备份不在默认的备份目录或当前备份目录下,增量备份的还原必须指定该参数。

MAPPED FILE:指定存放还原目标路径的映射文件路径。当参数 BACKUPSET 指定的路径和 MAPPED FILE 中指定的路径不一致时,以 MAPPED FILE 中指定的路径为主。

TASK THREAD:指定还原过程中用于处理解压缩和解密任务的线程个数。若未指定,则默认为 4;若指定为 0,则调整为 1;若指定超过当前系统主机核数,则调整为主机核数。

RENAME TO:指定还原数据库后是否更改库的名字,若指定该参数则将还原后的库改为指定的数据库名,默认使用备份集中的 db_name 作为还原后库的名称。

WITH CHECK:指定还原前校验备份集数据完整性。缺省不校验。

OVERWRITE: 还原数据库时,存在重名的数据文件时,是否覆盖重建,不指定则默认报错。

注意

还原时指定OVERWRITE选项,所有重名的文件和非空目录均会删除重建,该过程是无法撤销的。为避免删除重要的文件,还原前请务必确保数据库系统路径下未存放无关文件。

<restore_type>:

  • <type1>
  1. 指定 dm.ini 还原,要求 dm.ini 中 CTL_PATH 必须配置正确,且内容有效;若配置 CTL_PATH 文件故障,且想利用 dm.ini 优化配置,则可选择 type2 还原后,用指定 dm.ini 覆盖还原后 dm.ini,并修改 CTL_PATH 为当前控制文件路径即可;
  2. 除 dm.ini 文件外,其他文件均可不存在;但 dm.ini 参数配置必须正确,且配置的 dm.ctl 文件必须是有效的控制文件;
  3. 数据库配置文件中除已经存在的 dm.ini 外,先删除控制文件中的数据文件,然后根据 overwrite 选项,若指定 overwrite,其他文件(这些文件不在控制文件中,所以未删除)均采用删除重建的处理,避免存在非法的文件,否则如果这些文件已经存在,则报错;
  4. 若指定 REUSE DMINI,则会将备份集中备份的 dm.ini 中除路径相关的 INI 参数外,均拷贝到当前 dm.ini 上;
  5. 若 dm.ini 记录的目标环境是 DMTDD 前端库,且目标环境不满足备份集的副本数和区块策略条件,则可以指定 FORCE 选项来强制还原。

强制重建数据文件的策略为:对非 DMTDD 的备份集,优先使用 dmdfs.ini 配置的副本数重建文件,且系统表空间默认使用微区,用户定义表空间默认使用宏区。若目标环境的可用副本数不足,(也可能为 0,即没有配置宏区或微区,此时需要调整区块策略),则按可用副本数重建文件。

  • <type2>说明:
  1. 所有文件均可不在,system.dbf 所在路径需为有效路径,若不存在,restore 过程中会自动创建;
  2. 所有前面提到的数据库配置文件均会在指定的 system.dbf 所在路径还原,但非单机环境中相关其他文件均不修改或者重建,如 MPP 中 dmmpp.ini、dmmal.ini 等;
  3. 若未指定 OVERWRITE,且 system.dbf 所在路径中存在待还原的库配置文件,则报错;若指定,则将已经存在的文件删除重建;
  4. 由于 DSC 环境中 dm.ini 可能存在多个,且可能不在一个主库上,或者即使在一个主库上也可能不在 system.dbf 所在路径中,故暂时不支持 DSC 环境的指定目录还原。
  • 联机日志

上述<type1>和<type2>中的还原后的联机日志文件至少会有两个,因为源库中的日志文件可能大于等于两个,如果小于两个(被误删的情况)的则补齐为两个。若已经存在联机日志配置,则使用原路径,若文件大小非法,则使用缺省大小 256M 重建;若不存在联机日志配置,则使用缺省命名规则和缺省大小 256M 重建。

联机日志文件的命名规则:

  1. 单机:db_name+(file_id+1).log,其中 fil_id + 1,占 2 个位置,如:db_name=DAMENG,则相应的名称为 DAMENG01.log,DAMENG02.log;
  2. DSC:dsc+(ep_no + 1)_+(file_id+1).log,其中 ep_no + 1 和 file_id+1 均占 2 个位置,如 0 号节点日志名称为 dsc01_01.log,dsc01_02.log。

图例:

图例 01

restore_type:

图例 01

使用说明

通过 RESTORE 命令还原后的数据库不可用,需进一步执行 RECOVER 命令,将数据库恢复到备份结束时的状态。

数据库备份集分为联机和脱机两种类型。通常情况下,用户会在联机状态下备份数据库,因此下面以联机数据库备份为例说明使用 DMRMAN 如何执行数据库还原操作。

1) 联机备份数据库,保证数据库运行在归档模式及 OPEN 状态;

SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_full_bak_for_restore';

2) 准备目标库。还原目标库可以是已经存在的数据库,也可使用 dminit 工具初始化一个新库。如下所示:

./dminit path=/opt/dmdbms/data db_name=DAMENG_FOR_RESTORE
注意

如果还原目标库与故障库是同一个,建议先执行故障库的归档修复操作。

3) 校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此处使用脱机校验;

RMAN>CHECK BACKUPSET '/home/dm_bak/db_full_bak_for_restore';

4) 还原数据库。启动 DMRMAN,输入以下命令:

RMAN>RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
建议

可通过调整dm.ini中的检查点和REDO日志相关参数,降低检查点频率,增大REDO日志包大小来提升还原性能。

3.3.5.1.2 数据库恢复

使用 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 '<介质参数>']

DATABASE:指定还原库目标的 dm.ini 文件路径。

FORCE:若恢复到 DMTDD 前端库,且恢复的 REDO 日志中包含创建表空间的记录,则可以指定该选项来强制创建表空间而忽略 REDO 日志中对该表空间的副本数和区块策略的严格限制。

WITH ARCHIVEDIR:本地归档日志搜索目录。

USE DB_MAGIC:指定本地归档日志对应数据库的 DB_MAGIC,若不指定,则默认使用目标数据库的 DB_MAGIC。

UNTIL TIME:恢复数据库到指定的时间点。如果指定的结束时间早于备份结束时间,忽略 UNTIL TIME 参数,重做所有小于备份结束 LSN(END_LSN)的 REDO 日志,将系统恢复到备份结束时间点的状态,此时并不能精确恢复到 END_LSN,只能保证重演到 END_LSN 之后的第一个时间戳日志,该日志对应的 LSN 值略大于 END_LSN。

UNTIL LSN:恢复数据库到指定的 LSN。如果指定的 UNTIL LSN 小于备份结束 LSN(END_LSN),则报错。

BACKUPSET:指定用于恢复目标数据库的备份集目录。

DEVICE TYPE:指存储备份集的介质类型,包括 DISK 和 TAPE,默认为 DISK。

PARMS:介质参数,只对介质类型为 TAPE 时有效。

IDENTIFIED BY:指定备份时使用的加密密码,供恢复过程解密使用。密码可以用双引号括起来,这样可以避免一些特殊字符通不过语法检测。

ENCRYPT WITH:指定备份时使用的加密算法,供恢复过程解密使用,若未指定,则使用默认算法 AES256_CFB。

图例:

图例 01

图例 01

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

从备份集恢复

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

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

重新生成库操作如下:

./dminit path=/opt/dmdbms/data db_name=DAMENG_FOR_RESTORE auto_overwrite=1
  1. 启动 RMAN,校验备份;
RMAN>CHECK BACKUPSET '/home/dm_bak/db_full_bak_for_recover_backupset';
  1. 还原数据库;
RMAN>RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak_for_recover_backupset';
  1. 恢复数据库。
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak_for_recover_backupset';

从归档恢复

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

注意

使用DDL CLONE方式备份的数据库,不支持指定归档恢复。指定归档恢复时,不建议使用联机状态下源库的归档,此时无法保证归档的完整性。

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

执行过从备份集还原,或者执行过从备份集还原恢复的库可以使用从归档进行恢复。此时本地归档日志属于生成备份集的源库,本地归档日志的 DB_MAGIC 与备份集中记录的 DB_MAGIC 值相同。

利用归档恢复数据库至最新状态的完整示例如下:

  1. 启动 DIsql 联机备份数据库,以及备份从检查点开始的本地归档日志;
SQL>BACKUP ARCHIVELOG FROM LSN 421401 BACKUPSET '/home/dm_bak/arch_bak_lsn_421401';

SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_full_bak_for_recover_arch';
建议

查看动态视图V$RLOG中的CKPT_LSN列,可以得出当前检查点LSN。

  1. 准备目标库,可以使用备份库,也可以重新生成库;

如果使用原备份库,且备份库故障,需要先执行目标库归档修复:

RMAN>REPAIR ARCHIVELOG DATABASE '/opt/dmdbms/data/dm.ini';

如果使用新生成的库,生成之后需要先重启一下数据库实例,才可以被还原。重新生成的库不需要执行归档修复(REPAIR)操作。重新生成库操作如下:

./dminit path=/opt/dmdbms/data db_name=DAMENG_FOR_RESTORE auto_overwrite=1
  1. 启动 RMAN,校验备份;
RMAN>CHECK BACKUPSET '/home/dm_bak/db_full_bak_for_recover_arch';
  1. 还原数据库;
RMAN>RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak_for_recover_arch';
  1. 查看备份集的数据库信息,获取源库的 DB_MAGIC;
建议

若还原后,立即执行恢复,可以不用获取源库DB_MAGIC。因为DMRMAN执行库级备份集还原后,会将备份集中的DB_MAGIC刷入还原后的库中。

RMAN>SHOW BACKUPSET '/home/dm_bak/db_full_bak_for_recover_arch' INFO DB;

show backupset '/home/dm_bak/db_full_bak_for_recover_arch' info db;

total 0 packages processed...

<backupset [DEVICE TYPE:DISK, BACKUP_PATH: /home/dm_bak/db_full_bak_for_recover_arch] info start ..........>

<DB INFO>

system path: DAMENG

pmnt_magic: 1018589430

src_db_magic: 1447060265

db_magic: 1447060265

dsc node: 1

sys mode: 0

page check: 0

rlog encrypt: 0

external cipher[id/name]: 0/

external hash[id/name]: 0/

length in char: 0

use new hash: 1

page size: 8KB

extent size: 16

case sensitive: 1

log page size: 512B

unicode_flag/charset: 0

data version: 0x7000A

sys version: V8.1.0.160-Build(2019.05.21-107084)ENT

enable policy: 0

archive flag: 1

blank_pad_mode: 0

crc_check: TRUE

<backupset [DEVICE TYPE:DISK, BACKUP_PATH: /home/dm_bak/db_full_bak_for_recover_arch] info end .>

show backupsets successfully.

time used: 51.969(ms)
  1. 利用归档恢复数据库。由步骤 5 显示的备份集信息可知,源库的 DB_MAGIC 值为 1447060265;
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' WITH ARCHIVEDIR'/home/dm_arch/arch' USE DB_MAGIC 1447060265;
建议

若还原后,立即执行恢复,可以不用指定DB_MAGIC。

  1. 若执行后归档恢复过程中,出现归档不足的错误,则利用归档校验工具 dmrachk,查看归档目录中归档连续性情况,然后再利用备份的本地归档日志,还原到归档目录后,再次执行恢复操作。
./dmrachk arch_path=/home/dm_arch/arch

......

ARCH_PATH的归档文件链表是不连续的。

breakpoint 0:

the left file /home/dm_arch/arch/ARCHIVE_LOCAL1_20180112161534890.log, clsn: 421311

the right file /home/dm_arch/arch/ARCHIVE_LOCAL1_20180113140135670.log, arch_lsn: 423208

breakpoint 1:

the left file /home/dm_arch/arch/ARCHIVE_LOCAL1_20180114085528401.log, clsn: 424273

the right file /home/dm_arch/arch/ARCHIVE_LOCAL1_20180114092356075.log, arch_lsn: 425285

the rachk tool running cost 949.011 ms

DMRMAN 查看归档备份的范围:

RMAN>show backupset '/home/dm_bak/arch_bak_lsn_421401' INFO META;

show backupset '/home/dm_bak/arch_bak_lsn_421401 ' INFO META;

total 0 packages processed...

<backupset [DEVICE TYPE:DISK, BACKUP_PATH: /home/dm_bak/arch_bak_lsn_421401] info start ..........>

<META INFO>

backupset sig: BA

backupset version: 0x4009

database name: DAMENG

backup name: ARCH_20190523_101415_000381

backupset description:

n_magic: 0x257F3E68

parent n_magic: 0xFFFFFFFF

meta file size : 82432

compressed level: 0

encrypt type: 0

parallel num: 1

backup range: archivelog

mpp_timestamp: 1558577655

arch start lsn: 421300

arch end lsn: 425550

backup level: online

backup type: archive

without log: TRUE

end_lsn: 425550

base begin_lsn: -1

base end_lsn: -1

base n_magic: 0xFFFFFFFF

base name:

base backupset:

backup time: 2019-05-23 10:14:17

min exec ver: 0x0701060C

pkg size: 0x02000000

<EP INFO>

EP[0]:

begin_pkg_seq: 6526

begin_lsn: 425450

end_pkg_seq: 6585

end_lsn: 425550

<backupset [DEVICE TYPE:DISK, BACKUP_PATH: /home/dm_bak/arch_bak_lsn_421401] info end .>

show backupsets successfully.

time used: 45.602(ms)

可见本地归档缺失部分(421311,423208]、(424273,425285]在归档备份范围内[421300,425550]中,执行归档还原后,再次执行利用本地归档恢复操作。

RMAN>RESTORE ARCHIVELOG FROM BACKUPSET '/home/dm_bak/arch_bak_lsn_421401' ALL TO ARCHIVEDIR '/home/dm_arch/arch';

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

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

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

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

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

完整示例如下:

  1. 创建源库 D1,即待备份的数据库,然后启动数据库并配置归档,归档目录为/home/dm_arch/arch;
./dminit path=/opt/dmdbms/data

./dmserver /opt/dmdbms/data/DAMENG/dm.ini

--连接数据库配置归档

SQL>ALTER DATABASE MOUNT;

SQL>ALTER DATABASE ADD ARCHIVELOG 'DEST = /home/dm_arch/arch, TYPE = local, FILE_SIZE = 1024, SPACE_LIMIT = 2048';

SQL> ALTER DATABASE ARCHIVELOG;

SQL>ALTER DATABASE OPEN;
  1. 连接数据库执行备份,产生备份集 B1;
SQL>BACKUP DATABASE FULL TO B1 BACKUPSET '/home/dm_bak/B1' DEVICE TYPE DISK BACKUPINFO 'DAMENG FULL BACKUP ONLINE' MAXPIECESIZE 2048;
  1. 以向表中循环插入数据为例来操作数据库,在插入数据的过程中,强行杀掉数据库服务器进程模拟故障;
SQL>DROP TABLE TAB_FOR_RECOVER;

SQL>CREATE TABLE TAB_FOR_RECOVER(C1 INT);

SQL>BEGIN

  FOR I IN 1..100000 LOOP

     INSERT INTO TAB_FOR_RECOVER VALUES(I);

     COMMIT;

  END LOOP;

END;

/
  1. 创建目标库 D2,即待还原的库;
./dminit path=/opt/dmdbms/data db_name=DAMENG_FOR_RES
  1. 启动 DMRMAN 工具,修复源库 D1 归档文件;
RMAN>REPAIR ARCHIVELOG DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'
  1. 使用备份集 B1 及归档 A1 将目标库 D2 恢复到最新状态。
RMAN>RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RES/dm.ini' FROM BACKUPSET '/home/dm_bak/B1';

RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RES/dm.ini' WITH ARCHIVEDIR '/home/dm_arch/arch';
3.3.5.1.3 数据库更新

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

语法如下:

RECOVER DATABASE '<ini_path>' UPDATE DB_MAGIC; 

DATABASE:指定还原目标库的 dm.ini 文件路径。

图例:

图例 01

以使用正常退出数据库的脱机备份的备份集还原为完整示例,进行说明如下:

  1. 启动 DMRMAN 备份数据库,保证数据库处于正常退出的脱机状态;
RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET '/home/dm_bak/db_full_bak_for_recover_dbmagic';
  1. 准备目标库,可以使用备份库,也可以重新生成库或者直接指定目录还原;

重新生成库操作如下:

./dminit path=/opt/dmdbms/data db_name=DAMENG_FOR_RESTORE auto_overwrite=1
  1. 校验备份;
RMAN>CHECK BACKUPSET '/home/dm_bak/db_full_bak_for_recover_dbmagic';
  1. 还原数据库;
RMAN>RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak_for_recover_dbmagic';
  1. 恢复数据库;
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak_for_recover_dbmagic';
  1. 更新数据库。
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' UPDATE DB_MAGIC;

3.3.5.2 执行数据库还原和恢复:高级场景

3.3.5.2.1 数据库还原

本节主要介绍数据库还原的高级过程,指定映射文件还原。

指定映射文件还原

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

映射文件(mappedfile)用于存放还原目标路径,即备份集里面的数据文件的路径。可以手动修改自动生成的映射文件。当参数 BACKUPSET 指定的路径和 MAPPED FILE 中指定的路径不一致时,以 MAPPED FILE 中指定的路径为主。映射文件可用于库级脱机还原和表空间还原。

使用 DUMP 命令可以将指定备份集还原目标信息生成到目标映射文件中,该文件可被重新编辑后,用于数据库的还原过程。

下面以脱机备份还原为例说明使用映射文件还原的具体步骤。

  1. 启动 DMRMAN,脱机备份数据库;
RMAN> BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET'/home/dm_bak/db_bak_for_map_01';
  1. 生成映射文件 map_file_01.txt 至/home/dm_mapfile 目录。此处指定 DATABASE 后,生成映射文件中的数据文件路径与数据库/opt/dmdbms/data/DAMENG_FOR_RESTORE 中的数据文件路径一致。若不指定 DATABASE,则生成映射文件中的数据文件路径与备份集中的源数据库的数据文件路径一致;
RMAN> DUMP BACKUPSET'/home/dm_bak/db_bak_for_map_01' DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' MAPPED FILE'/home/dm_mapfile/map_file_01.txt';

生成的映射文件内容如下:

/***************************************************************************************/

/*** Delete the unnecessary modified groups **/

/*** Modify the data_path or mirror_path only in one group **/

/***************************************************************************************/

/**=============================================================**/

/*[DAMENG_SYSTEM_FIL_0]*/

fil_id = 0

ts_id = 0

ts_name = SYSTEM

data_path = /opt/dmdbms/data/DAMENG_FOR_RESTORE/SYSTEM.DBF

mirror_path =

/**=============================================================**/

/*[DAMENG_ROLL_FIL_0]*/

fil_id = 0

ts_id = 1

ts_name = ROLL

data_path = /opt/dmdbms/data/DAMENG_FOR_RESTORE/ROLL.DBF

mirror_path =

/**=============================================================**/

/*[DAMENG_MAIN_FIL_0]*/

fil_id = 0

ts_id = 4

ts_name = MAIN

data_path = /opt/dmdbms/data/DAMENG_FOR_RESTORE/MAIN.DBF

mirror_path =

/********************************** END **********************************/

如果需要恢复数据文件或镜像文件到指定路径,可手动编辑映射文件中表空间对应的 data_path 属性。例如,要还原 MAIN 表空间中的数据文件 MAIN.DBF 到/home/dm_dbf 目录下,则需要修改组 DAMENG_MAIN_FIL_0 的内容如下:

/*[DAMENG_MAIN_FIL_0]*/

fil_id = 0

ts_id = 4

ts_name = MAIN

data_path = /home/dm_dbf/MAIN.DBF
  1. 指定映射文件还原。还原前可选择对备份文件进行校验。
RMAN> RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_bak_for_map_01' MAPPED FILE '/home/dm_mapfile/map_file_01.txt';
3.3.5.2.2 数据库恢复

前面章节我们已经对数据库恢复中的更新 DB_MAGIC、从备份集恢复和从归档恢复作了简单介绍。本节将介绍数据库恢复中比较典型且复杂的场景,主要内容包括:

  • 恢复数据库到指定时间点/LSN
  • 主备环境下指定 DB_MAGIC 收集归档
  • DMDSC 环境下的数据库恢复
  • 多次故障恢复后使用不同数据库归档恢复

恢复数据库到指定时间点/LSN

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

例如,用户在下午 5 点做了一个误操作,删除了某些重要数据;我们可以指定恢复时间点到下午 4:59 分,恢复被误删除的数据。

下面以联机数据库备份为例说明如何恢复数据库到指定的时间点/LSN。

  1. 准备数据;
SQL>CREATE TABLE TAB_FOR_RECOVER_01(C1 INT);

SQL>INSERT INTO TAB_FOR_RECOVER_01 VALUES(1);

SQL>COMMIT;
  1. 备份数据库;
SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_full_bak_for_time_lsn';
  1. 正确操作数据库,产生一些归档;
SQL>CREATE TABLE TAB_FOR_RECOVER_02(C1 INT);

SQL>INSERT INTO TAB_FOR_RECOVER_02 VALUES(1);

SQL>COMMIT;

使用 SELECT SYSDATE 命令查询此时的时间为:2018-11-16 10:56:40。

使用 SELECT FILE_LSN FROM V$RLOG 命令查询此时的 LSN 为:50857。

  1. 误操作数据库。此步骤误删除了表 TAB_FOR_RECOVER_01 中数据;
SQL>DELETE FROM TAB_FOR_RECOVER_01;

SQL>COMMIT;

操作步骤同步骤 3),此时的时间和 LSN 分别为:2018-11-16 10:57:20、50861。

  1. 还原数据库。步骤 4)为误操作,因此我们需要将数据库恢复到步骤 3)的状态。首先需要关闭数据库实例,然后利用 DMRMAN 工具还原数据库:
RMAN> RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak_for_time_lsn';
  1. 恢复数据库到指定时间点/LSN。还原后数据库的数据与备份时一致,如果要恢复数据库至步骤 3)的状态可以指定 UNTIL TIME 或 UNTIL LSN 参数重做部分归档。

使用 RECOVER DATABASE...UNTIL TIME 命令恢复到指定的时间:

RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' WITH ARCHIVEDIR'/home/dm_arch/arch' UNTIL TIME'2018-11-16 10:56:40';

或者使用 RECOVER DATABASE...UNTIL TIME 命令恢复到指定的 LSN:

RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' WITH ARCHIVEDIR'/home/dm_arch/arch' UNTIL LSN 50857;

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

主备环境下,如果当前节点的归档缺失,使用归档进行恢复时,会由于归档日志不连续而报错,无法将数据库恢复到最新状态。如果另一节点保存有该部分日志,则可以使用该节点日志进行恢复。默认情况下,恢复阶段收集归档时只收集与待恢复库 DB_MAGIC、PERMANENT_MAGIC 一致的归档文件,而在主备环境中 PERMANNET_MAGIC 是一致的,此时可通过指定 DB_MAGIC 跳过这一限制。

  1. 搭建主备环境并备份任意节点;
RMAN>BACKUP DATABASE '/opt/dmdbms/data0/DAMENG/dm.ini' BACKUPSET '/home/dm_bak/db_full_bak';
  1. 启动主备,登录主节点插入部分数据后退出,然后删除该节点下所有归档日志;
  2. 指定备份集还原到主节点;
RMAN>RESTORE DATABASE '/opt/dmdbms/data0/DAMENG/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak';
  1. 指定 DB_MAGIC,使用备库归档进行恢复。由于该节点下所有归档已被删除,无法恢复到最新状态,此时需要借助备库存在的归档。
RMAN>RECOVER DATABASE '/opt/dmdbms/data0/DAMENG/dm.ini' WITH ARCHIVEDIR
'/opt/dmdbms/data1/arch' USE DB_MAGIC 1447060264;

DMDSC 环境下的数据库恢复

DM 支持 DMDSC 环境下的备份恢复。DMDSC 的备份恢复与普通的单机不同的是,它包含多个节点,有关 DMDSC 的详细介绍及环境搭建请参见《DM8 共享存储集群》。下面以从归档恢复为例说明 2 节点(DSC0、DSC1)DMDSC 环境下的备份恢复:

  1. 搭建 DMDSC 环境,每个节点都需要配置双向的远程归档。归档配置示例如下:

DSC0 实例的 dmarch.ini 配置:

ARCH_LOCAL_SHARE = 1

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL

ARCH_DEST =+DMDATA/dameng/arch_dsc0

ARCH_FILE_SIZE = 128

ARCH_SPACE_LIMIT = 0

[ARCH_REMOTE1]

ARCH_TYPE = REMOTE

ARCH_DEST = DSC1

ARCH_INCOMING_PATH = +DMDATA/dameng/arch_dsc1

ARCH_FILE_SIZE = 128

ARCH_SPACE_LIMIT = 0

DSC1 实例的 dmarch.ini 配置:

ARCH_LOCAL_SHARE = 1

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL

ARCH_DEST =+DMDATA/dameng/arch_dsc1

ARCH_FILE_SIZE = 128

ARCH_SPACE_LIMIT = 0

[ARCH_REMOTE1]

ARCH_TYPE = REMOTE

ARCH_DEST = DSC0

ARCH_INCOMING_PATH =+DMDATA/dameng/arch_dsc0

ARCH_FILE_SIZE = 128

ARCH_SPACE_LIMIT = 0
注意

配置共享本地归档的远程归档时,远程归档指定的本地归档目录必须和真实的本地归档路径完全一致,否则服务器启动过程中校验失败。

  1. 启动 DIsql,联机备份数据库。备份其中任意一个节点即可备份整个 DMDSC 环境;
SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_full_bak_for_dsc';
  1. 还原数据库。还原数据库之前可选择对备份文件进行校验。需要注意的是,待还原的目标库可以是单机库,也可以是 DMDSC 库,且节点个数允许不同;
RMAN> RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak_for_dsc';
  1. 恢复数据库。DMDSC 库恢复要求各节点归档完整性由用户保证,即各节点的本地归档都能够访问到,若本地存在 REMOTE 归档,则可以使用 REMOTE 归档代替远程节点的本地归档;
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' WITH ARCHIVEDIR'+DMDATA/dameng/arch_dsc0','+DMDATA/dameng/arch_dsc1';
  1. 数据库更新。
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' UPDATE DB_MAGIC;

多次故障恢复后使用不同数据库归档恢复

在实际应用中可能会遇到以下还原场景:

  1. 创建一个数据库 D1;
  2. 操作数据库并执行数据库备份 B1;
  3. 继续操作数据库的过程中数据库故障,此时生成的归档为 A1;
  4. 利用备份 B1 和归档 A1 将数据库 D1 恢复到目标库 D2,此时数据库 D2 为 D1 故障前的状态;
  5. 启动数据库 D2,操作数据库过程中数据库第二次故障,此时生成的归档为 A2。

归档 A1、A2 属于不同的数据库,使用备份 B1 和归档 A1、A2 是否可以恢复数据库到第二次故障发生前的状态呢?答案是肯定的。下面将举例详细说明如何使用不同数据库的归档恢复数据库到最新状态。具体步骤如下:

  1. 创建源库 D1,即待备份的数据库,然后启动数据库并配置归档,归档目录为/home/dm_arch/arch;
./dminit path=/opt/dmdbms/data

./dmserver /opt/dmdbms/data/DAMENG/dm.ini

--连接数据库配置归档

SQL>ALTER DATABASE MOUNT;

SQL>ALTER DATABASE ADD ARCHIVELOG 'DEST = /home/dm_arch/arch, TYPE = local, FILE_SIZE = 1024, SPACE_LIMIT = 2048';

SQL> ALTER DATABASE ARCHIVELOG;

SQL>ALTER DATABASE OPEN;
  1. 操作数据库的同时备份数据库,备份集为 B1。此处以向表中循环插入数据为例来操作数据库;
SQL>DROP TABLE TAB_FOR_RECOVER;

SQL>CREATE TABLE TAB_FOR_RECOVER(C1 INT);

SQL>BEGIN

	FOR I IN 1..100000 LOOP

		INSERT INTO TAB_FOR_RECOVER VALUES(I);

		COMMIT;

	END LOOP;

END;

/

--插入数据的同时,另外一个会话备份数据库

SQL>BACKUP DATABASE FULL TO B1 BACKUPSET '/home/dm_bak/B1' DEVICE TYPE DISK
BACKUPINFO 'DAMENG FULL BACKUP ONLINE' MAXPIECESIZE 2048;
  1. 继续向数据库插入数据一段时间后关掉数据库实例,模拟数据库故障。从备份后到数据库故障这段时间生成的归档称为 A1;
  2. 创建目标库 D2,即待还原的库,并配置归档,归档目录与数据库 D1 相同;
./dminit path=/opt/dmdbms/data db_name=DAMENG_FOR_RES
  1. 启动 DMRMAN 工具,利用备份集 B1 和归档 A1 恢复数据库 D2 到 D1 故障前的状态;
RMAN>RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RES/dm.ini' FROM BACKUPSET '/home/dm_bak/B1';

RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RES/dm.ini' WITH ARCHIVEDIR '/home/dm_arch/arch';

RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RES/dm.ini' UPDATE DB_MAGIC;

启动目标库 D2,向数据库中继续插入数据:

./dmserver /opt/dmdbms/data/DAMENG/dm.ini

SQL>BEGIN

FOR I IN 1..100000 LOOP

INSERT INTO TAB_FOR_RECOVER VALUES(I);

COMMIT;

END LOOP;

END;

/
  1. 插入数据一段时间后,关掉数据库实例,模拟数据库第二次故障。数据库 D2 启动到第二次故障之间产生的归档为 A2;
  2. 恢复目标库 D2 到第一次故障前的状态。恢复一次,目标库的 DB_MAGIC 都会改变,因此归档 A1、A2 的 DB_MAGIC 不同,属于不同的数据库。第一次恢复只能先重做归档 A1,即恢复到第一次故障前的状态;
RMAN>RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RES/dm.ini' FROM BACKUPSET
'/home/dm_bak/B1';

RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RES/dm.ini' WITH ARCHIVEDIR '/home/dm_arch/arch';
  1. 查看归档 A2 的 DB_MAGIC;
./dmrachk arch_fil=/home/dm_arch/arch/ARCHIVE_LOCAL1_2019061208085947282.log

rachk V8.1.0.166-Build(2019.06.10-107924)ENT

/************************************************************/

归档文件/home/dm_arch/arch/ARCHIVE_LOCAL1_2019061208085947282.log明细.

Version : 0x7005

Status : INACTIVE

n_rpags : 7369

pemnt_magic : 1449476774

db_magic : **1449535319**

src_db_magic : 2032790579

arch_lsn : 39891

arch_seq : 0

clsn : 76829

next_seq : 7368

file len : 3777024

file free : 3777024

create time : 2019-06-12 8:59:47

close time : 2019-06-12 8:59:47

crc_check : TRUE

/************************************************************/

概要(节点[0]):

总计: 1 个文件

正确: 1 个文件

错误: 0 个文件

重复: 0 个文件

the rachk tool running cost 27.161 ms
  1. 利用归档 A2 恢复数据库至第二次故障前的状态。从归档恢复时,默认使用目标库的 DB_MAGIC,此时目标库 DB_MAGIC 值被替换为 B1 备份集源库 DB_MAGIC,与归档 A2 DB_MAGIC 值不一致,无法利用该部分归档恢复到最新状态。此时可指定 USE DB_MAGIC 参数,指定 DB_MAGIC 值为待恢复归档的 DB_MAIGC 值即可;
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RES/dm.ini' WITH ARCHIVEDIR
'/home/dm_arch/arch' USE DB_MAGIC 1449535319 ;

file dm.key not found, use default license!

start redo arch file: /home/dm_arch/arch/ARCHIVE_LOCAL1_2019061208085947282.log, rpages: 7377, start lsn: 39891, end lsn: 76829

total redo pages:7369

end redo arch file: /home/dm_arch/arch/ARCHIVE_LOCAL1_2019061208085947282.log

used time: 0s

recover successfully!

recover time used: 7578.080(ms)
  1. 更新数据库。
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RES/dm.ini' UPDATE DB_MAGIC;

3.3.6 表空间还原和恢复

3.3.6.1 执行表空间还原和恢复

3.3.6.1.1 表空间还原

使用 RESTORE 命令完成表空间的脱机还原,还原的备份集可以是联机或脱机生成的库备份集,也可以是联机生成的表空间备份集。脱机表空间还原仅涉及表空间数据文件的重建与数据页的拷贝。不需要事先置目标表空间为 OFFLINE 状态。

表空间还原后,表空间状态被置为 RES_OFFLINE,并设置数据标记 FIL_TS_RECV_STATE_RESTORED,表示已经还原但数据不完整。

语法如下:

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 '<介质参数>']

DATABASE:指定还原目标库的 dm.ini 文件路径。

TABLESPACE:指定还原的表空间,TEMP 表空间除外。

WITH CHECK:指定还原前校验备份集数据完整性。缺省不校验。

DATAFILE:还原指定的数据文件。可以指定数据文件编号或数据文件路径。文件编号,对应动态视图 V​DATAFILE中ID列的值;文件路径,对应动态视图VDATAFILE 中 PATH 或者 MIRROR_PATH 列的值,也可以仅指定数据文件名称(相对路径),与表空间中数据文件匹配时,会使用 SYSTEM 目录补齐。

BACKUPSET:指定还原备份集的路径。若指定为相对路径,会在默认备份目录下搜索备份集。

DEVICE TYPE:指存储备份集的介质类型,支持 DISK 和 TAPE,默认 DISK。

PARMS:介质参数,只对介质类型为 TAPE 时有效。

IDENTIFIED BY:加密备份表空间时,用户设置的密码。密码长度为 9 到 48 个字节。

ENCRYPT WITH:加密算法。缺省情况下,算法为 AES256_CFB。

WITH BACKUPDIR:用于增量备份的还原中,指定基备份的搜索目录,最大长度为 256 个字节。若不指定,自动在默认备份目录和当前备份目录下搜索基备份。如果基备份不在默认的备份目录或当前备份目录下,增量备份的还原必须指定该参数。

MAPPED FILE :指定存放还原目标路径的文件

TASK THREAD:还原过程中数据处理过程线程的个数,取值范围 0~64,默认为 4。若指定为 0,则调整为 1;若指定超过当前系统主机核数,则调整为当前系统主机核数。

图例

图例 01

使用说明:

  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 状态;

SQL>BACKUP TABLESPACE MAIN BACKUPSET '/home/dm_bak/ts_full_bak_for_restore';

2) 校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此处使用脱机校验;

RMAN>CHECK BACKUPSET '/home/dm_bak/ts_full_bak_for_restore';

3) 还原表空间。需要注意,表空间还原的目标库只能是备份集产生的源库,否则将报错。启动 DMRMAN,输入以下命令:

RMAN>RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' TABLESPACE MAIN FROM BACKUPSET '/home/dm_bak/ts_full_bak_for_restore';
3.3.6.1.2 表空间恢复

表空间恢复通过重做 REDO 日志,以将数据更新到一致状态。由于日志重做过程中,修改好的数据页首先存入缓冲区,缓冲区分批次将修改好的数据页写入磁盘,如果在此过程中发生异常中断,可能导致缓冲区中的数据页无法写入磁盘,造成数据的不一致,数据库启动时校验失败,所以表空间恢复过程中不允许异常中断。

恢复完成后,表空间状态置为 ONLINE,并设置数据标记为 FIL_TS_RECV_STAT_RECOVERED,表示数据已恢复到一致状态。

语法如下:

RECOVER DATABASE '<ini_path>' TABLESPACE <表空间名> [WITH ARCHIVEDIR '归档日志目录'{,'归档日志目录'}][USE DB_MAGIC <db_magic>]; 

DATABASE:指定还原目标库的 dm.ini 文件路径。

TABLESPACE:指定还原的表空间,TEMP 表空间除外。

WITH ARCHIVEDIR: 归档日志搜索目录。缺省情况下在 dmarch.ini 中指定的归档目录中搜索。如果归档日志不在配置文件 dmarch.ini 中指定的目录下,或者归档日志分散在多个目录下,需要使用该参数指定归档日志搜索目录。

USE DB_MAGIC:指定本地归档日志对应数据库的 DB_MAGIC,若不指定,则默认使用目标恢复数据库的 DB_MAGIC。

图例

图例 01

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

1) 联机备份表空间,保证数据库运行在归档模式及 OPEN 状态;

SQL>BACKUP TABLESPACE MAIN BACKUPSET '/home/dm_bak/ts_full_bak_for_recover';

2) 校验备份,校验待还原备份集的合法性,此处使用脱机校验;

RMAN>CHECK BACKUPSET '/home/dm_bak/ts_full_bak_for_recover';

3) 还原表空间。启动 DMRMAN,输入以下命令:

RMAN>RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RECOVER/dm.ini' TABLESPACE MAIN FROM BACKUPSET '/home/dm_bak/ts_full_bak_for_recover';

4) 恢复表空间。启动 DMRMAN,输入以下命令:

RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RECOVER/dm.ini' TABLESPACE MAIN;

3.3.6.2 执行表空间还原和恢复:高级场景

3.3.6.2.1 表空间还原

本节主要介绍表空间还原的高级过程,主要内容包括:

  • 还原表空间中指定的数据文件
  • 指定映射文件还原

还原表空间中指定的数据文件

DM 不仅支持从数据库备份和表空间备份中还原表空间,还支持还原表空间中特定的数据文件。若表空间已经被破坏,则不允许执行特定数据文件的还原。使用数据库备份还原表空间或表空间中的数据文件与使用表空间备份操作类似,区别在于 RESTORE 语句中指定的备份集为数据库备份集。因此,本节仅以使用表空间备份为例说明还原数据文件的操作步骤。

  1. 创建待备份的表空间 TS_FOR_RES_01,并在库目录下创建 3 个数据文件;
SQL>CREATE TABLESPACE TS_FOR_RES_01 DATAFILE'ts_for_res_01_01.dbf' SIZE 128;

SQL>ALTER TABLESPACE TS_FOR_RES_01 ADD DATAFILE'ts_for_res_01_02.dbf' SIZE 128;

SQL> ALTER TABLESPACE TS_FOR_RES_01 ADD DATAFILE'ts_for_res_01_03.dbf' SIZE 128;
  1. 备份表空间;
SQL>BACKUP TABLESPACE TS_FOR_RES_01 BACKUPSET '/home/dm_bak/ts_bak_for_dbf';
  1. 查询数据文件的文件编号或路径。还原指定的数据文件需知道数据文件对应的文件编号或路径,相关信息可通过查询动态视图 V$DATAFILE 获取;
SQL>SELECT ID, PATH FROM V$DATAFILE;

查询结果:

行号       ID          PATH

--------- ----------- ------------------------------------

1         0           /home/xm/DAMENG/SYSTEM.DBF

2         0           /home/xm/DAMENG/ROLL.DBF

3         0           /home/xm/DAMENG/MAIN.DBF

4         0           /home/xm/DAMENG/TEMP.DBF

5         0           /home/xm/DAMENG/ts_for_res_01_01.dbf

6         1           /home/xm/DAMENG/ts_for_res_01_02.dbf

7         2           /home/xm/DAMENG/ts_for_res_01_03.dbf

如果想还原 ts_for_res_01_02.dbf 和 ts_for_res_01_03.dbf 两个数据文件,通过查询结果可知它们的文件编号(1 和 2)以及相应的路径。

  1. 校验备份。此步骤为可选;
RMAN>CHECK BACKUPSET '/home/dm_bak/ts_bak_for_dbf';
  1. 通过文件编号还原表空间 TS_FOR_RES_01 中的数据文件 ts_for_res_01_02.dbf 和 ts_for_res_01_03.dbf;
RMAN>RESTORE DATABASE '/home/xm/DAMENG/dm.ini' TABLESPACE TS_FOR_RES_01 DATAFILE 1, 2 FROM BACKUPSET '/home/dm_bak/ts_bak_for_dbf';
  1. 如果不想使用文件编号还原,使用指定数据文件路径还原数据文件的语句如下:
RMAN>RESTORE DATABASE '/home/xm/DAMENG/dm.ini' TABLESPACE TS_FOR_RES_01 DATAFILE '/home/xm/DAMENG/ts_for_res_01_02.dbf', '/home/xm/DAMENG/ts_for_res_01_03.dbf' FROM BACKUPSET '/home/dm_bak/ts_bak_for_dbf';

指定映射文件还原

映射文件用于存放还原目标路径,即备份集里面的数据文件路径。指定映射文件还原可以重新指定备份集中数据文件的路径。下面以 MAIN 表空间为例说明如何使用映射文件还原。

  1. 备份 MAIN 表空间;
SQL>BACKUP TABLESPACE MAIN BACKUPSET '/home/dm_bak/ts_bak_for_map';
  1. 创建映射文件;

使用 DMRMAN 的 DUMP 命令生成映射文件 map_file.txt,存至/home/dm_mappedfile 目录。文件中指定数据文件 MAIN.DBF 还原后的路径为/home/dm_dbf/MAIN.DBF。

生成映射文件的命令如下:

RMAN>DUMP BACKUPSET '/home/dm_bak/ts_bak_for_map' MAPPED FILE '/home/dm_mappedfile/map_file.txt';

映射文件的内容如下:

/**=============================================================**/

/*[DAMENG_MAIN_FIL_0]*/

fil_id = 0

ts_id = 4

ts_name = MAIN

data_path = /home/dm_dbf/MAIN.DBF

mirror_path =

/*********************************** END***************************/
  1. 还原 MAIN 表空间。
RMAN>RESTORE DATABASE '/home/xm/DAMENG/dm.ini' TABLESPACE MAIN FROM BACKUPSET
'/home/dm_bak/ts_bak_for_map' MAPPED FILE '/home/dm_mappedfile/map_file.txt';
3.3.6.2.2 表空间恢复

本节主要介绍表空间恢复的高级过程,主要内容包括:

  • 指定归档目录恢复
  • 主备环境下指定 DB_MAGIC 收集归档

指定归档目录恢复

由于磁盘空间的影响,数据库归档可能出现分布在多个目录的情况。出现这种情况时就需要指定归档目录恢复。表空间恢复时指定多个归档目录的操作步骤如下:

  1. 备份用户表空间 MAIN;
SQL>BACKUP TABLESPACE MAIN BACKUPSET '/home/dm_bak/ts_bak_for_arch';
  1. 校验备份。此步骤可选;
RMAN>CHECK BACKUPSET '/home/dm_bak/ts_bak_for_arch';
  1. 还原用户表空间 MAIN;
RMAN>RESTORE DATABASE '/home/xm/DAMENG/dm.ini' TABLESPACE MAIN FROM BACKUPSET '/home/dm_bak/ts_bak_for_arch';
  1. 恢复用户表空间 MAIN。假设归档日志分布在/home/dm_arch1 和/home/dm_arch2 两个目录下。
RMAN>RECOVER DATABASE '/home/xm/DAMENG/dm.ini' TABLESPACE MAIN WITH ARCHIVEDIR '/home/dm_arch1', '/home/dm_arch2';

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

主备环境下,如果当前节点的归档缺失,使用归档进行恢复时,会由于归档日志不连续而报错,无法将表空间恢复到最新状态。如果另一节点保存有该部分日志,则可以使用该节点日志进行恢复。默认情况下,恢复阶段收集归档时只收集与待恢复库 DB_MAGIC、PERMANENT_MAGIC 一致的归档文件,而在主备环境中 PERMANNET_MAGIC 是一致的,此时可通过指定 DB_MAGIC 跳过这一限制。

  1. 搭建主备环境并登录任意节点进行备份;
SQL>BACKUP TABLESPACE MAIN BACKUPSET '/home/dm_bak/ts_bak_for_arch';
  1. 登录主节点插入部分数据后退出,然后删除该节点下所有归档日志;
  2. 从备份集还原表空间 MAIN 到主节点;
RMAN>RESTORE DATABASE '/home/xm/DAMENG/dm.ini' TABLESPACE MAIN FROM BACKUPSET '/home/dm_bak/ts_bak_for_arch';
  1. 指定 DB_MAGIC,使用备库归档进行恢复。由于主节点下所有归档已被删除,无法恢复到最新状态,此时需要借助备库存在的归档进行恢复。
RMAN>RECOVER DATABASE '/home/xm/DAMENG/dm.ini' TABLESPACE MAIN WITH ARCHIVEDIR '/home/dm_arch2' USE DB_MAGIC 18446520;

3.3.7 归档还原

使用 RESTORE 命令完成脱机还原归档操作,在还原语句中指定归档备份集。备份集可以是脱机归档备份集,也可以是联机归档备份集。

语法如下:

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:指定用于还原目标数据库的备份集路径。若指定为相对路径,会在默认备份目录下搜索备份集。

DEVICE TYPE:指存储备份集的介质类型,支持 DISK 和 TAPE,默认为 DISK。

PARMS:介质参数,只对介质类型为 TAPE 时有效,详见。

IDENTIFIED BY:指定备份时使用的加密密码,供还原过程解密使用。密码可以用双引号括起来,这样可以避免一些特殊字符通不过语法检测。

ENCRYPT WITH:指定备份时使用的加密算法,供还原过程解密使用,若未指定,则使用默认算法 AES256_CFB。

TASK THREAD:指定还原过程中用于处理解压缩和解密任务的线程个数。若未指定,则默认为 4;若指定为 0,则调整为 1;若指定超过当前系统主机核数,则调整为当前核数。

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 ...:指定还原的区间。还原该区间内的所有归档日志文件。例如,指定还原区间为 BETWEEN 100 AND 200,归档日志文件 1 的 LSN 范围为 1-150,归档日志文件 2 的 LSN 范围为 150-180,归档日志文件 3 的 LSN 范围为 180-600,那么归档日志文件 1、2 和 3 都会被还原。

ARCHIVEDIR: 指定还原的目标归档日志目录。

DATABASE: 指定还原目标库的 dm.ini 文件路径,将归档日志还原到该库的归档日志目录中。

OVERWRITE:还原归档时,指定归档日志已经存在时的处理方式。可取值 1、2、3。1:跳过已存在的归档日志,继续其他日志的还原。跳过的日志信息会生成一条日志记录在安装目录的 log 目录中的 dm_BAKRES_年月.log 日志文件中。2:直接报错返回。3:强制覆盖已存在的归档日志。缺省为 1。

图例:

图例 01

图例 01

使用说明:

1) 联机备份归档,保证数据库运行在归档模式及 OPEN 状态;

SQL>BACKUP ARCHIVE LOG ALL BACKUPSET '/home/dm_bak/arch_all_for_restore';

2) 校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此处使用脱机校验;

RMAN>CHECK BACKUPSET '/home/dm_bak/arch_all_for_restore';

3) 还原归档。启动 DMRMAN,设置 OVERWRITE 为 2,如果归档文件已存在,会报错。

指定还原的目标归档日志目录:

RMAN>RESTORE ARCHIVE LOG FROM BACKUPSET '/home/dm_bak/arch_all_for_restore' TO ARCHIVEDIR'/opt/dmdbms/data/DAMENG_FOR_RESTORE/arch_dest' OVERWRITE 2;

指定还原目标库的 dm.ini 文件路径:

RMAN>RESTORE ARCHIVE LOG FROM BACKUPSET '/home/dm_bak/arch_all_for_restore' TO DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' OVERWRITE 2;

3.3.8 归档修复

使用 REPAIR 命令完成指定数据库的归档修复,归档修复会对目标库 dmarch.ini 中配置的所有本地归档日志目录执行修复。若目标库没有配置本地归档,则不执行修复。执行修复时,目标库一定不能处于运行状态。一般建议在数据库故障后,应立即执行归档修复,否则后续还原恢复将会导致联机日志中未刷入本地归档的 REDO 日志丢失,届时再利用本地归档恢复将无法恢复到故障前的最新状态。

语法如下:

REPAIR <ARCHIVE LOG | ARCHIVELOG> DATABASE '<ini_path>';

DATABASE:指定待修复归档的数据库对应的 dm.ini 文件路径。

图例:

图例 01

使用说明:

1) 单机环境下,确保目标库已经停止工作后,执行归档修复;

RMAN> REPAIR ARCHIVELOG DATABASE '/opt/dmdbms/data/dm.ini';

2) DSC 环境下,需要每个节点停止工作后,每个节点独立执行修复操作;

对于两节点 DSC01、DSC02 执行修复如下:

RMAN> REPAIR ARCHIVELOG DATABASE '/opt/dmdbms/dsc/dm01.ini';

RMAN> REPAIR ARCHIVELOG DATABASE '/opt/dmdbms/dsc/dm02.ini';

3) DSC 环境下,REPAIR 操作也会利用其他节点的联机日志修复本地对应的远程归档。如果脱机修复之后,再进行备份时还会报“指定或者默认目录中找不到完整归档日志”、“收集到的归档日志和起始 LSN 不连续”或“归档日志不完整”等错误,可能是因为节点之前的远程归档就已经不完整,此时可以借助 dmrachk 工具手动拷贝远程节点的本地归档日志到本节点对应的远程归档目录中进行修复。

3.3.9 查看操作日志

本节主要介绍整个操作过程中可能涉及的日志或跟踪文件。默认情况下,这些文件都位于 DM 数据库的 log 目录中。下述文件名中的“XXX”代表生成文件的年月,如 2018 年 5 月生成日志文件,则其文件名中的“XXX”部分就是“201805”,每个月生成一个日志文件,每个月中日志内容都是不断增加的。操作日志类型包括:

  • 全局日志文件 dm_DMSERVER_xxx.log
  • 备份还原日志文件 dm_BAKRES_xxx.log
  • SBT 接口跟踪文件 dm_SBTTRACE_xxx.log

3.3.9.1 全局日志文件

dm_DMSERVER_xxx.log 是全局日志文件,全局日志文件不可配置。dm_DMSERVER_xxx.log 是 DM 数据库的运行日志,数据库运行过程中的日志信息都包含在这个日志中,备份还原过程中备份还原操作的阶段性信息会记录在这个日志文件中,包括日志生成时间、日志级别、日志生成进程名称、进程 ID、日志生成线程和内容等。

全局日志信息格式为:

时间 + 日志类型(INFO/WARN/ERROR/FATAL)+ 进程(database)+ 进程 ID(P 开头)+ 线程(dm_sql_thd/main_thread 等)+ 日志内容。

如执行备份时可能会生成如下日志信息:

2018-10-08 16:05:06 [INFO] database P0000012596 main_thread version info: develop

2018-10-08 16:05:06 [INFO] database P0000012596 main_thread nsvr_create_lsnr_sockets success, port_num=5236, sock_v4=868, sock_v6=864

2018-10-08 16:05:06 [INFO] database P0000012596 main_thread DM Database Server x64 V8.0.0.90-Build(2018.08.20-96055)ENT startup...

2018-10-08 16:05:06 [INFO] database P0000012596 main_thread current instance new pid is 12596, check whether it is running...

2018-10-08 16:05:13 [INFO] database P0000012596 main_thread fil_sys_init

2018-10-08 16:05:13 [INFO] database P0000012596 main_thread fil_ts_create ts_id=0 ts_name=SYSTEM

2018-10-08 16:05:13 [INFO] database P0000012596 main_thread fil_ts_create ts_id=1 ts_name=ROLL

2018-10-08 16:05:13 [INFO] database P0000012596 main_thread fil_ts_create ts_id=2 ts_name=RLOG

2018-10-08 16:05:13 [INFO] database P0000012596 main_thread fil_ts_create ts_id=4 ts_name=MAIN

2018-10-08 16:05:13 [INFO] database P0000012596 main_thread fil_ts_create ts_id=5 ts_name=BOOKSHOP

2018-10-08 16:05:13 [WARNING] database P0000012596 main_thread License will expire on 2019-08-20

……

2018-10-08 16:05:15 [FATAL] database P0000012596 main_thread alter database open; nsvr_check_version failed

2018-10-08 16:05:15 [FATAL] database P0000012596 main_thread code = -109, dm_sys_halt now!!!

……

2018-10-10 15:40:14 [INFO] database P0000004764 main_thread version info: develop

2018-10-10 15:40:14 [INFO] database P0000004764 main_thread nsvr_create_lsnr_sockets success, port_num=5236, sock_v4=836, sock_v6=832

2018-10-10 15:40:14 [INFO] database P0000004764 main_thread DM Database Server x64 V8.0.0.98-Build(2018.09.28-97578)ENT startup...

2018-10-10 15:40:15 [INFO] database P0000004764 main_thread current instance new pid is 4764, check whether it is running...

2018-10-10 15:40:21 [INFO] database P0000004764 main_thread fil_sys_init

2018-10-10 15:40:21 [INFO] database P0000004764 main_thread fil_ts_create ts_id=0 ts_name=SYSTEM

2018-10-10 15:40:21 [INFO] database P0000004764 main_thread fil_ts_create ts_id=1 ts_name=ROLL

……

2018-10-10 15:40:24 [INFO] database P0000004764 main_thread nsvr_process_before_open success.

2018-10-10 15:40:24 [INFO] database P0000004764 main_thread backup control file
d:\dmdbms\data\DAMENG\dm.ctl to file
d:\dmdbms\data\DAMENG\dm_20181010154024_230000.ctl

2018-10-10 15:40:24 [INFO] database P0000004764 main_thread backup control file d:\dmdbms\data\DAMENG\dm.ctl to file d:\dmdbms\data\DAMENG\ctl_bak\dm_20181010154024_249000.ctl succeed

2018-10-10 15:40:24 [INFO] database P0000004764 main_thread SYSTEM IS READY.

……

2018-10-10 15:54:53 [INFO] database P0000004764 dm_sql_thd BACKUP DATABASE BACKUPSET 'd:\dmdbms\data\bak\db_bak_for_encrypt' IDENTIFIED BY ******;

2018-10-10 15:54:53 [INFO] database P0000004764 dm_sql_thd BACKUP DATABASE [DAMENG]

2018-10-10 15:54:53 [INFO] database P0000004764 dm_sql_thd CMD START......

2018-10-10 15:54:53 [INFO] database P0000004764 dm_tskwrk_thd rlog4_buf_apply_info_fill, fill apply lsn value 0!

2018-10-10 15:54:53 [INFO] database P0000004764 dm_redolog_thd rlog4_write_to_file: file[d:\dmdbms\data\DAMENG\DAMENG01.log], handle[0x3a70], offset[8946176], bytes_write[512]

2018-10-10 15:54:53 [INFO] database P0000004764 dm_redolog_thd rlog4_write_to_file: lsn[46192, 46192], time[199439652456, 199440652059, 999603]

2018-10-10 15:54:54 [INFO] database P0000004764 dm_tskwrk_thd rlog4_buf_apply_info_fill, fill apply lsn value 0!

2018-10-10 15:54:54 [INFO] database P0000004764 dm_redolog_thd rlog4_write_to_file: file[d:\dmdbms\data\DAMENG\DAMENG01.log], handle[0x3a70], offset[8946688], bytes_write[512]

2018-10-10 15:54:54 [INFO] database P0000004764 dm_redolog_thd rlog4_write_to_file: lsn[46192, 46192], time[199440652648, 199441654404, 1001756]

2018-10-10 15:54:55 [INFO] database P0000004764 dm_tskwrk_thd rlog4_buf_apply_info_fill, fill apply lsn value 0!

2018-10-10 15:54:55 [INFO] database P0000004764 dm_redolog_thd rlog4_write_to_file: file[d:\dmdbms\data\DAMENG\DAMENG01.log], handle[0x3a70], offset[8947200], bytes_write[512]

2018-10-10 15:54:55 [INFO] database P0000004764 dm_redolog_thd rlog4_write_to_file: lsn[46192, 46192], time[199441654978, 199442725760, 1070782]

2018-10-10 15:54:56 [INFO] database P0000004764 dm_sql_thd rlog4_buf_apply_info_fill, fill apply lsn value 0!

2018-10-10 15:54:56 [INFO] database P0000004764 dm_redolog_thd rlog4_write_to_file: file[d:\dmdbms\data\DAMENG\DAMENG01.log], handle[0x3a70], offset[8947712], bytes_write[512]

2018-10-10 15:54:56 [INFO] database P0000004764 dm_redolog_thd rlog4_write_to_file: lsn[46192, 46192], time[199442725920, 199442995610, 269690]

2018-10-10 15:54:57 [ERROR] database P0000004764 dm_sql_thd CMD END.CODE:[-8216],DESC:[指定或者默认归档目录中找不到完整归档日志,脱机请执行归档修复(repair archive log database 'xxxx/dm.ini')或者联机请刷检查点(select checkpoint(xxx))之后再试(DSC环境下各节点都要做)]

……

2018-10-10 16:06:22 [INFO] database P0000004764 dm_sql_thd BACKUP DATABASE BACKUPSET 'd:\dmdbms\data\trace' TRACE LEVEL 2;

2018-10-10 16:06:22 [INFO] database P0000004764 dm_sql_thd BACKUP DATABASE [DAMENG]

2018-10-10 16:06:22 [INFO] database P0000004764 dm_sql_thd CMD START......

2018-10-10 16:06:25 [INFO] database P0000004764 dm_sql_thd CMD END.CODE:[0]

2018-10-10 16:10:23 [INFO] database P0000004764 dm_chkpnt_thd ckpt info adjust: ckpt_lsn(46192), ckpt_fil(0), ckpt_off(9140736), cur_lsn(46192), next_seq(17845), cur_free(9140736)

……

3.3.9.2 备份还原日志文件

dm_BAKRES_xxx.log 是备份还原日志文件,备份还原日志文件不可配置。dm_BAKRES_xxx.log 是 DM 备份还原在执行备份与还原时生成的日志,包括任务发起进程(联机时为 dmserver 工作线程,脱机时为 dmrman)发送信息以及 AP 进程处理过程信息。每条信息包括生成时间、信息级别、生成日志的进程名称和进程 ID,对于 AP 进程还会生成任务发起进程 ID。另外,为了保证日志内容的完整性,还会记录由全局日志生成接口生成的日志记录。

备份还原日志信息格式为:

时间 + 日志类型(INFO/WARN/ERROR/FATAL/CMD/CMD_PARSE)+ 进程(dmrman/database/dmbakres)+ 进程 ID(P 开头)+ 任务发起进程 ID(PP 开头,显示 dmrman 或者 database 的进程 ID,不存在任务发起进程时显示 4294967295,即 0xFFFFFFFF)+ 日志内容。

如下所示为一段 dm_BAKRES_xxx.log 日志信息示例:

……

2018-10-10 16:06:04 [CMD] database P0000004764 PPID4294967295 BACKUP DATABASE BACKUPSET 'd:\dmdbms\data\bak' TRACE LEVEL 2;

2018-10-10 16:06:04 [CMD] database P0000004764 PPID4294967295 BACKUP DATABASE [DAMENG]

2018-10-10 16:06:04 [INFO] database P0000004764 PPID4294967295 CMD START....

2018-10-10 16:06:04 [INFO] database P0000004764 PPID4294967295 BACKUP DATABASE [DAMENG], execute......

2018-10-10 16:06:04 [ERROR] database P0000004764 PPID4294967295 CMD END.CODE:[-8055],DESC:[备份目录冲突]

……

2018-10-10 16:06:22 [CMD] database P0000004764 PPID4294967295 BACKUP DATABASE BACKUPSET 'd:\dmdbms\data\trace' TRACE LEVEL 2;

2018-10-10 16:06:22 [CMD] database P0000004764 PPID4294967295 BACKUP DATABASE [DAMENG]

2018-10-10 16:06:22 [INFO] database P0000004764 PPID4294967295 CMD START....

2018-10-10 16:06:22 [INFO] database P0000004764 PPID4294967295 BACKUP DATABASE [DAMENG], execute......

2018-10-10 16:06:22 [INFO] database P0000004764 PPID4294967295 connect to dmap with channel[\\.\pipe\DM_PIPE_1384342949-4764_1], tsk_num: [4], code: [0].

2018-10-10 16:06:22 [INFO] dmap P0000012356 PPID4294967295 bakres start cmd process with named pipe [\\.\pipe\DM_PIPE_1384342949-4764_1]......

2018-10-10 16:06:22 [INFO] database P0000004764 PPID4294967295 send CMD [BMML_INIT] by channel [\\.\pipe\DM_PIPE_1384342949-4764_1].

2018-10-10 16:06:22 [INFO] dmap P0000012356 PPID4294967295 bakres receive from named pipe [\.\pipe\DM_PIPE_1384342949-4764_1] success, CMD [BMML_INIT].

2018-10-10 16:06:22 [INFO] dmap P0000012356 PPID0000004764 CMD [BMML_INIT] is ready

2018-10-10 16:06:22 [INFO] database P0000004764 PPID4294967295 CMD CHECK LSN ......

2018-10-10 16:06:22 [INFO] database P0000004764 PPID4294967295 BACKUP DATABASE [DAMENG], collect dbf......

2018-10-10 16:06:22 [INFO] database P0000004764 PPID4294967295 CMD CHECK ......

2018-10-10 16:06:23 [INFO] database P0000004764 PPID4294967295 send CMD [BACKUP_START] by channel [\\.\pipe\DM_PIPE_1384342949-4764_1].

2018-10-10 16:06:23 [INFO] dmap P0000012356 PPID4294967295 bakres receive from named pipe [\\.\pipe\DM_PIPE_1384342949-4764_1] success, CMD [BACKUP_START].

2018-10-10 16:06:23 [INFO] dmap P0000012356 PPID0000004764 CMD [BACKUP_START] is ready

2018-10-10 16:06:23 [INFO] database P0000004764 PPID4294967295 CMD EXEC:
BEGIN_LSN->46193, CUR_LSN->46192, MAXPIECESIZE->131072,
BAK_MAGIC->335245487, PARALLEL_NUM->1,
INI_PATH->d:\dmdbms\data\damengdm.ini,
BAKSET_DIR->d:\dmdbms\data\trace, BKPNAME->trace,
BAKNAME->DB_FULL_DAMENG_20181010_160622_000485, BASE_DIR->none,
BASE_NAME->none, BASE_BEGIN_LSN->-1, BASE_END_LSN->-1

2018-10-10 16:06:23 [INFO] database P0000004764 PPID4294967295 DBF BACKUP SUBS......

2018-10-10 16:06:23 [INFO] database P0000004764 PPID4294967295 send CMD [BACKUP_INIT] by channel [\\.\pipe\DM_PIPE_1384342949-4764_1], parallel_num: [1], base_dir: [], base_name: [], base_begin_lsn: [-1], base_end_lsn: [-1], bakset_dir: [d:\dmdbms\data\trace].

2018-10-10 16:06:23 [INFO] dmap P0000012356 PPID4294967295 bakres receive from named pipe [\\.\pipe\DM_PIPE_1384342949-4764_1] success, CMD [BACKUP_INIT].

2018-10-10 16:06:23 [INFO] dmap P0000012356 PPID0000004764 backup db DAMENG to file ...

2018-10-10 16:06:23 [INFO] dmap P0000012356 PPID0000004764 CMD [BACKUP_INIT] is ready

2018-10-10 16:06:23 [INFO] dmap P0000012356 PPID4294967295 bakres send EXECUTE OVER status by named pipe [\\.\pipe\DM_PIPE_1384342949-4764_1], CODE [0]

2018-10-10 16:06:23 [INFO] database P0000004764 PPID4294967295 send CMD [BACKUP_DBF] by channel [\\.\pipe\DM_PIPE_1384342949-4764_1] for DBF [d:\dmdbms\data\DAMENG\SYSTEM.DBF].

2018-10-10 16:06:23 [INFO] dmap P0000012356 PPID4294967295 bakres receive from named pipe [\\.\pipe\DM_PIPE_1384342949-4764_1] success, CMD [BACKUP_DBF].

2018-10-10 16:06:23 [INFO] dmap P0000012356 PPID0000004764 CMD [BACKUP_DBF] for DBF [d:\dmdbms\data\DAMENG\SYSTEM.DBF] end, code:[0]......

2018-10-10 16:06:23 [INFO] dmap P0000012356 PPID0000004764 CMD [BACKUP_DBF] for DBF [d:\dmdbms\data\DAMENG\SYSTEM.DBF] end, code:[0]......

2018-10-10 16:06:23 [INFO] dmap P0000012356 PPID4294967295 bakres send EXECUTE OVER status by named pipe [\\.\pipe\DM_PIPE_1384342949-4764_1], CODE [0]

2018-10-10 16:06:23 [INFO] database P0000004764 PPID4294967295 total 1 packages processed...

2018-10-10 16:06:23 [INFO] database P0000004764 PPID4294967295 send CMD [BACKUP_DBF] by channel [\\.\pipe\DM_PIPE_1384342949-4764_1] for DBF [d:\dmdbms\data\DAMENG\ROLL.DBF].

2018-10-10 16:06:23 [INFO] dmap P0000012356 PPID4294967295 bakres receive from named pipe [\\.\pipe\DM_PIPE_1384342949-4764_1] success, CMD [BACKUP_DBF].

2018-10-10 16:06:23 [INFO] dmap P0000012356 PPID0000004764 CMD [BACKUP_DBF] for DBF [d:\dmdbms\data\DAMENG\ROLL.DBF] end, code:[0]......

2018-10-10 16:06:24 [INFO] dmap P0000012356 PPID0000004764 CMD [BACKUP_DBF] for DBF [d:\dmdbms\data\DAMENG\ROLL.DBF] end, code:[0]......

2018-10-10 16:06:24 [INFO] dmap P0000012356 PPID4294967295 bakres send EXECUTE OVER status by named pipe [\\.\pipe\DM_PIPE_1384342949-4764_1], CODE [0]

2018-10-10 16:06:24 [INFO] database P0000004764 PPID4294967295 total 3 packages processed...

2018-10-10 16:06:24 [INFO] database P0000004764 PPID4294967295 send CMD [BACKUP_DBF] by channel [\\.\pipe\DM_PIPE_1384342949-4764_1] for DBF [d:\dmdbms\data\DAMENG\\MAIN.DBF].

2018-10-10 16:06:24 [INFO] dmap P0000012356 PPID4294967295 bakres receive from named pipe [\\.\pipe\DM_PIPE_1384342949-4764_1] success, CMD [BACKUP_DBF].

2018-10-10 16:06:24 [INFO] dmap P0000012356 PPID0000004764 CMD [BACKUP_DBF] for DBF [d:\dmdbms\data\DAMENG\MAIN.DBF] end, code:[0]......

2018-10-10 16:06:24 [INFO] dmap P0000012356 PPID0000004764 CMD [BACKUP_DBF] for DBF [d:\dmdbms\data\DAMENG\MAIN.DBF] end, code:[0]......

2018-10-10 16:06:24 [INFO] dmap P0000012356 PPID4294967295 bakres send EXECUTE OVER status by named pipe [\\.\pipe\DM_PIPE_1384342949-4764_1], CODE [0]

2018-10-10 16:06:24 [INFO] database P0000004764 PPID4294967295 total 4 packages processed...

2018-10-10 16:06:24 [INFO] database P0000004764 PPID4294967295 DBF BACKUP MAIN......

2018-10-10 16:06:24 [INFO] database P0000004764 PPID4294967295 BACKUPSET [d:\dmdbms\data\trace] END, CODE [0]......

2018-10-10 16:06:24 [INFO] database P0000004764 PPID4294967295 END_LSN-\>46192.

2018-10-10 16:06:24 [INFO] database P0000004764 PPID4294967295 META GENERATING......

2018-10-10 16:06:24 [INFO] database P0000004764 PPID4294967295 send CMD [BACKUP_META] by channel [\\.\pipe\DM_PIPE_1384342949-4764_1].

2018-10-10 16:06:24 [INFO] dmap P0000012356 PPID4294967295 bakres receive from named pipe [\\.\pipe\DM_PIPE_1384342949-4764_1] success, CMD [BACKUP_META].

2018-10-10 16:06:24 [INFO] dmap P0000012356 PPID0000004764 end the process thread.

2018-10-10 16:06:24 [INFO] dmap P0000012356 PPID0000004764 end the process thread.

2018-10-10 16:06:24 [INFO] dmap P0000012356 PPID0000004764 end the process thread.

2018-10-10 16:06:24 [INFO] dmap P0000012356 PPID0000004764 end the flush thread.

2018-10-10 16:06:25 [INFO] dmap P0000012356 PPID0000004764 CMD [BACKUP_META] is ready.

2018-10-10 16:06:25 [INFO] database P0000004764 PPID4294967295 total 8 packages processed...

2018-10-10 16:06:25 [INFO] database P0000004764 PPID4294967295 BPSP notify subprocess complete, pipe send successfully

2018-10-10 16:06:25 [INFO] dmap P0000012356 PPID4294967295 bakres receive from named pipe [\\.\pipe\DM_PIPE_1384342949-4764_1] success, CMD [COMPLETE].

2018-10-10 16:06:25 [INFO] database P0000004764 PPID4294967295 total 8 packages processed...

2018-10-10 16:06:25 [INFO] database P0000004764 PPID4294967295 BPSP notify subprocess end, pipe send successfully

2018-10-10 16:06:25 [INFO] dmap P0000012356 PPID4294967295 bakres receive from named pipe [\\.\pipe\DM_PIPE_1384342949-4764_1] success, CMD [END].

2018-10-10 16:06:25 [INFO] dmap P0000012356 PPID4294967295 code = 0, bakres CMD [END] begin...

2018-10-10 16:06:25 [INFO] dmap P0000012356 PPID4294967295 bakres CMD [END] tsk node get...

2018-10-10 16:06:25 [INFO] dmap P0000012356 PPID4294967295 bakres CMD [END] end.

2018-10-10 16:06:25 [INFO] dmap P0000012356 PPID4294967295 bakres end cmd process with named pipe [\\.\pipe\DM_PIPE_1384342949-4764_1].

2018-10-10 16:06:25 [INFO] database P0000004764 PPID4294967295 total 8 packages processed!

2018-10-10 16:06:25 [INFO] database P0000004764 PPID4294967295 CMD END.CODE:[0]

……

3.3.9.3 SBT 接口跟踪文件

dm_SBTTRACE_xxx.log 是 SBT 接口跟踪文件,SBT 接口跟踪文件可配置。SBT 接口在打开 TRACE 跟踪(TRACE LEVEL > 1)的情况下生成执行日志,默认文件名为 dm_SBTTRACE_xxx.log,用户可根据需要自行设置文件名。

如下所示为一段 dm_SBTTRACE_xxx.log 日志信息示例:

……

2018-10-10 16:06:23 sbtrestore(filepath=d:\dmdbms\data\bak\bak.meta)

2018-10-10 16:06:23 sbtread(buf != NULL, buf_len = 4096)

2018-10-10 16:06:23 sbtread(buf != NULL, buf_len = 49152)

2018-10-10 16:06:23 sbtread(buf != NULL, buf_len = 25088)

2018-10-10 16:06:23 sbtclose()

2018-10-10 16:06:23 sbtend(del_flag=FALSE)

2018-10-10 16:06:23 sbtbackup(type=1, name=trace.bak)

2018-10-10 16:06:23 sbtwrite(buf != NULL, buf_len = 4096)

2018-10-10 16:06:23 sbtwrite(buf != NULL, buf_len = 5169664)

2018-10-10 16:06:24 sbtwrite(buf != NULL, buf_len = 33554944)

2018-10-10 16:06:24 sbtwrite(buf != NULL, buf_len = 2753024)

2018-10-10 16:06:24 sbtwrite(buf != NULL, buf_len = 33280)

2018-10-10 16:06:24 sbtclose()

2018-10-10 16:06:24 sbtinfo(!NULL)

file [trace.bak] finished, name:[trace.bak],created time:[2018-10-10 16:06:23],expirated time:[2105-12-31 23:59:59],label:[],comment:[]

2018-10-10 16:06:24 sbtbackup(type=3, name=trace.meta)

2018-10-10 16:06:24 sbtwrite(buf != NULL, buf_len = 53248)

2018-10-10 16:06:24 sbtwrite(buf != NULL, buf_len = 4096)

2018-10-10 16:06:25 sbtwrite(buf != NULL, buf_len = 4096)

2018-10-10 16:06:25 sbtwrite(buf != NULL, buf_len = 4096)

2018-10-10 16:06:25 sbtwrite(buf != NULL, buf_len = 4096)

2018-10-10 16:06:25 sbtwrite(buf != NULL, buf_len = 512)

2018-10-10 16:06:25 sbtclose()

……

3.4 使用图形化客户端工具进行备份还原

DM 数据库提供几种类型的图形化客户端管理工具。在 WINDOWS 的 DM 数据库系统,可以通过选择“开始”->“程序”->“达梦数据库”,然后选择具体的某个客户端工具。比如,通过 MANAGER 管理工具可以与数据库进行交互,操作数据库对象和从数据库获取信息;通过控制台工具 CONSOLE 可以完成数据库的配置与监控等。下文分别介绍使用 MANAGER 管理工具联机执行备份还原和使用 CONSOLE 控制台工具脱机执行备份还原。

3.4.1 使用 MANAGER 工具进行联机备份还原

下面将介绍如何使用 DM 的 MANAGER 管理工具来执行联机的备份与还原操作。MANAGER 管理工具主界面如图 3.1 所示:

MANAGER 工具主页面

图3.1 MANAGER工具主页面

MANAGER 工具的对象导航树中的备份节点提供了联机备份还原相关的各项操作。导航树备份节点下面包含四个子节点:库备份、表备份、表空间备份和归档备份。各备份节点的右键菜单中提供了所有可操作的选项,包括新建备份、指定工作目录、备份还原、备份校验、属性等。

备份文件夹节点右键菜单如下:

备份文件夹节点操作选项

图3.2 备份文件夹节点操作选项

备份集节点右键菜单如下:

备份集节点操作选项

图3.3 备份集节点操作选项

3.4.1.1 数据备份

数据备份包括库备份、表备份、表空间备份和归档备份,分别对应导航树备份节点中库备份、表备份、表空间备份和归档备份这四个子节点。点开各子节点,显示当前已经存在的相应备份集名称。四种备份的备份流程基本一致,只是具体可配置的参数有些不同,下面以库备份为例进行介绍。

库备份文件夹节点右键菜单->新建备份,可以打开新建库备份对话框,首页显示的是常规选项页面,如图 3.4 所示:

数据库备份常规选项页面

图3.4 数据库备份常规选项页面

常规选项页面可配置库备份常规参数信息,具体如下:

备份名: 备份的名称。

备份集目录: 备份集的路径,默认为系统默认备份路径加备份名。系统默认的备份路径为 dm.ini 中 BAK_PATH 配置的路径,若未配置,则使用 SYSTEM_PATH 下的 bak 目录。

备份片大小: 备份片的最大大小,如果备份文件超过该大小,则系统自动将备份文件分为多个文件。以 M 为单位。不限制时,系统默认备份文件的最大大小为 2048M。限制时,最小 128M,32 位系统最大 2G,64 位系统最大 128G。

备份描述: 对备份文件的描述,用户可以根据需要填写。

备份类型:

  • 完全备份:对数据库的完全备份,不依赖于其他备份,可以独立地进行数据库还原和恢复。数据库克隆选项,表示进行数据库备份时,仅备份所有的元数据不备份数据。如对于数据库中的表来说,只备份表的定义不备份表中数据。
  • 增量备份:在完全备份或增量备份的基础上进行的备份。进行增量备份时,允许用户自己指定基备份来进行备份,默认使用最近一次备份作为基备份,在该数据库不存在任何备份时,备份类型不能为增量备份。累积增量备份选项的基备份类型只能是完全备份,缺省为差异增量备份。

库备份和表空间备份都可指定备份类型为增量备份,如果选择增量备份,可以为增量备份配置以下参数:

基备份集目录:指定基备份集路径,默认系统会在指定的基备份扫描路径下查找最近一次备份作为基备份。

基备份扫描路径:指定基备份的扫描路径,可以同时指定多个,增量备份时必须保证依赖的所有基备份都可以在指定的基备份扫描路径中找到。

高级选项页面中可以配置一些其他的高级选项,如下图所示:

数据库备份高级选项页面

图3.5 数据库备份高级选项页面

高级选项页面可配置库备份高级参数信息,具体如下:

备份压缩:可以选择压缩或不压缩,通过压缩可以减少备份文件所需要的磁盘空间。默认为不压缩。

压缩级别:压缩的级别。可以设置压缩级别 0~9:0 表示不压缩;1 表示 1 级压缩;9 表示 9 级压缩。压缩级别越高,压缩速度越慢,但压缩比越高。

备份日志:是否需要备份归档日志中的内容。默认备份日志。

加密类型:加密的类型,默认为不加密。具体加密类型如下:

  • 不加密:不对备份文件进行加密处理。
  • 简单口令加密:对备份文件设置口令,但文件内容仍以明文方式存储。
  • 完全数据加密:对备份文件进行完全的加密,备份文件以密文方式存储。

加密密码:当选择简单口令加密或完全数据加密时,需要输入加密密码。

确认密码:当选择简单口令加密或完全数据加密时,需要确认输入的加密密码。

加密算法:加密时使用的算法。在选择简单口令加密和完全数据加密的情况下适用。若未指定,则使用默认算法 AES256_CFB。

介质类型:指定存储备份集的设备类型,目前暂支持磁盘和磁带,默认选择磁盘。

介质参数:使用第三方介质类型(磁带类型)时使用的参数。

跟踪日志:备份过程的跟踪日志路径。系统有默认路径,当日志级别为记录跟踪日志时启用。

日志级别:是否记录跟踪日志。默认不记录。

线程数:备份过程中数据处理过程线程的个数,取值范围 0~64,默认为 4。若指定为 0,则调整为 1;若指定超过当前系统主机核数,则调整为当前系统主机核数。线程数*并行数不得超过 512。

并行数:指定是否执行并行备份,以及执行并行备份的并行数。并行数没有上限,但实际可使用的最大并行数就是目标备份数据文件的个数。若勾选但没有指定并行数,则默认并行数为 4。若未勾选,则认为非并行备份。

拆分块大小:用户指定对于大数据量数据文件并行备份时拆分块的大小,默认为 1GB,最小为 512MB,当指定的拆分块大小小于 512MB 时,系统自动调整为 512MB。若指定并行备份,但未指定拆分块大小,则直接使用默认拆分块大小进行拆分。当数据文件的大小小于拆分块大小时,不执行拆分;当数据文件的大小大于拆分块大小时,执行拆分。并行数不能大于拆分之后的总块数。

DDL 页面可以查看新建库备份的 SQL 语句,右下角的保存按钮也可以保存 SQL 脚本到文件中,如下图所示:

数据库备份查看 DDL 页面

图3.6 数据库备份查看DDL页面

3.4.1.2 备份管理

备份管理包括备份集查看、备份校验、备份删除和指定工作目录,其中备份删除是备份管理的主要功能。下面将分别对这些功能的使用进行介绍。

备份集查看

点击某个备份集节点右键菜单->属性,可以打开备份属性查看对话框,属性列表中可以查看该备份集的信息,包括备份集的元数据信息以及数据库信息,如图 3.7、图 3.8、图 3.9 所示:

备份集常规信息显示页面

图3.7 备份集常规信息显示页面

备份集文件信息显示页面

图3.8 备份集文件信息显示页面

备份集数据库信息显示页面

图3.9 备份集数据库信息显示页面

备份校验

点击某备份集节点右键菜单->备份校验,即可校验备份集的合法性。

备份删除

点击某备份集节点右键菜单->删除,可以删除该备份集。也可以同时选中多个备份节点进行批量删除。

指定工作目录

点击备份文件夹节点右键菜单->指定工作目录,可以指定备份的工作目录,允许同时指定多个工作目录。如果设置了备份工作目录,备份文件夹下会显示所有工作目录下的所有备份。指定工作目录的对话框如下:

指定工作目录页面

图3.10 指定工作目录页面

点击添加按钮可以添加一个工作目录,选中一个工作目录点击删除按钮可以删除一个工作目录。系统有一个默认工作目录,该目录会一直保留无法被删除。

3.4.1.3 数据还原

库备份和表空间备份不支持联机还原,只有表备份支持联机还原。表还原过程中表空间中其他的表还可以正常操作。

点击表备份集节点右键菜单->备份还原,可以打开表备份还原对话框,首页显示的是常规选项页面,如图 3.11 所示:

表还原常规选项页面

图3.11 表还原常规选项页面

常规选项页面可配置表还原常规参数信息,具体如下:

模式名:模式的名称。

表名:表的名称。

备份名:备份的名称,无需填写,系统自动获取。

备份集目录:备份集路径,无需填写,系统自动获取。

索引:指定还原数据后是否重建二级索引。默认重建。

约束:指定还原数据后是否重建约束。默认重建。

表结构:指定是否执行表结构还原。若未勾选表结构,则必须勾选表数据。

表数据:指定是否执行表中数据还原,表数据还原要求还原目标表结构与备份集中表结构完全一致,否则报错,所以在表数据还原时,建议勾选表结构还原执行,减少报错。若未勾选表数据,则必须勾选表结构。表结构和表数据二者,至少要选一个。

表还原高级选项页面如下:

表还原高级选项页面

图3.12 表还原高级选项页面

高级选项页面可配置表还原高级参数信息,具体如下:

介质类型:指定存储备份集的设备类型,目前暂支持磁盘和磁带,默认选择磁盘。

介质参数:使用第三方介质类型(磁带类型)时使用的参数。

加密算法:备份时使用的加密算法。

加密密码:备份时使用的加密密码。

日志级别:是否记录跟踪日志。默认不记录。

跟踪日志:还原过程的跟踪日志路径。系统有默认路径,当日志级别为记录跟踪日志时启用。

3.4.2 使用 CONSOLE 工具进行脱机备份还原

下面将介绍如何使用 DM 控制台工具 CONSOLE 来执行脱机的备份与还原操作。控制台主界面如下图所示:

CONSOLE 工具备份还原主页面

图3.13 CONSOLE工具备份还原主页面

3.4.2.1 数据备份

CONSOLE 工具的控制导航树中提供备份还原节点,单击备份还原节点可以打开备份还原管理界面。在备份还原管理界面中,点击新建备份按钮,打开新建备份对话框,首页显示的是常规选项页面,如图 3.14 所示:

数据库备份常规选项页面-库备份

图3.14 数据库备份常规选项页面-库备份

常规选项页面可配置脱机库备份常规参数信息,具体如下:

INI 文件路径:必填,待备份目标数据库 dm.ini 文件路径。

备份集名:选填,指定生成备份集名称,若未指定,则使用缺省命名规则命名备份集。

备份集目录:选填,指定当前备份集生成路径,若未指定,则在默认备份目录中生成备份集。

备份片限制大小:备份片的最大大小,如果备份文件超过该大小,则系统自动将备份文件分为多个文件。以 M 为单位。不限制时,系统默认备份文件的最大大小为 2048M。限制时,最小 128M,32 位系统最大 2G,64 位系统最大 128G。

备份类型:

  • 完全备份:对数据库的完全备份,不依赖于其他备份,可以独立地进行数据库还原和恢复。数据库克隆选项,表示进行数据库备份时,仅备份所有的元数据不备份数据。如对于数据库中的表来说,只备份表的定义不备份表中数据。
  • 增量备份:在完全备份或增量备份的基础上进行的备份。进行增量备份时,允许用户自己指定基备份来进行备份,默认使用最近一次备份作为基备份,在该数据库不存在任何备份时,备份类型不能为增量备份。累积增量备份选项的基备份类型只能是完全备份,缺省为差异增量备份。

基备份集搜索目录:选填,仅适用于增量备份,指定基备份集的搜索目录,可以同时指定多个,增量备份时必须保证依赖的所有基备份集都可以在指定的基备份集搜索目录中找到。

基备份集目录:选填,仅适用于增量备份,指定基备份集路径,默认系统会在指定的基备份集搜索目录下查找最近一次备份作为基备份。

备份描述:选填,根据实际情况对备份集进行描述。

根据实际需要配置完上述参数后,点击确定按钮就开始执行脱机备份操作了。备份操作可能需要花费一些时间,备份结束后,如果备份成功则弹出备份成功的对话框;如果备份失败,则弹出对话框提示失败原因。

脱机归档备份的常规选项页面如下:

数据库备份常规选项页面-归档备份

图3.15 数据库备份常规选项页面-归档备份

常规选项页面可配置脱机归档备份常规参数信息,具体如下:

INI 文件路径、备份集名、备份集目录以及备份片限制大小的参数介绍请参考上文脱机库备份的常规参数信息。

备份类型:

  • 备份所有归档。缺省情况下,为此项。
  • 备份指定的 LSN
  • 备份指定的时间点

备份归档过滤,满足的条件:

  • 所有已经备份过得归档文件。缺省情况下,为此项。
  • 归档文件已经备份的次数
  • 指定之间之后已经备份的归档文件

备份完删除归档:可选项。归档备份完毕,是否删除归档文件。

备份描述:选填,根据实际情况对备份集进行描述。

脱机备份高级选项页面如下:

数据库备份高级选项页面

图3.16 数据库备份高级选项页面

高级选项页面可配置脱机备份高级参数信息,具体如下:

备份压缩:默认不压缩。选择压缩等级,则可以设置压缩级别 1~9:1 表示 1 级压缩;9 表示 9 级压缩。压缩级别越高,压缩速度越慢,但压缩比越高。

备份日志:选择是否备份日志,默认备份日志。

加密类型:加密的类型,默认为不加密。具体加密类型如下:

  • 不加密:不对备份文件进行加密处理。
  • 简单口令加密:对备份文件设置口令,但文件内容仍以明文方式存储。
  • 完全数据加密:对备份文件进行完全的加密,备份文件以密文方式存储。

加密密码:当选择简单口令加密或完全数据加密时,需要输入加密密码。

确认密码:当选择简单口令加密或完全数据加密时,需要确认输入的加密密码。

加密算法:加密时使用的算法。在选择简单口令加密和完全数据加密的情况下适用。若未指定,则使用默认算法 AES256_CFB。支持使用第三方加密算法。CONSOLE 工具第三方加密算法的使用方法是:1.把自定义的加密算法生成 DLL 动态库;2.把动态库放入 external_crypto_libs 文件夹;3.把文件夹放入 CONSOLE 工具所在的 DM 安装目录的 tool 目录下。

介质类型:指定存储备份集的设备类型,目前暂支持磁盘和磁带,默认选择磁盘。

介质参数:使用第三方介质类型(磁带类型)时使用的参数。

任务线程数:备份过程中数据处理过程线程的个数,取值范围 0~64,默认为 4。若指定为 0,则调整为 1;若指定超过当前系统主机核数,则调整为当前系统主机核数。线程数*并行数不得超过 512。

并行备份:指定是否执行并行备份,以及执行并行备份的并行数和拆分块大小。

  • 并行数:并行数没有上限,但实际可使用的最大并行数就是目标备份数据文件的个数。默认值为 4。
  • 拆分块大小:用户指定对于大数据量数据文件并行备份时拆分块的大小,默认为 1GB,最小为 512MB,当指定的拆分块大小小于 512MB 时,系统自动调整为 512MB。若指定并行备份,但未指定拆分块大小,则直接使用默认拆分块大小进行拆分。当数据文件的大小小于拆分块大小时,不执行拆分;当数据文件的大小大于拆分块大小时,执行拆分。并行数不能大于拆分之后的总块数。

3.4.2.2 备份管理

查看备份集

在备份还原管理页面中,指定搜索目录,点击获取备份按钮,即可获取备份集列表。操作步骤如图 3.16、图 3.17、图 3.18 所示:

指定搜索目录并获取备份

图3.17 指定搜索目录并获取备份

点击获取备份按钮后可以获取到指定搜索目录下的所有备份集,并显示在备份集列表中。选择要查看的备份集,点击属性按钮。

备份集列表显示页面

图3.18 备份集列表显示页面

点击属性按钮后打开备份属性对话框,可查看备份属性。备份属性分为常规、元信息、节点信息、文件信息以及数据库信息五类。其中节点信息只有 DSC 环境的备份集才有。常规属性主要显示备份集相关的属性,如图 3.19 所示:

备份属性-常规

图3.19 备份属性-常规

元信息主要显示备份集本身相关的信息如备份是否为联机备份、备份的范围、备份的加密信息以及备份的压缩信息等,如下图所示:

备份属性-元信息

图3.20 备份属性-元信息

节点信息显示系统中各节点开始/结束 LSN 以及开始/结束日志包序号。单库只有一个节点,集群系统中会有多个节点。如下图所示:

备份属性-节点信息

图3.21 备份属性-节点信息

文件信息显示备份集的所有数据文件和备份片信息。如下图所示:

备份属性-文件信息

图3.22 备份属性-文件信息

数据库信息显示备份库的固有信息。如下图所示:

备份属性-数据库信息

图3.23 备份属性-数据库信息

3.4.2.3 数据还原

数据库还原

在备份还原管理主界面中,点击还原按钮,打开备份还原对话框。还原有三种类型:库还原、归档还原和表空间还原,分别如图 3.24、图 3.25、图 3.26 所示。

备份集还原常规页面-库还原

图3.24 备份集还原常规页面-库还原

常规选项页面可配置库还原常规参数信息,具体如下:

备份集目录:指定用于还原目标数据库的备份集路径。若指定为相对路径,会在默认备份目录下搜索备份集。

INI 路径:使用指定还原目标库的 dm.ini 文件路径的方式还原。

库目录:使用指定还原目标库的数据文件所在目录的方式还原。

指定 INI 路径还原时,可配置以下参数:

  • INI 文件路径:指定还原目标库的 dm.ini 文件路径。
  • 使用备份集 dm.ini 的参数:将备份集中备份的 dm.ini 参数(除路径相关的 INI 参数外),拷贝到当前 dm.ini 上,取而代之。
  • 还原后库的名称:指定还原后库的名称。
  • 还原时覆盖已存在文件:还原数据库时,存在重名的数据文件时,直接覆盖重建,不勾选则报错。
  • 强制执行:若 dm.ini 记录的目标环境是 DMTDD 前端库,且目标环境不满足备份集的副本数和区块策略条件,则可以勾选强制执行来强制还原。

指定库目录还原时,可配置以下参数:

  • 库路径:指定还原目标库的数据文件所在目录,该路径必须已存在。
  • 还原时覆盖已存在文件:还原数据库时,存在重名的数据文件时,直接覆盖重建,不勾选则报错。

备份集还原常规页面-归档还原

图3.25 备份集还原常规页面-归档还原

常规选项页面可配置归档还原常规参数信息,具体如下:

备份集目录:指定用于还原归档的备份集目录。若指定为相对路径,会在默认备份目录下搜索备份集。

还原类型:

  • 还原所有归档。缺省情况下,为此项。
  • 还原指定的 LSN
  • 还原指定的时间点

冲突处理:

  • 生成一条日志,继续还原。默认为此项。
  • 直接报错返回
  • 强制覆盖存在的归档日志

INI 路径:指定还原目标库的 dm.ini 文件路径,将归档日志还原到该库的归档日志目录中。即 dmarch.ini 文件中指定的第一个本地归档目录。

归档目录:还原到指定的目录。

备份集还原常规页面-表空间还原

图3.26 备份集还原常规页面-表空间还原

常规选项页面可配置表空间还原常规参数信息,具体如下:

备份集目录:指定用于还原表空间的备份集目录。若指定为相对路径,会在默认备份目录下搜索备份集。

INI 文件路径:指定还原目标库的 dm.ini 文件路径。

表空间名:指定还原的表空间,可以是用户表空间,也可以是 SYSTEM 系统表空间和 ROLL 回滚表空间。

数据文件:还原指定的数据文件。可以指定数据文件编号或数据文件路径。文件编号,对应动态视图 V​DATAFILE中ID列的值;文件路径,对应动态视图VDATAFILE 中 PATH 或者 MIRROR_PATH 列的值,也可以仅指定数据文件名称(相对路径),与表空间中数据文件匹配时,会使用 SYSTEM 目录补齐。

备份集还原高级页面-高级

图3.27 备份集还原高级页面-高级

高级选项页面可配置备份还原高级参数信息,具体如下:

基备份集搜索目录:指定基备份集搜索目录。

映射文件:用于指定存放还原目标路径的映射文件路径,即备份集里面的数据文件的路径。也可以生成或编辑映射文件。当参数备份集目录指定的路径和映射文件中指定的路径不一致时,以映射文件中指定的路径为主。

介质类型:指定存储备份集的设备类型,目前暂支持磁盘和磁带,默认选择磁盘。

介质参数:使用第三方介质类型(磁带类型)时使用的参数。

还原密码:指定备份时使用的加密密码,供还原过程解密使用。

加密算法:指定备份时使用的加密算法,供还原过程解密使用,若未指定,则使用默认算法 AES256_CFB。支持使用第三方加密算法。

任务线程数:指定还原过程中用于处理解压缩和解密任务的线程个数,取值范围 0~64,默认为 4。若指定为 0,则调整为 1;若指定超过当前系统主机核数,则调整为当前系统主机核数。

WITH CHECK:指定还原前校验备份集数据完整性。默认不校验。

生成映射文件

数据库还原时可选择映射文件进行还原,映射文件用来指定还原后数据库的数据文件路径。CONSOLE 工具中生成映射文件有两种方式:一种是在备份还原页面的高级选项页面中的映射文件选项右侧点击生成按钮;另外一种是在备份还原主页面中,点击生成映射文件按钮。这里介绍后面一种映射文件生成方式。

打开生成映射文件对话框,页面如图 3.28 所示:

生成映射文件对话框

图3.28 生成映射文件对话框

生成映射文件对话框可配置生成映射文件所需的常规参数信息,具体如下:

备份集目录:必填,待生成映射文件的备份集目录。

介质类型:指定存储备份集的设备类型,目前暂支持磁盘和磁带,默认选择磁盘。

介质参数:使用第三方介质类型(磁带类型)时使用的参数。

INI 路径:选填,指定还原目标库的 dm.ini 文件路径。INI 路径和库目录必选其一。

库目录:选填,指定还原目标库的路径。INI 路径和库目录必选其一。

映射文件:必填,生成映射文件路径。

根据实际需要配置好上述参数后,点击确定按钮,执行生成映射文件操作。如果生成映射文件成功,则弹出生成映射文件成功的对话框;如果生成映射文件失败,则弹出对话框提示失败原因。

3.4.2.4 数据恢复

在备份还原管理界面中,点击恢复按钮,打开备份恢复对话框。有两种级别的恢复:库恢复和表空间恢复。

3.4.2.4.1 库恢复

数据库恢复有两种类型。

  • 从备份集恢复
  • 指定归档恢复

以下分别进行介绍。

从备份集恢复

从备份集恢复页面

图3.29 从备份集恢复页面

如果选择从备份集恢复,则需要配置以下参数:

强制执行:若恢复到 DMTDD 前端库,且恢复的 REDO 日志中包含创建表空间的记录,则可以指定该选项来强制创建表空间而忽略 REDO 日志中对该表空间的副本数和区块策略的严格限制。

INI 文件路径:必填,待恢复目标数据库的 dm.ini 文件路径。

备份集目录:必填,指定待恢复备份集路径。

介质类型:指定存储备份集的设备类型,目前暂支持磁盘和磁带,默认选择磁盘。

介质参数:使用第三方介质类型(磁带类型)时使用的参数。

恢复密码:指定备份时使用的加密密码,供恢复过程解密使用。

加密算法:指定备份时使用的加密算法,供恢复过程解密使用,若未指定,则使用默认算法 AES256_CFB。支持使用第三方加密算法。

指定归档恢复

指定归档恢复,主要有两种类型:

1)没有经过还原操作,直接在目标库上执行恢复操作。这种恢复主要针对一些已经滞后的库,用最新的归档把目标库恢复到某个时间点,或者恢复到最新的状态。

2)经过了还原操作,这时需要借助归档把目标恢复到一个指定的时间点。可能还原的备份集是 WITHOUT LOG 的备份集,没有办法执行从备份集恢复;或者希望恢复到更新的状态,而从备份集恢复又不能够满足要求,所以需要借助归档恢复到某个时间点。

在未指定恢复时间或者恢复 LSN 号时,指定归档恢复默认恢复到最新状态,有多少归档就会重做多少。

注意

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

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

指定归档恢复页面如下图所示:

指定归档恢复页面

图3.30 指定归档恢复页面

如果选择指定归档恢复,则需要配置以下参数:

强制执行:若恢复到 DMTDD 前端库,且恢复的 REDO 日志中包含创建表空间的记录,则可以指定该选项来强制创建表空间而忽略 REDO 日志中对该表空间的副本数和区块策略的严格限制。

INI 文件路径:必填,待恢复目标数据库的 dm.ini 文件路径。

归档日志目录:必填,通过添加、删除按钮配置归档日志目录。

数据库 Magic:指定本地归档日志对应数据库的 DB_MAGIC,若不指定,则默认使用目标恢复数据库的 DB_MAGIC。

恢复时间:指定重做本地归档的结束时间。如果指定的结束时间早于备份结束时间,忽略该参数,重做所有小于备份结束 LSN(END_LSN)的 REDO 日志,将系统恢复到备份结束时间点的状态,此时并不能精确恢复到 END_LSN,只能保证重演到 END_LSN 之后的第一个时间戳日志,该日志对应的 LSN 值略大于 END_LSN。

恢复 LSN 号:指定重做本地归档的结束 LSN 值。如果指定的 LSN 小于备份结束 LSN(END_LSN),则报错。

根据实际需要选择对应的恢复类型,配置对应的参数后,点击确定按钮即开始执行对应恢复操作。如果恢复成功,则弹出恢复成功的对话框;如果恢复失败,则弹出对话框提示失败原因。

3.4.2.4.2 表空间恢复

表空间恢复页面

图3.31 表空间恢复页面

如果选择表空间恢复,则需要配置以下参数:

INI 文件路径:必填,待恢复目标表空间所在数据库的 dm.ini 文件路径。

表空间名:必填,指定待恢复的表空间名。

归档日志目录:必填,通过添加、删除按钮配置归档日志目录。

数据库 Magic:指定本地归档日志对应数据库的 DB_MAGIC,若不指定,则默认使用目标恢复数据库的 DB_MAGIC。

配置对应的参数后,点击确定按钮即开始执行对应恢复操作。如果恢复成功,则弹出恢复成功的对话框;如果恢复失败,则弹出对话框提示失败原因。

3.4.2.5 数据库更新

更新 DB_MAGIC 是数据库还原之后,必须执行的一步。表空间等其他类型的还原不需要执行这一步。

对于联机备份的备份集,对目标库执行完还原操作后,如果仅希望把目标库恢复到备份的时间点,可以借助更新 DB_MAGIC 把目标库恢复到备份结束的时间点。这种情况的恢复要求联机备份集是使用 WITHOUT LOG 类型的备份,且要注意只能恢复到备份结束的时间点。

对于脱机备份的备份集,或者联机备份的备份集中不需要重做联机日志的情况,在执行完还原操作后允许执行更新 DB_MAGIC 操作,仅仅把目标库恢复到备份结束的时间点。

在备份还原管理界面中,点击更新 DB_Magic 按钮,打开更新 DB_MAGIC 对话框。更新 DB_MAGIC 对话框如下图所示:

更新 DB_MAGIC 页面

图3.32 更新DB_MAGIC页面

如果选择更新 DB_MAGIC 恢复,则需要配置以下参数:

INI 文件路径:必填,待恢复目标数据库的 dm.ini 文件路径。

3.4.2.6 归档修复

归档修复会对目标库的 dmarch.ini 文件中配置的所有本地归档日志目录进行修复。

在备份还原管理界面中,点击归档修复按钮,打开归档修复对话框。归档修复对话框如下图所示:

归档修复页面

图3.33 归档修复页面

如果选择归档恢复,则需要配置以下参数:

dm.ini 路径:必填,指定待修复归档的数据库对应的 dm.ini 文件路径。

3.4.2.7 默认配置

使用默认配置,配置 CONSOLE 还原时默认的存储介质类型、备份集搜索目录、归档日志搜索目录、跟踪日志文件等参数。

在备份还原管理界面中,点击默认配置按钮,打开默认配置对话框。默认配置对话框如下图所示:

默认配置页面

图3.34 默认配置页面

如果选择默认配置,则需要配置以下参数:

介质类型:指定存储备份集的设备类型,目前暂支持磁盘和磁带,默认选择磁盘。

介质参数:使用第三方介质类型(磁带类型)时使用的参数。

启用日志跟踪:指定是否启用日志跟踪。

日志跟踪文件:指定介质存储过程中使用的跟踪日志文件路径。

备份集搜索目录:通过添加、编辑、删除按钮配置备份集搜索目录。

归档日志搜索目录:通过添加、编辑、删除按钮配置归档日志搜索目录。

DMAP 端口:指定 DMAP 端口号。

3.4.2.8 校验备份集

校验备份集是否合法。

在备份还原管理界面中,点击校验备份集按钮,打开校验备份集对话框。校验备份集对话框如下图所示:

校验备份集页面

图3.35 校验备份集页面

如果选择校验备份集,则需要配置以下参数:

备份集目录:必填,指定待校验备份集路径。

介质类型:指定存储备份集的设备类型,目前暂支持磁盘和磁带,默认选择磁盘。

介质参数:使用第三方介质类型(磁带类型)时使用的参数。

INI 文件路径:数据库的 dm.ini 文件路径,若指定,则该数据库的默认备份目录将作为备份集搜索目录之一。

微信扫码
分享文档
扫一扫
联系客服