物理备份

归档配置

通过 dm.ini 和 dmarch.ini 可以配置本地归档。 dmarch.ini 生效的前提是 dm.ini 中的参数 ARCH_INI 置为 1。dmarch.ini 可以进行本地归档和远程归档的设置,DM 备份与还原过程中使用的日志均为本地归档日志。

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

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

配置本地归档

归档配置有两种方式:一是联机归档配置,数据库实例启动情况下,使用 SQL 语句完成 dmarch.iniARCH_INI 配置;二是手动配置归档,数据库实例未启动的情况下,手动编写 dmarch.ini 文件和设置参数 ARCH_INI。下面将分别说明这两种归档如何配置:

  • 联机配置归档

使用 SQL 语句配置本地归档,语法如下:

ALTER DATABASE <ADD|MODIFY|DELETE> ARCHIVELOG <归档配置语句>;
<归档配置语句>::= 'DEST = <归档目标>,TYPE = <归档类型>'
<归档类型>::=<local 方式>|<remote 方式>
<local 方式>::=LOCAL [,FILE_SIZE = <文件大小>]
[,SPACE_LIMIT = <空间大小限制>]
<remote 方式>::=REMOTE [,FILE_SIZE = <文件大小>]
[,SPACE_LIMIT = <空间大小限制>],INCOMING_PATH = <归档存放路径>

联机归档配置操作步骤如下所示:

  1. 修改数据库为 Mount 状态
alter DATABASE MOUNT
  1. 配置本地归档
ALTER DATABASE ADD ARCHIVELOG 'DEST = /home/dm_arch/arch, TYPE = local,FILE_SIZE = 1024, SPACE_LIMIT = 2048';
  1. 开启归档模式
ALTER DATABASE ARCHIVELOG;
  1. 修改数据库为 Open 状态
ALTER DATABASE OPEN;
  • 手动配置本地归档
  1. 关闭数据库
  2. 在 dm.ini 所在目录,创建 dmarch.ini 文件。dmarch.ini 文件内容如下:
        [ARCHIVE_LOCAL1]
        ARCH_TYPE = LOCAL
        ARCH_DEST = /home/dm_arch/arch
        ARCH_FILE_SIZE = 1024
        ARCH_SPACE_LIMIT = 2048
  1. 编辑 dm.ini 文件,设置参数 ARCH_INI=1
  2. 启动数据库实例,数据库已运行于归档模式。
注意

联机备份时,关闭已配置的本地归档之后再重新打开,会造成归档文件中部分日志缺失,备份时检查归档文件连续性时将会报错。存在该类操作时,用若要避免该错误,备份前需要调用 checkpo int(100) 主动刷新检查点。

启动 DMAP

备份集备份还原实现策略有两种:DMAP 辅助进程方式和无辅助进程方式。用户可通过 DM.INI 参数 bak_use_ap 来选择(DMRMAN 使用参数 use_ap),bak_use_ap 取值 1、2。默认为 1。

  • DMAP 辅助进程方式

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

  • 无辅助进程方式

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

  • 启动 DMAP,手动启动 DMAP,有两种途径
    • 一是启动 DM 服务查看器中的 DmAPService
    • 二是手动启动 DMAP 执行码,DMAP 执行码位于 DM 安装目录的 bin 子目录下。除此之外,Linux 下,还可以调用 bin 目录下的 DmAPService 脚本。
注意

DMAP 产生管道的命名为 DM_PIPE_DMAP_LSNR,目录在 dmdbms_home 的 bin 目录下。非 Windows 环境中对应管道文件名称为 DM_PIPE_DMAP_LSNR_RDDM_PIPE_DMAP_LSNR_WR

非 Windows 环境中,DMAP 退出后,剩下的管道文件都是垃圾文件,直接删除即可。

物理备份还原是对数据库的操作系统物理文件(如数据文件、控制文件和日志文件等)的备份还原。例如使用 RMAN 工具进行的备份还原。

联机备份

介绍在数据库在使用的情况下,利用 disql 工具或图形化管理工具 SQL 编辑区实现数据文件的备份。执行以下命令:

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

数据库备份

在 disql 工具或图形化管理工具 SQL 编辑区中使用 BACKUP 语句可以备份整个数据库,执行以下命令:

BACKUP DATABASE FULL BACKUPSET '/opt/dmdbms/BAK/db_full_bak_01';
  • 指定备份集路径为 /home/dm_bak/db_bak_3_01,执行以下命令:
BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_01';
  • 创建备份集,备份名设置为 WEEKLY_FULL_BAK,执行以下命令:
BACKUP DATABASE TO WEEKLY_FULL_BAK BACKUPSET '/home/dm_bak/db_bak_3_02';
  • 创建备份为备份集添加描述信息为 完全备份,执行以下命令:
BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_04' BACKUPINFO '完全备份';
  • 创建备份限制备份片大小为 300 MB,执行以下命令:
BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_05' MAXPIECESIZE 300;
  • 执行备份压缩,压缩级别设置为 5,执行以下命令:
BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_06' COMPRESSED LEVEL 5;
  • 创建并行备份,指定并行数为 8,执行以下命令:
BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_07' PARALLEL 8;
  • 基于 /home/dm_bak 全量备份的 增量备份,执行以下命令:
BACKUP DATABASE INCREMENT WITH BACKUPDIR '/home/dm_bak' BACKUPSET '/home/dm_bak/db_increment_bak_02';

表空间备份

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 <拆分块大小>]];
注意
  • 当备份数据超过限制大小时,会生成新的备份文件,新的备份文件名是初始文件名后加文件编号。
  • 系统处于归档模式下时,才允许进行表空间备份。
  • Mount 状态下,不允许进行表空间备份。
  • MPP 环境不允许进行表空间备份。
  • 完全备份单个表空间,执行以下命令:
BACKUP TABLESPACE MAIN FULL BACKUPSET '/home/dm_bak/ts_full_bak_01';
  • 增量备份指定备份目录,以备份 MAIN 表空间为例,指定 BASE_ON 参数执行增量备份,执行以下命令:
BACKUP TABLESPACE MAIN INCREMENT WITH BACKUPDIR '/home/dm_bak'BACKUPSET '/home/dm_bak/ts_increment_bak_02';

上面的备份语句中指定的 INCREMENT 参数表示执行的备份类型为增量备份,不可省略

  • 若要创建累积增量备份,还需要指定 CUMULATIVE 参数,否则缺省为差异增量备份
  • 基备份不在默认备份目录,WITH BACKUPDIR 参数必须指定,用于搜索基备份集。

表备份

BACKUP TABLE <表名>
[TO <备份名>]
BACKUPSET ['<备份集路径>'] [DEVICE TYPE <介质类型> [PARMS '<介质参数>']]
[BACKUPINFO '<备份集描述>']
[MAXPIECESIZE <备份片限制大小>]
[IDENTIFIED BY <加密密码>[WITH ENCRYPTION<TYPE>][ENCRYPT WITH <加密算法>]]
[COMPRESSED [LEVEL <压缩级别>]]
[TRACE FILE '<trace 文件名>'] [TRACE LEVEL <trace 日志级别>]
注意
  • 表备份均为联机完全备份
  • 不需配置归档日志
  • 没有增量备份
  • 以备份 TAB_01 为例,执行以下命令:
BACKUP TABLE TAB_01 BACKUPSET '/home/dm_bak/tab_bak_01';

备份目录管理

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:目录添加成功;其它情况下报错。

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:目录为库默认备份路径;其他情况报错。

SF_BAKSET_BACKUP_DIR_REMOVE_ALL

清理全部备份目录, 默认备份目录除外,执行以下命令:

INT SF_BAKSET_BACKUP_DIR_REMOVE_ALL ()
  • 返回值

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

备份集校验与删除

SF_BAKSET_CHECK

对备份集进行校验, 执行以下命令:

INT SF_BAKSET_CHECK(
device_type varchar,
bakset_pathvarchar(256))
  • 参数说明

device_type:device_type:设备类型,disk 或 tape。
bakset_path:待校验的备份集目录。

  • 返回值

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

SF_BAKSET_REMOVE

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

IINT SF_BAKSET_REMOVE (
device_type varchar,
backsetpath varchar(256),
option integer)
  • 参数说明

    • device_type:设备类型,disk 或 tape。
    • backsetpath:待删除的备份集目录。
    • Option:删除备份集选项,0 默认删除,1 级联删除。可选参数。并行备份集中子备份集不允许单独删除。目标备份集被其他备份集引用为基备份的,默认删除,报错;级联删除情况下,会递归将相关的增量备份也删除。
  • 返回值

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

SF_BAKSET_REMOVE_BATCH

批量删除满足指定条件的所有备份集, 执行以下命令:

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:备份集目录删除成功,其它情况下报错。

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 界面输入以下命令:

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';
SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK','/home/dm_bak');
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);
BACKUP TABLE TAB_FOR_BATCH_DEL BACKUPSET'/home/dm_bak/tab_bak_for_batch_del';
SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK','/home/dm_bak');
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';
SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK','/home/dm_bak');
CALL SP_ARCH_BAKSET_REMOVE_BATCH('DISK', NOW());

脱机备份

启动 DMRMAN

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

  • 启动DMRMAN

进入数据库安装目录的 bin 目录下,例如 Linux 下的目录为 /opt/dmdbms/bin,执行以下命令:

./dmrman
  • 退出 DMRMAN

在 DMRMAN 命令窗口中执行 exit。

备份数据库

在 DMRMAN 下执行以下命令:

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 <拆分块大小>]];
  • 全库备份,在 DMRMAN 下执行以下命令:
BACKUP  DATABASE  '/opt/dmdbms/data/DAMENG/dm.ini'  FULL  BACKUPSET '/home/dm_bak/db_full_bak_01';
  • 增量备份,在 DMRMAN 下执行以下命令:
BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' INCREMENT WITH BACKUPDIR '/home/dm_bak' BACKUPSET '/home/dm_bak/db_increment_bak_02';
注意
  • 增量备份指基于指定的库的某个备份(完全备份或者增量备份),备份自该备份以来所有发生修改了的数据页。脱机增量备份要求两次备份之间数据库必须有操作,否则备份会报错。
  • WITH BACKUPDIR 参数用于搜索基备份集。
  • INCREMENT 参数表示执行的备份为增量备份,增量备份该参数不可省略。
  • 校验特定的备份集,在 DMRMAN 下执行以下命令:
BACKUP  DATABASE  '/opt/dmdbms/data/DAMENG/dm.ini'  FULL  BACKUPSET '/home/dm_bak/db_full_bak_01';
CHECK BACKUPSET '/home/dm_bak/db_full_bak_01';

备份集删除

  • 删除特定备份集,每次只能删除一个备份集,在 DMRMAN 下执行以下命令:
BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET '/home/dm_bak/db_bak_for_remove_01';
REMOVE BACKUPSET '/home/dm_bak/db_bak_for_remove_01';
  • 备份集在数据库默认备份目录,默认目录在 dm.ini 参数 BAK_PATH,执行以下命令:
BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET'db_bak_for_remove_01';
REMOVE BACKUPSET 'db_bak_for_remove_01' DATABASE '/opt/dmdbms/data/DAMENG/dm.ini';
  • 备份集为其他备份集的基备份且备份集都在数据库默认备份目录下,执行以下命令:
BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET'db_bak_for_remove_01';
BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' INCREMENT
BACKUPSET'db_bak_for_remove_01_incr';
REMOVE BACKUPSET 'db_bak_for_remove_01_incr' DATABASE
'/opt/dmdbms/data/DAMENG/dm.ini' CASCADE;
  • 批量删除所有备份,执行以下命令:
BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET'/home/dm_bak/db_bak_for_remove_02';
REMOVE BACKUPSETS WITH BACKUPDIR '/home/dm_bak';
微信扫码
分享文档
扫一扫
联系客服