归档配置
通过 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,即 1GB |
| ARCH_SPACE_LIMIT | REDO 日志归档空间限制,当所有本地归档文件达到限制值时,系统自动删除最老的归档文件。0 表示无空间限制,取值范围(1024 MB~4294967294 MB),缺省为 0 |
| ARCH_INCOMING_PATH | 仅 REMOTE 归档有效,对应远程归档存放在本节点的实际路径 |
配置本地归档
归档配置有两种方式:一是联机归档配置,数据库实例启动情况下,使用 SQL 语句完成 dmarch.ini 和 ARCH_INI 配置;二是手动配置归档,数据库实例未启动的情况下,手动编写 dmarch.ini 文件和设置参数 ARCH_INI。下面将分别说明这两种归档如何配置。
- 联机配置归档
使用 SQL 语句配置本地归档,语法如下:
ALTER DATABASE <ADD|MODIFY|DELETE> ARCHIVELOG <归档配置语句>; |
联机归档配置操作步骤如下所示:
- 修改数据库为 Mount 状态
alter DATABASE MOUNT |
- 配置本地归档
ALTER DATABASE ADD ARCHIVELOG 'DEST = /home/dm_arch/arch, TYPE = local,FILE_SIZE = 1024, SPACE_LIMIT = 2048'; |
- 开启归档模式
ALTER DATABASE ARCHIVELOG; |
- 修改数据库为 Open 状态
ALTER DATABASE OPEN; |
- 手动配置本地归档
- 关闭数据库
- 在 dm.ini 所在目录,创建 dmarch.ini 文件。dmarch.ini 文件内容如下:
[ARCHIVE_LOCAL1] |
- 编辑 dm.ini 文件,设置参数
ARCH_INI=1 - 启动数据库实例,数据库已运行于归档模式。
注意联机备份时,关闭已配置的本地归档之后再重新打开,会造成归档文件中部分日志缺失,备份时检查归档文件连续性时将会报错。存在该类操作时,用若要避免该错误,备份前需要调用 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 脚本。
- 一是启动 DM 服务查看器中的
注意DMAP 产生管道的命名为 DM_PIPE_DMAP_LSNR,目录在 dmdbms_home 的 bin 目录下。非 Windows 环境中对应管道文件名称为
DM_PIPE_DMAP_LSNR_RD和DM_PIPE_DMAP_LSNR_WR。
原则上,一台主机上仅允许启动一个 DMAP 实例,否则可能会产生不可预料的结果。非 Windows 环境中,DMAP 退出后,剩下的管道文件都是垃圾文件,直接删除即可。
物理备份还原是对数据库的操作系统物理文件(如数据文件、控制文件和日志文件等)的备份还原。例如使用 RMAN 工具进行的备份还原。
联机备份
介绍在数据库在使用的情况下,利用 disql 工具或图形化管理工具 SQL 编辑区实现数据文件的备份。执行以下命令:
BACKUP DATABASE [[[FULL] [DDL_CLONE]]| |
数据库备份
在 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] |
注意
- 当备份数据超过限制大小时,会生成新的备份文件,新的备份文件名是初始文件名后加文件编号。
- 系统处于归档模式下时,才允许进行表空间备份。
- 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 <表名> |
注意
- 表备份均为联机完全备份
- 不需配置归档日志
- 没有增量备份
- 以备份 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:待删除的备份目录对应存储介质类型。待删除的备份目录对应存储介质类型,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:device_type:设备类型,disk 或 tape。
bakset_path:待校验的备份集目录。返回值
1:备份集目录存在且合法;否则报错。
SF_BAKSET_REMOVE
删除指定设备类型和指定备份集目录的备份集。一次只检查一个合法 .meta 文件,然后删除对应备份集;若存在非法或非正常备份的 .meta 文件,则报错或直接返回,不会接着检查下一个.meta 文件;若同一个备份集下还存在其它备份文件或备份集,则只删除备份文件,不会删除整个备份集。执行以下命令:
IINT SF_BAKSET_REMOVE ( |
参数说明
device_type:设备类型,disk 或 tape。
backsetpath:待删除的备份集目录。
Option:删除备份集选项,0 默认删除,1 级联删除。可选参数。并行备份集中子备份集不允许单独删除。目标备份集被其他备份集引用为基备份的,默认删除,报错;级联删除情况下,会递归将相关的增量备份也删除返回值
1:备份集目录删除成功,其它情况下报错。
SF_BAKSET_REMOVE_BATCH
批量删除满足指定条件的所有备份集,执行以下命令:
INT SF_BAKSET_REMOVE_BATCH ( |
参数说明
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:设备类型,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:设备类型,disk 或 tape。指定 NULL,则忽略存储设备的区分。
end_time:删除备份集生成的结束时间,仅删除 end_time 之前的备份集,必须指定。
ts_name:表空间名,若未指定,则认为删除所有满足条件的表空间备份集。在 SQL 界面输入以下命令:
BACKUP TABLESPACE MAIN BACKUPSET '/home/dm_bak/ts_bak_for_batch_del'; |
SP_TAB_BAKSET_REMOVE_BATCH
批量删除指定表对象及指定时间之前的表备份集。使用该方法前,需要先使用 SF_BAKSET_BACKUP_DIR_ADD 添加将要删除的备份集目录,否则只删除默认备份路径下的备份集。执行以下命令:
SP_TAB_BAKSET_REMOVE_BATCH ( |
参数说明
device_type:设备类型,disk 或 tape。指定 NULL,则忽略存储设备的区分。
end_time:删除备份集生成的结束时间,仅删除 end_time 之前的备份集,必须指定。
sch_name:表所属的模式名。
tab_name:表名,只要模式名和表名有一个指定,就认为需要匹配目标;若均指定为NULL,则认为删除满足条件的所有表备份。在 SQL 界面输入以下命令:
CREATE TABLE TAB_FOR_BATCH_DEL(C1 INT); |
SP_ARCH_BAKSET_REMOVE_BATCH
批量删除指定时间之前的归档备份集。使用该方法前,需要先使用 SF_BAKSET_BACKUP_DIR_ADD 添加将要删除的备份集目录,否则只删除默认备份路径下的备份集。执行以下命令:
SP_ARCH_BAKSET_REMOVE_BATCH ( |
参数说明
device_type:设备类型,disk 或 tape。指定 NULL,则忽略存储设备的区分。
end_time:删除备份集生成的结束时间,仅删除 end_time 之前的备份集,必须指定。在 SQL 界面输入以下命令:
BACKUP ARCHIVELOG BACKUPSET '/home/dm_bak/arch_bak_for_batch_del'; |
脱机备份
启动 DMRMAN
DMRMAN (DM RECOVERY MANEGER) 是 DM 的脱机备份还原管理工具,由它来统一负责库级脱机备份、脱机还原、脱机恢复等相关操作,该工具支持命令行指定参数方式和控制台交互方式执行,降低了用户的操作难度。
- 启动DMRMAN
进入数据库安装目录的 bin 目录下,例如 linux 下的目录为 /opt/dmdbms/bin,执行以下命令:
./dmrman |
- 退出 DMRMAN
在 DMRMAN 命令窗口中执行 exit。
备份数据库
在 DMRMAN 下执行以下命令:
BACKUP DATABASE '<INI 文 件 路 径 >' [[[FULL][DDL_CLONE]] |INCREMENT |
- 全库备份,在 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'; |
备份集删除
- 删除特定备份集,每次只能删除一个备份集,在 DMRMAN 下执行以下命令:
BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' 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'; |
- 备份集为其他备份集的基备份且备份集都在数据库默认备份目录下,执行以下命令:
BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET'db_bak_for_remove_01'; |
- 批量删除所有备份,执行以下命令:
BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET'/home/dm_bak/db_bak_for_remove_02'; |




