DEM管理平台中,可以使用”批量执行“,编写脚本,进行DPC集群多节点批量还原。
DMDPC集群中,SP不存储数据,不需要备份和还原。需要备份和还原的是MP和BP节点。如果MP或BP为多副本集群,则只有主节点参与备份,而所有MP和BP节点都参与还原。
备份时既可以选择联机备份或脱机备份,还原时必须脱机还原。
为保证数据一致性,多副本中的所有节点,要使用同一份备份集(主节点备份集)。因此对于多副本,备份时只需要对主MP或主BP节点进行备份,还原时再将备份集传到同RAFT组的备节点上。
SHOW BACKUPSET'备份集路径'命令来查看BAK_MAGIC和 DPC_MAGIC。若想要减少输出信息,可以使用命令SHOW BACKUPSET'备份集路径' INFO META。| 节点名称 | IP | 实例目录 |
|---|---|---|
| SP1 | 192.168.4.3:5230 | /dm8/dmdata/dmdpc/SP1 |
| SP2 | 192.168.4.4:5230 | /dm8/dmdata/dmdpc/SP2 |
| SP3 | 192.168.4.5:5230 | /dm8/dmdata/dmdpc/SP3 |
| MP_A | 192.168.4.3:5220 | /dm8/dmdata/dmdpc/MP_A |
| BP1_A(主) | 192.168.4.6:5240 | /dm8/dmdata/dmdpc/BP1_A |
| BP1_B | 192.168.4.6:5240 | /dm8/dmdata/dmdpc/BP1_B |
| BP1_C | 192.168.4.6:5240 | /dm8/dmdata/dmdpc/BP1_C |
| BP2_A(主) | 192.168.4.6:5240 | /dm8/dmdata/dmdpc/BP2_A |
| BP2_B | 192.168.4.6:5240 | /dm8/dmdata/dmdpc/BP2_B |
| BP2_C | 192.168.4.6:5240 | /dm8/dmdata/dmdpc/BP2_C |
| BP3_A(主) | 192.168.4.6:5240 | /dm8/dmdata/dmdpc/BP3_A |
| BP3_B | 192.168.4.6:5240 | /dm8/dmdata/dmdpc/BP3_B |
| BP3_C | 192.168.4.6:5240 | /dm8/dmdata/dmdpc/BP3_C |
export LANG=zh_CN.UTF-8
INSTANCE='BP1_C'
BAK_MAGIC=534454266
DMINI=/dm8/dmdata/dmdpc/$INSTANCE/DAMENG/dm.ini
BAKSET=/dm8/dmdata/dmdpc/back/fullbak20260126_test_$INSTANCE
/dm8/dmdata/dmdpc/bin/dmrman use_ap=2 <<EOF
restore database '$DMINI' from backupset '$BAKSET' use bak_magic $BAK_MAGIC;
recover database '$DMINI' from backupset '$BAKSET' use bak_magic $BAK_MAGIC;
recover database '$DMINI' update dpc_magic $BAK_MAGIC;
recover database '$DMINI' update db_magic;
exit
EOF
export LANG=zh_CN.UTF-8
INSTANCE='BP1_C'
BAK_MAGIC=1945290694
DMINI=/dm8/dmdata/dmdpc/$INSTANCE/DAMENG/dm.ini
BAKSET=/dm8/dmdata/dmdpc/back/incbak20260126_test02_$INSTANCE
BAKDIR=/dm8/dmdata/dmdpc/back/fullbak20260126_test02_$INSTANCE
/dm8/dmdata/dmdpc/bin/dmrman use_ap=2 <<EOF
restore database '$DMINI' from backupset '$BAKSET' with backupdir '$BAKDIR' use bak_magic $BAK_MAGIC;
recover database '$DMINI' from backupset '$BAKSET' use bak_magic $BAK_MAGIC;
recover database '$DMINI' update db_magic;
exit
EOF
#主节点
export LANG=zh_CN.UTF-8
INSTANCE='BP1_A'
BAK_MAGIC=1415226276
DMINI=/dm8/dmdata/dmdpc/$INSTANCE/DAMENG/dm.ini
ARCHBAK=/dm8/dmdata/dmdpc/back/arcbak20260128_test03_$INSTANCE
BAKDIR=/dm8/dmdata/dmdpc/back/fullbak20260128_test03_$INSTANCE
ARCHDIR=/dm8/dmdata/dmdpc/$INSTANCE/DAMENG/arch
ARCHTIME='2026-01-28 12:00:00'
/dm8/dmdata/dmdpc/bin/dmrman use_ap=2 <<EOF
restore database '$DMINI' from backupset '$BAKDIR' use bak_magic $BAK_MAGIC;
recover database '$DMINI' with archivedir '$ARCHDIR' until time '$ARCHTIME';
recover database '$DMINI' update dpc_magic $BAK_MAGIC;
recover database '$DMINI' update db_magic;
exit
EOF
#备节点
export LANG=zh_CN.UTF-8
INSTANCE='BP1_C'
BAK_MAGIC=1415226276
DMINI=/dm8/dmdata/dmdpc/$INSTANCE/DAMENG/dm.ini
ARCHBAK=/dm8/dmdata/dmdpc/back/arcbak20260128_test03_$INSTANCE
BAKDIR=/dm8/dmdata/dmdpc/back/fullbak20260128_test03_$INSTANCE
ARCHDIR=/dm8/dmdata/dmdpc/$INSTANCE/DAMENG/arch
ARCHTIME='2026-01-28 12:00:00'
/dm8/dmdata/dmdpc/bin/dmrman use_ap=2 <<EOF
restore archivelog from backupset '$ARCHBAK' to database '$DMINI' overwrite 2;
restore database '$DMINI' from backupset '$BAKDIR' use bak_magic $BAK_MAGIC;
recover database '$DMINI' with archivedir '$ARCHDIR' until time '$ARCHTIME';
recover database '$DMINI' update dpc_magic $BAK_MAGIC;
recover database '$DMINI' update db_magic;
exit
EOF
1.登录DEM管理平台,查看当前集群状态
2.连接数据库,创建测试数据并查询确认
3.进行全量备份
4.查询备份路径和bakset magic值
5.删除测试数据并查询确认
6.停止DPC集群
7.在DEM平台导出批量还原脚本,修改并重新导入
8.拷贝BP主节点备份集到备节点
9.执行批量还原脚本并确认执行情况
10.启动DPC集群
11.查询测试数据并确认还原成功
--创建表空间
create tablespace TS02 datafile 'TS02.DBF' size 128 CACHE = NORMAL STORAGE( ON RAFT_2);
create tablespace TS03 datafile 'TS03.DBF' size 128 CACHE = NORMAL STORAGE( ON RAFT_3);
--创建HASH分区表
CREATE TABLE TEST_FQ1(C1 INT,C2 VARCHAR)
PARTITION BY HASH(C1)
PARTITIONS 10;
--插入数据
DECLARE
i int;
BEGIN
for i in 1..100 LOOP
insert into TEST_FQ1 VALUES(i,'a'||i);
end loop;
commit;
END;
--查询
select * from TEST_FQ1 order by C1;
--备份
BACKUP DATABASE FULL BACKUPSET
'/dm8/dmdata/dmdpc/back/fullbak20260126_test'
COMPRESSED level 1 parallel 2;
./dmrman use_ap=2
SHOW BACKUPSET'/dm8/dmdata/dmdpc/back/fullbak20260126_test_BP1_A/' INFO META;
--删除数据
drop table TEST_FQ1;
drop tablespace TS02;
drop tablespace TS03;
--查询
select * from TEST_FQ1 order by C1;
export LANG=zh_CN.UTF-8
INSTANCE='BP1_C'
BAK_MAGIC=534454266
DMINI=/dm8/dmdata/dmdpc/$INSTANCE/DAMENG/dm.ini
BAKSET=/dm8/dmdata/dmdpc/back/fullbak20260126_test_$INSTANCE
/dm8/dmdata/dmdpc/bin/dmrman use_ap=2 <<EOF
restore database '$DMINI' from backupset '$BAKSET' use bak_magic $BAK_MAGIC;
recover database '$DMINI' from backupset '$BAKSET' use bak_magic $BAK_MAGIC;
recover database '$DMINI' update dpc_magic $BAK_MAGIC;
recover database '$DMINI' update db_magic;
exit
EOF
#4.6:
scp -r /dm8/dmdata/dmdpc/back/fullbak20260126_test_BP1_A/ dmdba@192.168.4.7:/dm8/dmdata/dmdpc/back/fullbak20260126_test_BP1_B
scp -r /dm8/dmdata/dmdpc/back/fullbak20260126_test_BP1_A/ dmdba@192.168.4.8:/dm8/dmdata/dmdpc/back/fullbak20260126_test_BP1_C
#4.9:
scp -r /dm8/dmdata/dmdpc/back/fullbak20260126_test_BP2_A/ dmdba@192.168.4.10:/dm8/dmdata/dmdpc/back/fullbak20260126_test_BP2_B
scp -r /dm8/dmdata/dmdpc/back/fullbak20260126_test_BP2_A/ dmdba@192.168.4.11:/dm8/dmdata/dmdpc/back/fullbak20260126_test_BP2_C
#4.12:
scp -r /dm8/dmdata/dmdpc/back/fullbak20260126_test_BP3_A/ dmdba@192.168.4.13:/dm8/dmdata/dmdpc/back/fullbak20260126_test_BP3_B
scp -r /dm8/dmdata/dmdpc/back/fullbak20260126_test_BP3_A/ dmdba@192.168.4.14:/dm8/dmdata/dmdpc/back/fullbak20260126_test_BP3_C
1.登录DEM管理平台,查看当前集群状态
2.创建全备测试数据并查询确认
3.进行全量备份
4.创建增备测试数据并查询确认
5.进行增量备份
6.查询备份路径和bakset magic值
7.删除增备测试数据并查询确认
8.停止DPC集群
9.拷贝BP主节点备份集到备节点
10.修改批量还原脚本并导入DEM平台
11.执行批量还原脚本并确认执行情况
12.启动DPC集群
13.查询增量测试数据并确认还原成功
--创建表空间
create tablespace TS02 datafile 'TS02.DBF' size 128 CACHE = NORMAL STORAGE( ON RAFT_2);
create tablespace TS03 datafile 'TS03.DBF' size 128 CACHE = NORMAL STORAGE( ON RAFT_3);
--创建HASH分区表
CREATE TABLE TAB1(C1 INT,C2 VARCHAR)
PARTITION BY HASH(C1)
PARTITIONS 10;
--插入数据
DECLARE
i int;
BEGIN
for i in 1..100 LOOP
insert into TAB1 VALUES(i,'a'||i);
end loop;
commit;
END;
--查询
select * from TAB1 order by C1;
--备份
BACKUP DATABASE FULL BACKUPSET
'/dm8/dmdata/dmdpc/back/fullbak20260126_test02'
COMPRESSED level 1 parallel 2;
--构造增量数据
--创建HASH分区表
CREATE TABLE TAB2(C1 INT,T DATETIME DEFAULT SYSDATE())
PARTITION BY HASH(C1)
PARTITIONS 10;
--插入数据
DECLARE
i int;
BEGIN
for i in 1..200 LOOP
insert into TAB2(c1) VALUES(i);
end loop;
commit;
END;
--查询
select * from TAB2 order by C1;
--增量备份
BACKUP DATABASE INCREMENT
WITH BACKUPDIR '/dm8/dmdata/dmdpc/back'
backupset '/dm8/dmdata/dmdpc/back/incbak20260126_test02'
compressed level 1 parallel 2;
./dmrman use_ap=2
SHOW BACKUPSET'/dm8/dmdata/dmdpc/back/incbak20260126_test02_BP1_A/' INFO META;
--删除数据
drop table TAB2;
--查询
select * from TAB2 order by C1;
#4.6:
scp -r /dm8/dmdata/dmdpc/back/fullbak20260126_test02_BP1_A/ dmdba@192.168.4.7:/dm8/dmdata/dmdpc/back/fullbak20260126_test02_BP1_B
scp -r /dm8/dmdata/dmdpc/back/incbak20260126_test02_BP1_A/ dmdba@192.168.4.7:/dm8/dmdata/dmdpc/back/incbak20260126_test02_BP1_B
scp -r /dm8/dmdata/dmdpc/back/fullbak20260126_test02_BP1_A/ dmdba@192.168.4.8:/dm8/dmdata/dmdpc/back/fullbak20260126_test02_BP1_C
scp -r /dm8/dmdata/dmdpc/back/incbak20260126_test02_BP1_A/ dmdba@192.168.4.8:/dm8/dmdata/dmdpc/back/incbak20260126_test02_BP1_C
#4.9:
scp -r /dm8/dmdata/dmdpc/back/fullbak20260126_test02_BP2_A/ dmdba@192.168.4.10:/dm8/dmdata/dmdpc/back/fullbak20260126_test02_BP2_B
scp -r /dm8/dmdata/dmdpc/back/incbak20260126_test02_BP2_A/ dmdba@192.168.4.10:/dm8/dmdata/dmdpc/back/incbak20260126_test02_BP2_B
scp -r /dm8/dmdata/dmdpc/back/fullbak20260126_test02_BP2_A/ dmdba@192.168.4.11:/dm8/dmdata/dmdpc/back/fullbak20260126_test02_BP2_C
scp -r /dm8/dmdata/dmdpc/back/incbak20260126_test02_BP2_A/ dmdba@192.168.4.11:/dm8/dmdata/dmdpc/back/incbak20260126_test02_BP2_C
#4.12:
scp -r /dm8/dmdata/dmdpc/back/fullbak20260126_test02_BP3_A/ dmdba@192.168.4.13:/dm8/dmdata/dmdpc/back/fullbak20260126_test02_BP3_B
scp -r /dm8/dmdata/dmdpc/back/incbak20260126_test02_BP3_A/ dmdba@192.168.4.13:/dm8/dmdata/dmdpc/back/incbak20260126_test02_BP3_B
scp -r /dm8/dmdata/dmdpc/back/fullbak20260126_test02_BP3_A/ dmdba@192.168.4.14:/dm8/dmdata/dmdpc/back/fullbak20260126_test02_BP3_C
scp -r /dm8/dmdata/dmdpc/back/incbak20260126_test02_BP3_A/ dmdba@192.168.4.14:/dm8/dmdata/dmdpc/back/incbak20260126_test02_BP3_C
export LANG=zh_CN.UTF-8
INSTANCE='BP1_C'
BAK_MAGIC=1945290694
DMINI=/dm8/dmdata/dmdpc/$INSTANCE/DAMENG/dm.ini
BAKSET=/dm8/dmdata/dmdpc/back/incbak20260126_test02_$INSTANCE
BAKDIR=/dm8/dmdata/dmdpc/back/fullbak20260126_test02_$INSTANCE
/dm8/dmdata/dmdpc/bin/dmrman use_ap=2 <<EOF
restore database '$DMINI' from backupset '$BAKSET' with backupdir '$BAKDIR' use bak_magic $BAK_MAGIC;
recover database '$DMINI' from backupset '$BAKSET' use bak_magic $BAK_MAGIC;
recover database '$DMINI' update db_magic;
exit
EOF
1.登录DEM管理平台,查看当前集群状态
2.确认当前数据和全量备份时间
3.插入新数据(无需恢复)并查询确认
4.进行归档备份
5.停止DPC集群
6.拷贝BP主节点备份集到备节点
7.执行批量还原脚本并确认执行情况
8.启动DPC集群
9.查询增量测试数据并确认还原到特定时间点成功
前置全备工作:将全备备份集迁移到备节点上
4.6: scp -r /dm8/dmdata/dmdpc/back/fullbak20260128_test03_BP1_A/ dmdba@192.168.4.7:/dm8/dmdata/dmdpc/back/fullbak20260128_test03_BP1_B scp -r /dm8/dmdata/dmdpc/back/fullbak20260128_test03_BP1_A/ dmdba@192.168.4.8:/dm8/dmdata/dmdpc/back/fullbak20260128_test03_BP1_C 4.9: scp -r /dm8/dmdata/dmdpc/back/fullbak20260128_test03_BP2_A/ dmdba@192.168.4.10:/dm8/dmdata/dmdpc/back/fullbak20260128_test03_BP2_B scp -r /dm8/dmdata/dmdpc/back/fullbak20260128_test03_BP2_A/ dmdba@192.168.4.11:/dm8/dmdata/dmdpc/back/fullbak20260128_test03_BP2_C 4.12: scp -r /dm8/dmdata/dmdpc/back/fullbak20260128_test03_BP3_A/ dmdba@192.168.4.13:/dm8/dmdata/dmdpc/back/fullbak20260128_test03_BP3_B scp -r /dm8/dmdata/dmdpc/back/fullbak20260128_test03_BP3_A/ dmdba@192.168.4.14:/dm8/dmdata/dmdpc/back/fullbak20260128_test03_BP3_C
前期工作:
--将DPC_LOG_INTERVAL参数开启为1
select * from v$dm_ini where para_name like 'DPC_LOG_INTERVAL%';
ALTER SYSTEM SET 'DPC_LOG_INTERVAL'=1 BOTH
--创建表
create table test(id int,name varchar(10),date datetime default now());
insert into test(id,name) values(1,'a');
insert into test(id,name) values(2,'b');
insert into test(id,name) values(3,'c');
--查询
select now(), * from test;
--全量备份
--备份时间:2026-01-28 11:35:58
BACKUP DATABASE FULL BACKUPSET
'/dm8/dmdata/dmdpc/back/fullbak20260128_test03'
COMPRESSED level 1 parallel 2;
--插入数据:2026-01-28 11:52:19
insert into test(id,name) values(888,'arch888');
insert into test(id,name) values(889,'arch889');
insert into test(id,name) values(890,'arch890');
commit
--查询
select now(), * from test;
./dmrman use_ap=2
SHOW BACKUPSET'/dm8/dmdata/dmdpc/back/fullbak20260128_test03_BP1_A/' INFO META;
--插入数据
insert into test(id,name) values(988,'no988');
insert into test(id,name) values(989,'no989');
insert into test(id,name) values(990,'no990');
commit
--查询
select now(), * from test;
--归档备份
--备份时间:12:08
backup archive log
backupset '/dm8/dmdata/dmdpc/back/arcbak20260128_test03'
compressed level 1 parallel 2
--期望归档还原时间点:12:01:00
4.6: scp -r /dm8/dmdata/dmdpc/back/arcbak20260128_test03_BP1_A/ dmdba@192.168.4.7:/dm8/dmdata/dmdpc/back/arcbak20260128_test03_BP1_B scp -r /dm8/dmdata/dmdpc/back/arcbak20260128_test03_BP1_A/ dmdba@192.168.4.8:/dm8/dmdata/dmdpc/back/arcbak20260128_test03_BP1_C 4.9: scp -r /dm8/dmdata/dmdpc/back/arcbak20260128_test03_BP2_A/ dmdba@192.168.4.10:/dm8/dmdata/dmdpc/back/arcbak20260128_test03_BP2_B scp -r /dm8/dmdata/dmdpc/back/arcbak20260128_test03_BP2_A/ dmdba@192.168.4.11:/dm8/dmdata/dmdpc/back/arcbak20260128_test03_BP2_C 4.12: scp -r /dm8/dmdata/dmdpc/back/arcbak20260128_test03_BP3_A/ dmdba@192.168.4.13:/dm8/dmdata/dmdpc/back/arcbak20260128_test03_BP3_B scp -r /dm8/dmdata/dmdpc/back/arcbak20260128_test03_BP3_A/ dmdba@192.168.4.14:/dm8/dmdata/dmdpc/back/arcbak20260128_test03_BP3_C
#主节点
export LANG=zh_CN.UTF-8
INSTANCE='BP1_A'
BAK_MAGIC=1415226276
DMINI=/dm8/dmdata/dmdpc/$INSTANCE/DAMENG/dm.ini
ARCHBAK=/dm8/dmdata/dmdpc/back/arcbak20260128_test03_$INSTANCE
BAKDIR=/dm8/dmdata/dmdpc/back/fullbak20260128_test03_$INSTANCE
ARCHDIR=/dm8/dmdata/dmdpc/$INSTANCE/DAMENG/arch
ARCHTIME='2026-01-28 12:00:00'
/dm8/dmdata/dmdpc/bin/dmrman use_ap=2 <<EOF
restore database '$DMINI' from backupset '$BAKDIR' use bak_magic $BAK_MAGIC;
recover database '$DMINI' with archivedir '$ARCHDIR' until time '$ARCHTIME';
recover database '$DMINI' update dpc_magic $BAK_MAGIC;
recover database '$DMINI' update db_magic;
exit
EOF
#备节点
export LANG=zh_CN.UTF-8
INSTANCE='BP1_C'
BAK_MAGIC=1415226276
DMINI=/dm8/dmdata/dmdpc/$INSTANCE/DAMENG/dm.ini
ARCHBAK=/dm8/dmdata/dmdpc/back/arcbak20260128_test03_$INSTANCE
BAKDIR=/dm8/dmdata/dmdpc/back/fullbak20260128_test03_$INSTANCE
ARCHDIR=/dm8/dmdata/dmdpc/$INSTANCE/DAMENG/arch
ARCHTIME='2026-01-28 12:00:00'
/dm8/dmdata/dmdpc/bin/dmrman use_ap=2 <<EOF
restore archivelog from backupset '$ARCHBAK' to database '$DMINI' overwrite 2;
restore database '$DMINI' from backupset '$BAKDIR' use bak_magic $BAK_MAGIC;
recover database '$DMINI' with archivedir '$ARCHDIR' until time '$ARCHTIME';
recover database '$DMINI' update dpc_magic $BAK_MAGIC;
recover database '$DMINI' update db_magic;
exit
EOF
文章
阅读量
获赞
