物理备份针对数据库物理存储层。DM 会扫描数据库文件中已分配、已使用的数据页并保存到备份集,不关心这些页属于哪一张具体的业务表。它更适合整库灾备、故障恢复、时间点恢复等场景。官方文档将物理备份分为联机备份与脱机备份。
联机库级、表空间和归档备份需要数据库处于归档模式。原因是备份期间数据库仍有事务写入,为保证备份一致性,需要保留这段时间产生的 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;
最直接的方式是在 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 管理工具进行联机备份
官方流程基本为:
--创建代理环境
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');
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'"
备份完成不等于备份一定可用。
SELECT SF_BAKSET_CHECK('DISK','/home/dmdba/backup/physical/db_full_01');
逻辑备份关注的是数据库对象和对象中的数据,而不是数据页在物理文件中的位置。dexp 用于逻辑导出,dimp 用于逻辑导入,两者都在数据库在线运行时完成。逻辑备份更适合对象迁移、跨库复制、按用户/模式/表选择性备份、测试数据准备等场景。
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:先删除现有表中的数据,并且级联删除依赖表数据,再向表中导入数据。
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'
文章
阅读量
获赞
