归档技术是备份与恢复的核心保障,通过保存REDO日志确保数据可恢复至故障前状态,主要包括归档种类、归档修复、归档备份还原三大模块。
本地归档(LOCAL)
ARCH_SPACE_LIMIT
自动删除最老文件;磁盘空间不足时,第一路本地归档会强制挂起(ARCH_HANG_FLAG=1
,非第一路可配置是否挂起),磁盘损坏会导致系统HALT。远程归档(REMOTE ARCHIVE)
归档备份是数据备份的补充,归档还原用于恢复归档日志,支撑数据恢复流程:
DB_MAGIC
和PERMANENT_MAGIC
匹配的归档日志。DELETE INPUT
参数在备份后删除源归档日志,释放磁盘空间;LSN BETWEEN 1000 AND 2000
)。OVERWRITE
参数:1-跳过、2-报错、3-强制覆盖);数据备份还原是核心流程,备份为数据容灾提供载体,还原为故障恢复提供基础,两者需配合归档日志实现数据一致性。
有效数据页智能抽取:仅拷贝已分配的数据页,剔除未使用页,减少备份集大小和IO开销;对RES_OFFLINE
/CORRUPT
状态表空间,仅记录表空间信息,不拷贝数据页。
REDO日志备份:
WITHOUT LOG
时,自动备份备份期间产生的REDO日志(范围:BEGIN_LSN
-END_LSN
,BEGIN_LSN=备份开始时CKPT_LSN
,END_LSN=备份结束时FILE_LSN
);WITHOUT LOG
生成非一致性备份集,还原后需依赖归档日志恢复;正常关闭库的脱机备份无需备份REDO日志。压缩与加密:
并行备份:
PARALLEL
指定并行数(默认4),READ SIZE
指定大文件拆分块大小(默认1GB,最小512MB)。数据还原:
OVERWRITE
参数控制覆盖)→ 重建数据文件(按SYSTEM_PATH
或映射文件调整路径)→ 拷贝数据页→ 重建联机日志→ 重置目标库(更新CKPT_LSN、DB_MAGIC等);RES_OFFLINE
,需恢复后联机;数据恢复:
BEGIN_LSN
-END_LSN
范围日志;DB_MAGIC
(每次还原恢复后变化,区分源库与目标库),PERMANENT_MAGIC
永久不变(DDL_CLONE还原除外)。PERMANENT_MAGIC
(永久魔数):建库时生成,唯一标识数据库,永不改变;DB_MAGIC
(数据库魔数):每次还原恢复后更新,用于区分源库与目标库。适用规则:
BEGIN_LSN
-END_LSN
),缺失归档会导致恢复失败。 /home/dmdba/data/DMDB/dmarch.ini
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST =/home/dmdba/dmarch #本地归档文件存放路径
ARCH_FILE_SIZE = 512 #单位 Mb, 本地单个归档文件最大值
ARCH_SPACE_LIMIT = 81920 #单位 Mb, 0 表示无限制,范围 1024~2147483647M
同时还需要修改dm.ini的参数ARCH_INI=1#启动ap服务
./DmAPService start
# mount状态不能进行备份
./dmserver /home/dmdba/data/DMDB/dm.ini
./disql SYSDBA/'"Dmglydmm@2025"'@127.0.0.1:5237
create table test (a int );
insert into test values (1);
commit;
backup database full to "DB_DMDB_FULL_2025_09_30_15_46_15" backupset '/home/dmdba/dmbak/db_full_bak' compressed level 1;
##插入数据2
insert into test values(2);
commit;
##执行增量备份
backup database increment to "DB_DMDB_INCRE_2025_09_30_15_51_32" backupset '/home/dmdba/dmbak/db_incre_bak01' compressed level 1;
insert into test values(3);
commit;
backup database increment to "DB_DMDB_INCRE_2025_09_30_15_54_46" backupset '/home/dmdba/dmbak/db_incre_bak02' compressed level 1;
CREATE TABLE TAB_FOR_RES_01(C1 INT);
BACKUP TABLE TAB_FOR_RES_01 BACKUPNAME TABLE_BAK_01 BACKUPSET '/home/dmdba/dmbak/tab_bak_for_res_01';
SELECT SF_BAKSET_CHECK('DISK','/home/dmdba/dmbak/tab_bak_for_res_01');
# 需要先关闭数据库实例后再进行操作
#启动ap服务
./DmAPService start
# 启动dmrman
./dmrman
# 还原
check backupset '/home/dmdba/dmbak/db_full_bak'
RESTORE DATABASE '/home/dmdba/data/DMDB/dm.ini' FROM BACKUPSET '/home/dmdba/dmbak/db_full_bak';
RECOVER DATABASE '/home/dmdba/data/DMDB/dm.ini' FROM BACKUPSET '/home/dmdba/dmbak/db_full_bak';
RECOVER DATABASE '/home/dmdba/data/DMDB/dm.ini' UPDATE DB_MAGIC;
# 还原后可以再拉起数据库实例后查看表数据,如果只剩1就成功
./disql SYSDBA/'"Dmglydmm@2025"'@127.0.0.1:5237
SQL> select * from test;
行号 a
---------- -----------
1 1
# 指定备份集路径进行还原
RESTORE TABLE TAB_FOR_RES_01 FROM BACKUPSET'/home/dmdba/dmbak/tab_bak_for_res_01';
# 指定备份名称进行还原
RESTORE TABLE TAB_FOR_RES_01 FROM BACKUPNAME TABLE_BAK_01;
DMRMAN支持脱机库备份(完全/增量)和脱机归档备份,需确保数据库处于关闭状态(正常退出或故障退出)。
FULL
参数):RMAN> BACKUP DATABASE '/home/dmdba/dmdbms/data/DAMENG/dm.ini' FULL BACKUPSET '/home/dmdba/dmbak/db_full_bak' COMPRESSED LEVEL 1;
/home/dmdba/dmdbms/data/DAMENG/dm.ini
为源库dm.ini
路径;BACKUPSET
指定备份集存储目录;COMPRESSED LEVEL 1
表示1级压缩(可选)。RMAN> BACKUP DATABASE '/home/dmdba/dmdbms/data/DAMENG/dm.ini' INCREMENT WITH BACKUPDIR '/home/dmdba/dmbak' BACKUPSET '/home/dmdba/dmbak/db_incre_bak';
INCREMENT
指定增量备份;WITH BACKUPDIR
指定基备份搜索目录(基备份可为完全备份或增量备份)。dm.ini
中ARCH_INI=1
,且dmarch.ini
配置本地归档);# 备份所有归档日志
RMAN> BACKUP ARCHIVE LOG ALL DATABASE '/home/dmdba/dmdbms/data/DAMENG/dm.ini' BACKUPSET '/home/dmdba/dmbak/arch_full_bak';
# 按LSN范围备份(如备份LSN 50000-120000的归档)
RMAN> BACKUP ARCHIVE LOG LSN BETWEEN 50000 AND 120000 DATABASE '/home/dmdba/dmdbms/data/DAMENG/dm.ini' BACKUPSET '/home/dmdba/dmbak/arch_lsn_bak';
ALL
备份所有归档;LSN BETWEEN ... AND ...
指定归档范围;DATABASE
指定源库dm.ini
路径。通过SHOW
命令查看单个/批量备份集的元数据、数据文件、表空间等信息:
RMAN> SHOW BACKUPSET '/home/dmdba/dmbak/db_full_bak' INFO DB,META; # 查看数据库信息和元数据
RMAN> SHOW BACKUPSETS WITH BACKUPDIR '/home/dmdba/dmbak1','/home/dmdba/dmbak2'; # 查看多个目录下的备份集
RMAN> SHOW BACKUPSET '/home/dmdba/dmbak/db_full_bak' TO '/home/dm_info/bak_info.txt' FORMAT XML;
通过CHECK
命令校验备份集是否完整、合法(支持加密备份校验):
# 校验普通备份集
RMAN> CHECK BACKUPSET '/home/dmdba/dmbak/db_full_bak';
# 校验加密备份集(需指定密码和算法)
RMAN> CHECK BACKUPSET '/home/dmdba/dmbak/db_encrypt_bak' IDENTIFIED BY "Dmglydmm@2025" ENCRYPT WITH AES256_CFB LEVEL 2;
LEVEL
指定校验级别(1-校验备份包CRC,2-校验数据页CRC,3-数据页解密校验)。通过REMOVE
命令删除单个/批量备份集,并行备份的子备份集不允许单独删除:
RMAN> REMOVE BACKUPSET '/home/dmdba/dmbak/db_full_bak';
RMAN> REMOVE DATABASE BACKUPSETS WITH BACKUPDIR '/home/dmdba/dmbak' UNTIL TIME '2025-09-30 00:00:00';
RMAN> REMOVE BACKUPSET '/home/dmdba/dmbak/db_full_bak' CASCADE;
核心流程:还原(RESTORE)→ 恢复(RECOVER)→ 更新DB_MAGIC,需确保数据库关闭且备份集合法。
RMAN> CONFIGURE DEFAULT BACKUPDIR ADD '/home/dmdba/dmbak';
RMAN> CHECK BACKUPSET '/home/dmdba/dmbak/db_full_bak'; # 校验待还原的备份集
将备份集中的数据页写入目标库,支持指定dm.ini
路径或目标目录:
# 按dm.ini指定目标库还原(推荐)
RMAN> RESTORE DATABASE '/home/dmdba/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/dmbak/db_full_bak' OVERWRITE;
# 按目标目录还原(新建库目录)
RMAN> RESTORE DATABASE TO '/home/dm_new_data' FROM BACKUPSET '/home/dmdba/dmbak/db_full_bak' OVERWRITE;
OVERWRITE
覆盖目标库中已存在的同名文件(谨慎使用,不可撤销);TO
指定新库目录(自动创建dm.ini
和控制文件)。还原后目标库处于非一致性状态,需通过RECOVER
重做日志,分为“恢复一致性”和“更新DB_MAGIC”两步:
RMAN> RECOVER DATABASE '/home/dmdba/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/dmbak/db_full_bak';
RMAN> RECOVER DATABASE '/home/dmdba/dmdbms/data/DAMENG/dm.ini' WITH ARCHIVEDIR '/home/dm_arch' USE DB_MAGIC 1447060265;
WITH ARCHIVEDIR
指定归档目录;USE DB_MAGIC
指定归档对应的源库DB_MAGIC
(可通过SHOW BACKUPSET
查看)。恢复一致性后,需更新DB_MAGIC
(区分源库与目标库),数据库才能启动:
RMAN> RECOVER DATABASE '/home/dmdba/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
./dmserver /home/dmdba/dmdbms/data/DAMENG/dm.ini
disql
为例):./disql SYSDBA/'"Dmglydmm@2025"'@127.0.0.1:5237
SQL> select * from test; # 验证数据是否恢复到备份状态
文章
阅读量
获赞