| 概念 | 说明 |
|---|---|
| 联机备份 | 数据库运行状态下执行的备份,不影响业务服务,是生产环境的首选方式;前提是数据库必须处于归档模式 |
| 脱机备份 | 数据库关闭后使用 DMRMAN 工具执行的备份 |
| 物理备份 | 对数据文件中的数据页进行拷贝,用于数据库还原与时间点恢复 |
| 逻辑备份 | 通过 dexp 工具将对象数据导出为 dmp 文件,用于跨平台迁移、单表或单模式恢复 |
| 完全备份 | 备份指定对象的全部有效数据页,是增量备份与恢复的基础 |
| 差异增量备份 | 以最近一次备份(完全或增量)为基备份,备份量小,恢复时需要按增量链依次重做 |
| 累积增量备份 | 仅以完全备份为基备份,备份量随全量间隔增长,恢复时仅需"完全备份 + 最后一次累积增量"两步 |
| 归档日志 | 联机日志的持久化载体,用于恢复至故障前一刻或指定时间点 |
| LSN | 日志序列号,全局唯一且递增,是定位归档范围与时间点恢复的核心坐标 |
| 数据库魔数 | PERMANENT_MAGIC 永久不变;DB_MAGIC 在每次还原、恢复后发生变化,用于区分备份源库与还原目标库 |
SELECT PERMANENT_MAGIC;
SELECT DB_MAGIC FROM V$RLOG;
备份策略设计首先需要明确以下两项恢复指标,并与业务方确认:
此外,还需评估数据库数据量规模与业务备份窗口,全量备份宜安排在业务低谷时段(如周日凌晨)执行。
总存储空间需求按以下公式估算:
总空间 ≈ 全量备份集 × 保留期内全量个数 + 增量备份日均 × 保留天数
+ 归档日志日均 × 保留天数 + 逻辑备份日均 × 保留天数
计算结果建议额外预留 20% 冗余。备份存储空间使用率达到 80% 时发出预警,达到 90% 时触发紧急告警。
# 全库导出
dexp USERID=SYSDBA/pwd@127.0.0.1:5236 FILE=full_YYYYMMDD.dmp \
DIRECTORY=/opt/dm_backup/data/full FULL=Y COMPRESS=Y COMPRESS_LEVEL=5 PARALLEL=8
# 按模式导出
dexp USERID=... FILE=schema_YYYYMMDD.dmp DIRECTORY=... SCHEMAS=USER01,USER02 COMPRESS=Y
# 按表导出(支持 QUERY 条件过滤)
dexp USERID=... FILE=table_YYYYMMDD.dmp DIRECTORY=... \
TABLES=SYSDBA.FACT_ORDER QUERY="WHERE AGE=19"
dimp 的导入级别(FULL/SCHEMAS/TABLES)与 dexp 的导出级别一一对应:
# 全库导入
dimp USERID=... FILE=full_20260811.dmp DIRECTORY=... FULL=Y
# 模式导入并改名(适用于测试环境)
dimp USERID=... FILE=schema_20260811.dmp SCHEMAS=USER01 REMAP_SCHEMA=USER01:TEST01
# 表导入(表已存在时追加数据)
dimp USERID=... FILE=table_20260811.dmp TABLES=SYSDBA.FACT_ORDER IGNORE=Y
REMAP_SCHEMA=源:目标 用于模式改名导入,IGNORE=Y 用于表已存在时追加数据;SELECT COUNT(*) 结果对比,用于校验导出完整性;联机备份的前提是启用归档模式,操作步骤如下:
检查归档状态:执行 SELECT * FROM V$DM_ARCH_INI; 与 SELECT ARCH_MODE FROM V$ARCH_STATUS;,确认当前归档配置与状态。
配置归档参数:在 dm.ini 中设置 ARCH_INI=1,并在 dmarch.ini 中配置以下参数:
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 0 --建议为硬盘空间的10%,0代表无限制
联机切换归档模式:在 DIsql 中执行以下语句:
ALTER DATABASE MOUNT;
ALTER DATABASE ADD ARCHIVELOG 'DEST = /dmdata/arch, TYPE = local';
ALTER DATABASE ARCHIVELOG; -- 开启归档模式(NOARCHIVELOG 关闭)
ALTER DATABASE OPEN;
验证归档状态:执行 SELECT ARCH_MODE FROM V$ARCH_STATUS;,输出应为 ARCHIVE。
数据库处于 OPEN 状态时,在 DIsql 中执行完全备份:
BACKUP DATABASE FULL BACKUPSET '/dmdata/backup/full/db_full_bak_01'
BACKUPINFO '2026-08-09 全量备份'
COMPRESSED LEVEL 5
PARALLEL 8
MAXPIECESIZE 2048;
常用选项说明:COMPRESSED LEVEL n 指定压缩级别(0~9);PARALLEL n 指定并行度;MAXPIECESIZE n 指定单个备份片的大小上限。
RMAN> CHECK BACKUPSET '/dmdata/backup/full/db_full_bak_01' LEVEL 2;
RMAN> SHOW BACKUPSET '/dmdata/backup/full/db_full_bak_01' INFO DB,META,FILE;
CHECK 校验分为三级:LEVEL 1 校验备份包 CRC;LEVEL 2 校验数据页 CRC;LEVEL 3 执行数据页解密校验。
-- 差异增量备份(缺省方式):以最近一次备份为基
BACKUP DATABASE INCREMENT WITH BACKUPDIR '/dmdata/backup/full'
BACKUPSET '/dmdata/backup/incr/INCR_20260811_020000';
-- 累积增量备份:仅以完全备份为基
BACKUP DATABASE INCREMENT CUMULATIVE WITH BACKUPDIR '/dmdata/backup/full'
BACKUPSET '/dmdata/backup/incr/CUMU_20260811_020000';
当基备份不在默认搜索目录时,必须通过 WITH BACKUPDIR 或 BASE ON BACKUPSET 显式指定。
增量备份恢复遵循"还原 → 恢复 → 更新魔数"三个步骤:
RMAN> RESTORE DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'
FROM BACKUPSET '/dmdata/backup/incr/INCR_20260811_020000'
WITH BACKUPDIR '/dmdata/backup/full';
RMAN> RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'
FROM BACKUPSET '/dmdata/backup/incr/INCR_20260811_020000'
WITH BACKUPDIR '/dmdata/backup/full';
RMAN> RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
恢复完成后需验证:数据库正常启动并成功 OPEN;核心表行数与恢复前一致;通过 SELECT DB_MAGIC FROM V$RLOG; 确认 DB_MAGIC 已更新。
归档日志遵循"先备份、后清理"的管理原则:
在线归档保留 7 天,达到 ARCH_SPACE_LIMIT 设置的空间上限后,系统自动删除最老的归档日志;
每 2 小时执行一次归档日志备份,备份集保留 30 天:
BACKUP ARCHIVE LOG ALL BACKUPSET '/dmdata/backup/arch/ARCH_20260811_060000';
归档备份校验通过后再执行清理,避免未备份即清理造成恢复断档:
RMAN> REMOVE ARCHIVELOG DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'
UNTIL TIME '2026-08-04 00:00:00';
归档日志必须保持连续:相邻归档文件的 LSN 应首尾衔接、无缺口,否则将无法恢复到目标时间点。
时间点恢复(Point-In-Time Recovery)用于处理误操作导致的数据丢失。
时间点恢复在数据库脱机状态下执行,流程如下:
-- (1)还原数据文件
RMAN> RESTORE DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'
FROM BACKUPSET '/dmdata/backup/full/FULL_20260809_020000';
-- (2)重做归档日志至指定时间点(也可使用 UNTIL LSN 50857)
RMAN> RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'
WITH ARCHIVEDIR '/dmdata/arch' UNTIL TIME '2026-08-15 10:45:00';
-- (3)更新数据库魔数并启动
RMAN> RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
恢复完成后需验证:误删数据已恢复;测试标记数据存在;业务功能回归测试通过;恢复后观察 24 小时无异常告警与日志。
异机恢复指将生产环境备份恢复到另一台服务器(如测试环境),流程为:备份集传输 → RESTORE 还原 → RECOVER 恢复 → UPDATE DB_MAGIC 更新魔数。
还原指令:
RMAN> RESTORE DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'
FROM BACKUPSET '/dmdata/backup/full/FULL_20260809_020000';
RMAN> RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'
FROM BACKUPSET '/dmdata/backup/full/FULL_20260809_020000';
RMAN> RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
生产环境推荐采用国密 SM4 算法进行完全加密:
BACKUP DATABASE BACKUPSET '/dmdata/backup/full/db_full_bak_enc'
IDENTIFIED BY "Prod_Bak_2026!"
WITH ENCRYPTION 2
ENCRYPT WITH OPENSSL_SM4_CBC;
加密类型取值:0 为不加密;1 为简单加密(仅设置口令,内容仍以明文存储,为缺省值);2 为完全数据加密(内容以密文存储,推荐使用)。
加密注意事项:
文章
阅读量
获赞
