一、备份恢复 - 物理恢复原理
物理备份是找出那些已经分配、使用的数据页,拷贝并保存到备份集中。物理还原是物理备份的逆过程,物理还原一般通过 DMRMAN 工具(或者 SQL 语句),把备份集中的数据内容(数据文件、数据页、归档文件)重新拷贝、写入目标文件。
还原与恢复的逆过程:
•还原:将备份集数据页写入目标数据文件。
•恢复:通过重做归档日志,将数据库状态恢复到指定时间点或 LSN。恢复后未提交的事务会在数据库启动时自动回滚。
二、归档配置
1.1 修改数据库状态
ALTER DATABASE MOUNT;
1.2 启用归档模式
ALTER DATABASE ARCHIVELOG;
1.3 添加归档配置
ALTER DATABASE ADD ARCHIVELOG
'dest=/dmdata/arch,
type=local,
file_size=64,
space_limit=1024';
1.4 验证配置
-- 查看状态
SELECT * FROM V$ARCH_STATUS;
-- 打开数据库
ALTER DATABASE OPEN;
-- 切换日志
ALTER SYSTEM SWITCH LOGFILE;
SELECT * FROM V$DM_ARCH_INI;
[dmdba@localhost DAMENG]$ grep 'ARCH_INI' dm.ini
ARCH_INI = 1 #dmarch.ini
编辑 dmarch.ini
:
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/arch
ARCH_FILE_SIZE = 64
ARCH_SPACE_LIMIT = 1024
重启数据库使配置生效:
[dmdba@localhost DAMENG]$ systemctl restart DmServiceDMSERVER
参数 | 说明 |
---|---|
Backupset [backupset_name] | 指定备份集路径和名称 |
to [backup_name] | 指定备份名 |
backupinfo | 添加备份描述信息 |
DEVICE TYPE | 介质类型(DISK/TAPE) |
maxpiecesize | 限制备份片大小 |
limit | 限速(读写速度) |
identified by | 加密备份(指定密码) |
ENCRYPT WITH | 指定加密算法 |
COMPRESSED | 备份压缩 |
PARALLELL | 并行备份 |
-- 全库备份命令:指定目录、名称、备份集、描述、分片大小、速度限制、压缩、并行
BACKUP DATABASE FULL
WITH
BACKUPDIR '/dm/data/bak', -- 备份存储路径
BACKUPNAME 'fullbak1', -- 备份自定义名称
BACKUPSET 'backset_1', -- 备份集名称
BACKUPINFO '第一次全备份', -- 备份用途描述(便于识别)
MAXPIECESIZE 10000, -- 单个备份片最大 10000MB
LIMIT READ SPEED 100 WRITE SPEED 100, -- 读写速度限制为 100MB/s
COMPRESSED LEVEL 1, -- 压缩级别 1(低压缩比,高备份速度)
PARALLEL 2; -- 2 个并行线程加速备份
操作结果
-- 查看备份集信息
select * from v$backupset;
SELECT BACKUP_ID, BACKUP_NAME, BACKUP_PATH, BACKUP_TIME FROM V$BACKUPSET WHERE BACKUP_NAME = 'FULLBAK1'; -- 筛选特定备份
- 执行达梦数据库的增量备份操作
-- INCREMENT 关键字表明这是增量备份,
基于``上一次全量/增量备份``之后变化的数据进行备份
-- 指定备份文件存储的目录,这里是 /dm/dmdbms/data/bak
- 设置备份的名称,便于识别该次备份,名为 incbak2
-- 添加备份的描述信息,说明这是“第二次增量备份”,方便后续管理和区分不同备份
backup database INCREMENT with backupdir '/dm/data/bak'
backupname incbak2 backupset 'incbak_2' BACKUPINFO '第二次增量备份'
maxpiecesize 10000 limit read speed 100 write speed 100 compressed level 1 parallel 2;
-- 以下为可选的备份优化及控制参数-- maxpiecesize:设置每个备份片``(备份文件分片)的最大大小,单位通常是 MB,这里限制为 10000 MB,``防止单个备份文件过大
-- limit read speed/write speed:分别限制备份过程中读取数据和写入备份文件的速度,单位一般是 MB/s,这里都设为 100,避免备份操作占用过多 IO 资源影响业务 ``-- compressed level 1:启用备份压缩功能,level 1 表示采用较低的``压缩级别(压缩比相对小,压缩/解压速度快,对 CPU 消耗低),节省备``份存储占用空间同时不过度影响备份效率
-- parallel 2:启用并行备份,使用 2 个并行线程来执行备份操作,加``快备份完成速度,利用多核 CPU 提升备份效率
– 查看生成的备份文件
ls -RL incbak_2/
SELECT BACKUP_ID, BACKUP_NAME, PARENT_ID, BACKUP_PATH, BACKUP_TIME FROM V$BACKUPSET WHERE TYPE = 1; -- 仅查增量备份(TYPE=1)
创建测试表空间
create tablespace test_backup datafile '/dm/data/TEST_BACKUP.DBF' SIZE 256;
-- 表空间全备份 该操作仅备份名为 test_backup 的单个表空间
backup tablespace test_backup full with backupdir '/dm/data/bak'backupname fullbak_tbs1 backupset 'fullbak_tbs1'
BACKUPINFO '第一次表空间备份' maxpiecesize 10000 limit read speed 100 write speed 100 compressed level 1 parallel 2;
--查看备份信息
select * from v$backupset WHERE BACKUP_NAME='FULLBAK_TBS1';
-- 表空间增量备份,对test_backup表空间增量备份
backup tablespace test_backup INCREMENT
with backupdir '/dm/data/bak'
backupset 'incbak_tbs_1'
BACKUPINFO 'test_backup第一次增量备份'
limit read speed 100
write speed 100
compressed level 1
parallel 2;
--查询
select * from v$backupset WHERE BACKUP_NAME='FULLBAK_TBS1';
create table t3 (id int, name varchar(20))STORAGE(ON test_backup);
insert into t3 values (1,'a');
-- 表备份
backup table t3 backupname t3bak2 backupset 't3bak_3'
BACKUPINFO '第一次备份表t3'maxpiecesize 10000 limit read speed 100 write speed 100 compressed level 1 STRUCT;
--查看生成的备份文件
SELECT * FROM V$BACKUPSET WHERE BACKUP_NAME = 'T3BAK2';
--执行表空间备份
-- 指定表存储在TS1表空间,便于后续针对业务表进行备份和维护-- 可根据业务需求调整表空间的存储参数
-- 备份 TS1 表空间
BACKUP TABLESPACE TS1 BACKUPSET '/dm/data/bak/ts1_bak_20250623' BACKUPINFO 'TS1 首次备份TS1' COMPRESSED LEVEL 1;
--查看备份集
select * from v$backupset;
-- 备份数据库所有归档日志(ARCHIVELOG)到指定目录
-- 备份类型:归档日志,ALL表示全量归档备份
---查看生成的备份文件
cd /dm/data/bak
-- 基于LSN范围备份归档日志(LSN不连续时需指定范围)
首先先确定 LSN 范围
select ARCH_LSN, CLSN, PATH from V$ARCH_FILE;
其次,备份归档。
BACKUP ARCHIVELOG LSN BETWEEN 54914 AND 55748 BACKUPSET '/dm/data/bak/arch_bak_time_12-15';
--查询备份集路径
V$BACKUPSET_SEARCH_DIRS 中的备份集搜索目录专门用于在备份信息查看中动态视图或批量删除备份集中。即当执行动态视图或批量删除备份集时,均会从 V$BACKUPSET_SEARCH_DIRS 的显示的目录中搜索备份集信息。
SQL> select * from V$BACKUPSET_SEARCH_DIRS;
--备份集添加和删除
--备份添加之前要去
[dmdba@dameng data]$ mkdir -p bak2 --创建一个目录
----添加 SF_BAKSET_BACKUP_DIR_ADD
SF_BAKSET_BACKUP_DIR_ADD('DISK','/dm/data/bak2');
---删除BAKSET_BACKUP_DIR_REMOVE
SF_BAKSET_BACKUP_DIR_REMOVE('DISK','/dm/data/bak2');
--查询备份集
select * from V$BACKUPSET_SEARCH_DIRS;
--备份集的校验和删除
先校验备份集是否完整
SF_BAKSET_CHECK('DISK','/dm/data/bak/backset_1');
执行结果:DMSQL executed successfully,说明备份集校验通过,没有发现错误。
--执行删除:
SF_BAKSET_REMOVE('DISK','/dm/data/bak/backset_1',1);
第三个参数1的含义: 0 表示只删除备份集元数据,保留物理文件 1 表示同时删除元数据和物理文件(彻底删除)
--安全删除满足条件的备份
--删除now删除截止时间(当前时间)
具有 DBA 权限的用户批量删除满足指定条件的所有备份集。使用该方法
前,需要先使用 SF_BAKSET_BACKUP_DIR_ADD 添加将要删除的备份集目``录,否则只删除数据库的默认备份目录下的备份集。
必须先用 SF_BAKSET_BACKUP_DIR_ADD 注册目标目录,否则仅删除默认备份路径(BAK_PATH)的备份集
-- 注册自定义目录(必需步骤)
SELECT SF_BAKSET_BACKUP_DIR_ADD(‘DISK’, ‘/dm/data/bak2’);
– 添加待清理目录
SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK', '/dm/data/bak2');
-- 删除所有类型备份集(当前时间前)
SF_BAKSET_REMOVE_BATCH ('DISK', now(), NULL, NULL);
–安全删除满足条件的备份并保留最近一份完整备份 _S保存最近一份
SF_BAKSET_REMOVE_BATCH_S(‘DISK’, now(), NULL, NULL);
–安全删除满足条件的备份并保留最近_N 2份完整备份
SF_BAKSET_REMOVE_BATCH_N(‘DISK’, now(), NULL, NULL,2);
–删除满足条件的表空间备份
SP_TS_BAKSET_REMOVE_BATCH(‘DISK’, now(),‘ts1’);
– 删除满足条件的表备份
SP_TAB_BAKSET_REMOVE_BATCH(‘DISK’, now(),‘sysdba’,‘t1’);
– 删除满足条件的归档备份
SP_ARCH_BAKSET_REMOVE_BATCH(‘DISK’, now());
select * from V$BACKUPSET_DBINFO;
–监控当前备份信息
select * from V$BACKUP_MONITOR;
–– 当前备份任务待备份数据文件列表
select * from V$BACKUP_FILES;
--用于记录备份任务的执行历史
SELECT * FROM V$BACKUP_HISTORY LIMIT 1;
select * from V$BACKUPSET_DBF;
SELECT * FROM V$BACKUPSET_DBF WHERE BACKUP_PATH = '/dm/data/bak/ts1_bak_20240620';
select * from V$BACKUPSET_ARCH;
select * from V$BACKUPSET_BKP;
select * from V$BACKUPSET_TABLE;
select * from V$BACKUPSET_SUBS;
在达梦数据库中,联机状态下仅支持表的备份与恢复,而库级和表空间级的备份还原必须通过DMRMAN工具在脱机环境下完成。
-- 检查备份集有效性
SELECT SF_BAKSET_CHECK('DISK', '/dm/data/bak/t3bak_3');
-- 清空表数据
truncate table t2;
drop table t3;
-- 还原表结构与数据
RESTORE TABLE sysdba.T2 STRUCT FROM BACKUPSET '/dm/data/bak/t3bak_3';
RESTORE TABLE sysdba.T2 FROM BACKUPSET '/dm/data/bak/t3bak_3';
--查看数据
select * from t2;
DMRMAN 是 DM 数据库的脱机备份恢复工具,用于数据库脱机状态下的备份、还原及管理,支持全库、增量、归档备份及基于时间点 / LSN 的恢复。
-- 关闭数据库
[root@dameng bin]# systemctl stop DmServicePROD.service
-- 全库脱机备份
RMAN> BACKUP DATABASE '/dm/data/dm.ini' FULL BACKUPSET '/dm/data/bak/db_full_bak_01';
-- 增量脱机备份
RMAN> BACKUP DATABASE '/dm/data/dm.ini' INCREMENT WITH BACKUPDIR'/dm/data/bak/'BACKUPSET'/dm/data/bak/db_increment_bak_02';
--备份归档日志
RMAN> backup archivelog database '/dm/data/dm.ini' with backupdir '/dm/data/bak' backupname archbak1 backupset 'arachbakset_1' BACKUPINFO '第一次归档备份' maxpiecesize 10000 limit read speed 100 write speed 100 compressed level 1 parallel 2;
–通过lsn备份
RMAN> backup archivelog time between '2025-04-17 12:00:00' and '2025-04-18 10:00:00' database '/dm/data/dm.ini' with backupdir '/dm/data/bak' backupname archbak2 backupset 'arachbakset_2' BACKUPINFO '第一次归档备份' maxpiecesize 10000 limit read speed 100 write speed 100 compressed level 1 parallel 2;
--确保备份可用
RMAN> CHECK BACKUPSET '/dm/data/bak/arachbakset_1';
RMAN> CHECK BACKUPSET '/dm/data/bak/arachbakset_2';
-- 达梦 DMRMAN 工具核心操作:备份数据库归档日志
-- 关键参数拆解:
backup archivelog -- 操作类型:备份归档日志
database '/dm/data/dm.ini' -- 通过 dm.ini 定位数据库实例(指定配置文件路径)
with backupdir '/dm/data/bak' -- 备份文件存储目录(物理路径)
backupname archbak1 -- 备份的**逻辑名称**(用于标识,非物理文件名)
backupset 'arachbakset_1' -- 备份集的**物理标识**(关联存储的备份集目录/文件)
BACKUPINFO '第一次归档备份' -- 备份描述信息(便于管理查询,如统计备份用途)
maxpiecesize 10000 -- 单个备份片最大容量(单位:MB → 10000MB=10GB,超过则分片)
limit read speed 100 -- 限制读取速度(100MB/s → 降低源端 IO 压力)
write speed 100 -- 限制写入速度(100MB/s → 降低目标端 IO 压力)
compressed level 1 -- 启用备份压缩(级别 1:压缩率低、速度快,平衡性能)
parallel 2; -- 并行备份线程数(2 线程 → 提升备份效率,需硬件支持)
-- 1. 显示备份集的数据库全局信息(库名、页大小、字符集等)
SHOW BACKUPSET '/dm/data/bak/backset_1' RECURSIVE INFO DB;
-- 2. 显示备份集中包含的数据文件信息
SHOW BACKUPSET '/dm/data/bak/backset_1' RECURSIVE INFO FILE;
-- 3. 显示备份集的元数据信息(备份类型、压缩、加密等)
SHOW BACKUPSET '/dm/data/bak/backset_1' RECURSIVE INFO META;
-- 4. 显示备份集的加密信息(仅当备份加密时有效)
SHOW BACKUPSET '/dm/data/bak/backset_1' RECURSIVE INFO EP;
-- 5. 结合数据库配置显示备份集信息(需指定数据库配置文件)
SHOW BACKUPSET '/dm/data/bak/backset_1' RECURSIVE DATABASE '/data/DM/dm.ini'
WITH BACKUPDIR '/data/DM/bak' INFO DB;
--1. 删除备份集(需先删除依赖的增量备份)
RMAN> REMOVE BACKUPSET '/opt/dmdbms/data/DAMENG/bak/db_increment_bak_02';
RMAN> REMOVE BACKUPSET '/opt/dmdbms/data/DAMENG/bak/db_full_bak_01' DATABASE '/opt/dmdbms/data/DAMENG/dm.ini';
--2.删除备份目录下的某一个数据库备份集
REMOVE BACKUPSET '/dm/data/bak/db_full_bak_01' DATABASE '/dm/data/dm.ini';
--3.删除整个目录
RMAN>REMOVE BACKUPSETS WITH BACKUPDIR '/dm/data/bak/';
--4.删除基于时间下
RMAN>REMOVE BACKUPSETS WITH BACKUPDIR '/dm/data/bak/' UNTIL TIME '2025-06-24 14:25:00';
-- 还原数据库
-还原全量备份
RMAN> RESTORE DATABASE '/dm/data/dm.ini' FROM BACKUPSET '/dm/data/bak/db_full_bak_01';
-- 恢复数据库-日志(需结合归档日志)
RMAN> RECOVER DATABASE '/dm/data/dm.ini' FROM BACKUPSET '/dm/data/bak/db_increment_bak_02'';
-- 更新数据库魔数
RMAN> RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
-- 1. 联机全备与增量备份
SQL> BACKUP DATABASE FULL BACKUPSET'/dm/data/bak/db_full_bak_03';
SQL> BACKUP DATABASE INCREMENT BACKUPSET'/dm/data/bak/db_increment_bak_03';
--插入测试数据
-- 创建测试表(含自增主键)
CREATE TABLE TAB_FOR_RECOVER_03 (
A1 INT PRIMARY KEY,
DATA VARCHAR(50) DEFAULT 'Test Data'
);
INSERT INTO TAB_FOR_RECOVER_03(A1)
SELECT LEVEL
FROM DUAL
CONNECT BY LEVEL <= 10000;
-- 插入10000行测试数据
COMMIT;
-- 2. 脱机还原(含增量)
进行数据不完全恢复(不加归档)
-- 从全量备份集还原数据库
RMAN> RESTORE DATABASE '/dm/data/dm.ini' FROM BACKUPSET '/dm/data/bak/db_full_bak_03';
--从增量备份集还原数据库
RMAN> RESTORE DATABASE '/dm/data/dm.ini' FROM BACKUPSET '/dm/data/bak/db_increment_bak_03';
-- 应用增量备份集完成数据库恢复(关键步骤)
-- 作用:将增量备份中的数据变更应用到数据库,确保数据一致性
-- 区别:RESTORE仅还原物理文件,RECOVER同步逻辑变更
RMAN> RECOVER DATABASE '/dm/data/dm.ini' FROM BACKUPSET '/dm/data/bak/db_increment_bak_03';
RMAN> RECOVER DATABASE '/dm/data/dm.ini' UPDATE DB_MAGIC;
–再次查询数据
启动数据库
systemctl start DmServicePROD.service
select count(*) from TAB_FOR_RECOVER_03 ;
完整恢复流程说明
达梦社区地址 :https://eco.dameng.com
文章
阅读量
获赞