注册
DM8 数据库备份恢复与快速装载
培训园地/ 文章详情 /

DM8 数据库备份恢复与快速装载

DM_184112 2026/09/04 86 0 0

1 数据库物理备份

物理备份针对数据库物理存储层。DM 会扫描数据库文件中已分配、已使用的数据页并保存到备份集,不关心这些页属于哪一张具体的业务表。它更适合整库灾备、故障恢复、时间点恢复等场景。官方文档将物理备份分为联机备份与脱机备份。

1.1 联机备份的前置条件:归档

联机库级、表空间和归档备份需要数据库处于归档模式。原因是备份期间数据库仍有事务写入,为保证备份一致性,需要保留这段时间产生的 REDO 日志。表级物理备份是例外:表备份不要求开启归档。

-- DIsql 中进行联机归档配置示例
ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE ADD ARCHIVELOG 'DEST=/dmdba/dmarch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=20480';
ALTER DATABASE OPEN;

1.2 命令行联机全量备份

最直接的方式是在 DIsql 中执行 BACKUP DATABASE。数据库必须处于 OPEN 状态。FULL 可以显式写出,也可以省略,默认即为完全备份。
BACKUP DATABASE FULL BACKUPSET '/home/dmdba/backup/physical/db_full_01';
1.3 增量备份
增量备份只备份相对某个基础备份后发生变化的数据页,速度和空间开销通常小于完全备份。实际策略中常见“每周一次全量 + 每天一次增量”。恢复时需要依赖基备份,因此全量和增量备份集不能随意删除。

BACKUP DATABASE INCREMENT WITH BACKUPDIR '/home/dmdba/backup/physical' BACKUPSET '/home/dmdba/backup/physical/db_inc_01';
1.4 表空间、表与归档备份
-- 表空间完全备份
BACKUP TABLESPACE MAIN FULL BACKUPSET '/home/dmdba/backup/physical/ts_main_full';

-- 表空间增量备份
BACKUP TABLESPACE MAIN INCREMENT WITH BACKUPDIR '/home/dmdba/backup/physical' BACKUPSET '/home/dmdba/backup/physical/ts_main_inc';

-- 表备份:不要求归档,且只有完全备份
BACKUP TABLE SYSDBA.EXP_TEST BACKUPSET '/home/dmdba/backup/physical/tab_exp_test';

-- 归档日志备份
BACKUP ARCHIVE LOG ALL BACKUPSET '/home/dmdba/backup/physical/arch_bak_01';

1.5 Manager 管理工具进行联机备份
官方流程基本为:

  1. 连接目标数据库,在对象树中展开“备份”。
  2. 以整库备份为例,右键“库备份”并选择“新建备份”。
  3. 在“常规”页设置备份集名称、存储目录、备份片大小、备份类型和描述。
  4. 在“高级”页按需要设置压缩、压缩级别、日志、加密等属性。
  5. 执行备份,完成后在“库备份”下查看生成的备份集。
  6. 可右键备份集查看属性、文件信息和数据库信息,也可执行“备份校验”或删除备份集。
    1.6 定时作业备份
  7. 在 Manager 中展开“代理 → 作业”,右键“新建作业”。
  8. 填写作业名称和描述,例如 DAILY_INC_BAK。
  9. 新增作业步骤,在步骤类型中选择数据库备份并配置备份方式/目录。
  10. 配置调度时间,例如每天 02:00 执行增量备份。
  11. 保存并启用作业。
  12. 运行后右键该作业,查看“历史作业信息”,确认是否成功。
    1.6.1 实际用到的相关备份策略
--创建代理环境
SP_INIT_JOB_SYS(1);
--周五全备
call SP_CREATE_JOB('full_bak',1,0,'',0,0,'',0,'full_bak');
call SP_JOB_CONFIG_START('full_bak');
call SP_ADD_JOB_STEP('full_bak', 'full_bak', 6, '01000000/data/dmbak', 1, 1, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('full_bak', 'full_bak', 1, 2, 1, 32, 0, '23:00:00', NULL, '2026-06-01 23:00:00', NULL, '');
call SP_JOB_CONFIG_COMMIT('full_bak');
--每日增量
call SP_CREATE_JOB('incr_bak',1,0,'',0,0,'',0,'incr_bak');
call SP_JOB_CONFIG_START('incr_bak');
call SP_ADD_JOB_STEP('incr_bak', 'incr_bak', 6, '10000000/data/dmbak/|/data/dmbak/', 0, 0, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('incr_bak', 'incr_bak', 1, 2, 1, 95, 0, '23:00:00', NULL, '2026-06-01 23:00:00', NULL, '');
call SP_JOB_CONFIG_COMMIT('incr_bak');
--保留15天
call SP_CREATE_JOB('clear_bak',1,0,'',0,0,'',0,'clear_bak');
call SP_JOB_CONFIG_START('clear_bak');
call SP_ADD_JOB_STEP('clear_bak', 'clear_bak', 0, 'SF_BAKSET_BACKUP_DIR_ADD(''DISK'',''/data/dmbak'');
CALL SP_DB_BAKSET_REMOVE_BATCH(''DISK'',SYSDATE - 15);', 1, 1, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('clear_bak', 'clear_bak', 1, 1, 1, 0, 0, '02:00:00', NULL, '2026-06-01 02:00:00', NULL, '');
call SP_JOB_CONFIG_COMMIT('clear_bak');

1.7 DMRMAN 脱机备份

DMRMAN 主要用于数据库关闭状态下的物理备份、还原与恢复。正常关闭的数据库可以直接脱机备份;异常关闭的库涉及未刷盘日志时,需要先考虑归档修复。

# 先停止实例
systemctl stop DmServiceDAMENG

# 启动 DMRMAN
/home/dmdba/dmdbms/bin/dmrman

RMAN> BACKUP DATABASE '/home/dmdba/dmdata/DAMENG/dm.ini' BACKUPSET '/home/dmdba/backup/physical/offline_full_01';
#脱机全备份
dmrman CTLSTMT="BACKUP DATABASE '/data/dmdata/DAMENG/dm.ini' FULL BACKUPSET '/data/dmbak/FULL_BAK'"         
#脱机增量备
dmrman CTLSTMT="BACKUP DATABASE '/data/dmdata/DAMENG/dm.ini' INCREMENT WITH BACKUPDIR '/data/dmbak' BACKUPSET '/data/dmbak/INCR_BAK'"

1.8 备份集校验

备份完成不等于备份一定可用。

SELECT SF_BAKSET_CHECK('DISK','/home/dmdba/backup/physical/db_full_01');

2 dexp / dimp 逻辑备份与恢复

逻辑备份关注的是数据库对象和对象中的数据,而不是数据页在物理文件中的位置。dexp 用于逻辑导出,dimp 用于逻辑导入,两者都在数据库在线运行时完成。逻辑备份更适合对象迁移、跨库复制、按用户/模式/表选择性备份、测试数据准备等场景。

2.1 dexp 与 dexpdp 的区别

dimp 与 dimpdp 同理:dimp 使用客户端侧的 dmp 文件,dimpdp 使用服务器端文件。
导入导出层级:数据库级、用户级、模式级、表级
前提条件:导入的版本>=导出的版本
逻辑备份
一、导出部分
导出文件位置:dexp导出文件必须放在执行命令的客户端,dexpdp导出文件是放在服务端(客户端执行命令调用服务端dexp命令)
常用参数:USERID(该参数必须放首位) FILE文件名称 LOG日志名称 DIRECTORY导出文件和日志的目录
FULL库 OWNER用户 SCHEMAS模式 TABLES表 EXCLUDE/INCLUDE 过滤对象可以是用户,模式,表
NOLOG=Y 不在前端显示导出信息 ROWS = Y/N(是否导出数据)

1.全库导出(%U自动生成2位顺序数字)
./dexp USERID=SYSDBA/"密码" FULL=Y FILE=dmdb_data.dmp LOG=dmdb_data_dexp%U.log DIRECTORY=/data/dmbak

2.导出用户(一般情况下,OWNER与SCHEMAS导入导出是相同的,但是用户可以包含多个模式)
./dexp USERID=SYSDBA/"密码" OWNER=用户名 FILE=user_data.dmp LOG=user_data%U.log DIRECTORY=/data/dmbak

3.导出模式
./dexp USERID=SYSDBA/"密码" SCHEMAS=模式名 FILE=schema_data.dmp LOG=schema_data%U.log DIRECTORY=/data/dmbak

4.导出表
./dexp USERID=SYSDBA/"密码" TABLES=表名 FILE=table_data.dmp LOG=table_data%U.log DIRECTORY=/data/dmbak

注意:表名和模式名自动转换大写,如导出小写表名需要加双引号。 TABLES="table_name"
参数特殊用法:
TABLES=T% 模糊匹配T开头的表 SCHEMAS=T% 匹配T开头的模式
EXCLUDE=SCHEMAS:SCH1,SCH2 EXCLUDE= TABLES:table1,table2

二、导入部分
导出文件位置:dimp和dimpdp与导出一样。
注意:导入一般不用加FULL,OWNER,SCHEMAS,TABLE,默认采用导出的参数选择。
常用参数:与导出一样
特殊情况:REMAP_SCHEMA模式映射(跨用户和模式下用) REMAP_TABLE表映射 REMAP_TABLESPACE表空间映射(导出是表空间导出)
IGNORE忽略错误,继续导入 TABLE_EXISTS_ACTION表存在情况下导入方式选择
IGNORE_INIT_PARA忽略初始化参数(大小写敏感相关,空格填充相关) DATA_ONLY=N/Y(是否只导入数据)
1.导入命令
./dimp USERID=SYSDBA/"密码" FILE=导出文件名.dmp LOG=dimp_data%U.log DIRECTORY=/data/dmbak

导入特殊参数详解:
TABLE_EXISTS_ACTION=SKIP:跳过此表。APPEND:直接向现有表中导入数据。
REPLACE:先删除现有表,再导数据。TRUNCATE:先删除现有表中的数据,再向表中导入数据。
TRUNCATE_CASCADE:先删除现有表中的数据,并且级联删除依赖表数据,再向表中导入数据。

3 dmfldr 快速装载

dmfldr用于把格式化文本数据快速载入 DM 表,也可以把表数据高速载出到文本文件。与 dexp/dimp 的“对象级逻辑备份”不同,dmfldr 更偏向“批量数据通道”:重点是高速搬运表数据,尤其适合 CSV/文本导入、大数据量初始化、ETL 落库等场景。
3.1 dmfldr 基本调用方式

cd /home/dmdba/dmdbms/bin

# 查看帮助
./dmfldr help

# 使用控制文件载入
./dmfldr USERID=SYSDBA/<密码>@localhost:5236 MODE='IN' CONTROL='/home/dmdba/loader/test.ctl'

# 不使用控制文件时,也可直接指定表和数据文件
./dmfldr USERID=SYSDBA/<密码>@localhost:5236 MODE='IN' TABLE=FLDR_TEST DATA='/home/dmdba/loader/test.txt'

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服