| IP | 数据库 | 系统 |
|---|---|---|
| 192.168.163.128(A) | dm8 | centos7.9 |
| 192.168.163.131(B) | dm8 | centos7.9 |
安装略
A库构造数据执行全量备份,增量备份,归档备份等
-- 1.创建一张用于测试的大表
CREATE TABLE "TEST_USER_5KW"
(
ID BIGINT IDENTITY(1,1) NOT NULL,
USER_ID VARCHAR(50) NOT NULL,
USER_NAME VARCHAR(100),
AGE TINYINT,
SCORE NUMBER(10,2),
CREATE_TIME DATETIME DEFAULT SYSDATE,
UPDATE_TIME DATETIME,
IS_ACTIVE CHAR(1) DEFAULT 'Y',
REGION_CODE VARCHAR(20),
-- ⭐ JSON 列(达梦支持 JSON 类型)
USER_JSON JSON,
-- 普通大文本备用
REMARK VARCHAR(4000)
)
STORAGE (ON "MAIN", CLUSTERBTR) -- 可按需改为行/列存
;
COMMENT ON TABLE TEST_USER_5KW IS '5kw 测试表,含 JSON 数据';
COMMENT ON COLUMN TEST_USER_5KW.USER_JSON IS '用户画像 JSON:包含地址、设备、标签、扩展信息';
-- 2. 插入第一批基础数据(例如 1000 行)
INSERT INTO TEST_USER_5KW (USER_ID, USER_NAME, AGE, SCORE, CREATE_TIME, REGION_CODE, USER_JSON)
SELECT
'U_' || LEVEL,
'name_' || LEVEL,
MOD(LEVEL, 100) + 18,
DBMS_RANDOM.VALUE(1000, 100000),
SYSDATE - DBMS_RANDOM.VALUE(0, 365),
CASE MOD(LEVEL, 10)
WHEN 0 THEN 'BJ' WHEN 1 THEN 'SH' WHEN 2 THEN 'GZ' ELSE 'OTHER'
END,
('{
"addr": {
"city": "' || CASE MOD(LEVEL, 5)
WHEN 0 THEN 'Beijing' WHEN 1 THEN 'Shanghai' ELSE 'Guangzhou' END || '",
"zone": "zone_' || MOD(LEVEL, 20) || '"
},
"device": {
"os": "' || CASE MOD(LEVEL, 3) WHEN 0 THEN 'Android' WHEN 1 THEN 'iOS' ELSE 'Harmony' END || '",
"ver": "' || ROUND(DBMS_RANDOM.VALUE(1, 15), 1) || '"
},
"tags": ["vip", "level_' || MOD(LEVEL, 10) || '", "active_' || MOD(LEVEL, 2) || '"],
"score_meta": ' || DBMS_RANDOM.VALUE(0, 99999) || '
}')
FROM DUAL
CONNECT BY LEVEL <= 10000;
---3.插入数据脚本
INSERT INTO TEST_USER_5KW (USER_ID, USER_NAME, AGE, SCORE, CREATE_TIME, REGION_CODE, USER_JSON)
SELECT
'COPY_' || USER_ID,
USER_NAME || '_c',
AGE,
SCORE * 0.99,
CREATE_TIME + 1,
REGION_CODE,
USER_JSON
FROM TEST_USER_5KW
WHERE ID <= 10000;
COMMIT;
---查询一下构造的数据
SQL> select count(*) from TEST_USER_5KW;
行号 COUNT(*)
---------- --------------------
1 80000
SQL> select id from TEST_USER_5KW order by id desc limit 10;
行号 ID
---------- --------------------
1 80000
2 79999
3 79998
4 79997
5 79996
6 79995
7 79994
8 79993
9 79992
10 79991
---联机全量备份,然后插入数据
SQL> backup database backupset '/dmdata/dmbak/fullbak_0604';
SQL> select id from TEST_USER_5KW order by id desc limit 2;
行号 ID
---------- --------------------
1 90000
2 89999
---联机增量备份,然后插入数据
SQL> backup database increment base on backupset '/dmdata/dmbak/fullbak_0604' backupset '/dmdata/dmbak/fullbak_0604_incre1';
SQL> select id from TEST_USER_5KW order by id desc limit 2;
行号 ID
---------- --------------------
1 100000
2 99999
--继续联机增量备份,然后插入数据
SQL> backup database increment base on backupset '/dmdata/dmbak/fullbak_0604' backupset '/dmdata/dmbak/fullbak_0604_incre2';
SQL> select id from TEST_USER_5KW order by id desc limit 2;
行号 ID
---------- --------------------
1 110000
2 109999
---查看最新归档和redolog
SQL> select STATUS,PATH,ARCH_LSN,CLSN from v$arch_file;
行号 STATUS PATH ARCH_LSN
---------- -------- ------------------------------------------------------------------------ --------------------
CLSN
--------------------
10 INACTIVE /dmdata/arch/arch2/ARCHIVE_LOCAL1_0x109C76AB_EP0_2026-06-01_16-54-31.log 13288343
13318912
11 ACTIVE /dmdata/arch/arch2/ARCHIVE_LOCAL1_0x109C76AB_EP0_2026-06-02_17-08-22.log 13318913
13501928
SQL> SELECT FILE_LSN,FLUSH_LSN,CUR_LSN FROM v$rlog;
行号 FILE_LSN FLUSH_LSN CUR_LSN
---------- -------------------- -------------------- --------------------
1 13501928 13501928 13501928
#还原
#指定REUSE DMINI参数,可恢复dm.ini中除路径相关的INI参数
dmrman ctlstmt="restore database '/dmdata/data2/DAMENG/dm.ini' reuse dmini from backupset '/dmdata/dmbak/fullbak_0604'"
#恢复
RMAN> recover database '/dmdata/data2/DAMENG/dm.ini' from backupset '/dmdata/dmbak/fullbak_0604'
#更新db_magic
RMAN> recover database '/dmdata/data2/DAMENG/dm.ini' update db_magic
#启动数据库
dmserver /dmdata/data2/DAMENG/dm.ini
#disql查询数据与源库一直
SQL> select id from TEST_USER_5KW order by id desc limit 2;
LINEID ID
---------- --------------------
1 80000
2 79999
#根据全备份文件生成映射文件
RMAN> dump backupset '/dmdata/dmbak/fullbak_0604' mapped file '/dmdata/data3/map_file_01.txt'
#修改映射文件中的路径
[dmdba@dm4 data3]$ cat map_file_01.txt
/**************************************************************/
/*** Delete the unnecessary modified groups **/
/*** Modify the data_path or mirror_path only in one group **/
/**************************************************************/
/**=============================================================**/
/*[DAMENG2_SYSTEM_FIL_0]*/
fil_id = 0
ts_id = 0
ts_name = "SYSTEM"
data_path = "/dmdata/data3/DAMENG2/SYSTEM.DBF"
mirror_path =
data_mirror = 1
data_striping = 0
/**=============================================================**/
/*[DAMENG2_ROLL_FIL_0]*/
fil_id = 0
ts_id = 1
ts_name = "ROLL"
data_path = "/dmdata/data3/DAMENG2/ROLL.DBF"
mirror_path =
data_mirror = 1
data_striping = 0
/**=============================================================**/
/*[DAMENG2_RLOG_FIL_4]*/
ts_id = 2
ts_name = "RLOG"
data_path =
data_mirror = 1
data_striping = 0
/**=============================================================**/
/*[DAMENG2_MAIN_FIL_0]*/
fil_id = 0
ts_id = 4
ts_name = "MAIN"
data_path = "/dmdata/data3/DAMENG2/MAIN.DBF"
mirror_path =
data_mirror = 1
data_striping = 0
/***************************** END ****************************/
#全备还原时MAPPED FILE指定映射文件
RMAN> restore database '/dmdata/data2/DAMENG/dm.ini' reuse dmini from backupset '/dmdata/dmbak/fullbak_0604'
mapped file '/dmdata/data3/map_file_01.txt'
#全备恢复
RMAN> recover database '/dmdata/data2/DAMENG/dm.ini' from backupset '/dmdata/dmbak/fullbak_0604'
RMAN> recover database '/dmdata/data2/DAMENG/dm.ini' update db_magic
#启动数据库后查询表空间目录和数据
SQL> select t.name,d.path from v$tablespace as t,v$datafile as d where t.id=d.id;
LINEID NAME PATH
---------- ------ --------------------------------
1 SYSTEM /dmdata/data3/DAMENG2/SYSTEM.DBF
2 SYSTEM /dmdata/data3/DAMENG2/MAIN.DBF
3 SYSTEM /dmdata/data2/DAMENG/TEMP.DBF
4 SYSTEM /dmdata/data3/DAMENG2/ROLL.DBF
used time: 17.104(ms). Execute id is 601.
SQL> select id from TEST_USER_5KW order by id desc limit 2;
LINEID ID
---------- --------------------
1 80000
2 79999
#使用某个增量备份文件还原,自动会还原其依赖的基全备份
RMAN> restore database '/dmdata/data2/DAMENG/dm.ini' reuse dmini from backupset '/dmdata/dmbak/fullbak_0604_incre1'
#恢复
RMAN> recover database '/dmdata/data2/DAMENG/dm.ini' from backupset '/dmdata/dmbak/fullbak_0604_incre1'
RMAN> recover database '/dmdata/data2/DAMENG/dm.ini' update db_magic
#启动数据库查询数据,和第一个增量备份数据相同
SQL> select id from TEST_USER_5KW order by id desc limit 2;
LINEID ID
---------- --------------------
1 90000
2 89999
#查看备份集信息,查看clsn信息,备份时间信息等
RMAN> check backupset '/dmdata/dmbak/fullbak_0604_incre2'
RMAN> show backupset '/dmdata/dmbak/fullbak_0604_incre2'
#从源库拷贝需要的归档
scp ARCHIVE_LOCAL1_0x109C76AB_EP0_2026-06-02_17-08-22.log dmdba@192.168.163.131:/dmdata/dmbak/
#使用最后1个增量备份还原,自动会还原基全备份
RMAN> restore database '/dmdata/data2/DAMENG/dm.ini' from backupset '/dmdata/dmbak/fullbak_0604_incre2'
#恢复归档,不指定恢复到某个时间点或者LSN,如果不指定恢复到某个时间点或者LSN会应用归档中所有日志
RMAN> recover database '/dmdata/data2/DAMENG/dm.ini' with archivedir '/dmdata/dmbak'
RMAN> recover database '/dmdata/data2/DAMENG/dm.ini' update db_magic
#启动服务查询数据,为最新插入的数据
SQL> select id from TEST_USER_5KW order by id desc limit 2;
LINEID ID
---------- --------------------
1 110000
2 109999
SQL> SELECT N_EP, APPLY_LSN_ARR FROM V$RAPPLY_LSN_INFO;
LINEID N_EP APPLY_LSN_ARR
---------- ----------- -------------
1 0 (13501940)
#源库查询
SQL> SELECT CKPT_LSN,FILE_LSN from v$rlog;
行号 CKPT_LSN FILE_LSN
---------- -------------------- --------------------
1 13501940 13501945
#继续插入数据
#查看备份集信息,查看clsn信息,备份时间信息等
RMAN> check backupset '/dmdata/dmbak/fullbak_0604_incre2'
RMAN> show backupset '/dmdata/dmbak/fullbak_0604_incre2'
#从源库拷贝需要的归档
scp ARCHIVE_LOCAL1_0x109C76AB_EP0_2026-06-02_17-08-22.log dmdba@192.168.163.131:/dmdata/dmbak/
#使用最后1个增量备份还原,自动会还原基全备份
RMAN> restore database '/dmdata/data2/DAMENG/dm.ini' from backupset '/dmdata/dmbak/fullbak_0604_incre2'
#恢复归档到某个时间点或者LSN until lsn /until time
RMAN> recover database '/dmdata/data2/DAMENG/dm.ini' with archivedir '/dmdata/dmbak' until time '2026-06-04 15:00:00'
#恢复完成后,不更新update db_magic,使用dmserver启动时配置recover_check=0,这种状态下是以备库配置状态启动数据库,
对数据库进行只读操作,然后登录数据库后查询
dmserver /dmdata/data2/DAMENG/dm.ini recover_check=0
#启动服务,查询数据
SQL> alter database open force;
executed successfully
SQL> select id from TEST_USER_5KW order by id desc limit 2;
LINEID ID
---------- --------------------
1 110000
2 109999
#没有想要的数据,关闭服务,继续恢复到其他时间点
RMAN> recover database '/dmdata/data2/DAMENG/dm.ini' with archivedir '/dmdata/dmbak' until time '2026-06-04 17:00:00'
#启动服务,查询数据
dmserver /dmdata/data2/DAMENG/dm.ini recover_check=0
SQL> alter database open force;
executed successfully
SQL> select id from TEST_USER_5KW order by id desc limit 2;
LINEID ID
---------- --------------------
1 120000
2 119999
#如果已经找到数据想正常使用,在关闭数据库,更新db_magic即可
#源库备份所有归档
SQL> backup archivelog all backupset '/dmdata/dmbak/arch_all_bak';
#传输备份归档到目标库
scp -r arch_all_bak dmdba@192.168.163.131:/dmdata/dmbak
#需要先将归档备份集还原成原始归档文件
RMAN> RESTORE ARCHIVE LOG FROM BACKUPSET '/dmdata/dmbak/arch_all_bak' TO ARCHIVEDIR '/dmdata/dmbak'
#检查归档连续性
dmrachk F_TYPE=1 F_PATH=/dmdata/dmbak/
#还原
RMAN> restore database '/dmdata/data2/DAMENG/dm.ini' from backupset '/dmdata/dmbak/fullbak_0604_incre2'
#恢复
RMAN> recover database '/dmdata/data2/DAMENG/dm.ini' with archivedir '/dmdata/dmbak'
#不完全恢复
RMAN> recover database '/dmdata/data2/DAMENG/dm.ini' with archivedir '/dmdata/dmbak' until time '2026-06-04 17:00:00'
#只读打开或者更新打开
RMAN> recover database '/dmdata/data2/DAMENG/dm.ini' update db_magic
#如果源库故障,归档不完整,即redolog还未写入归档日志,此时无法恢复最新数据,需要修复归档
RMAN> REPAIR ARCHIVELOG DATABASE '/opt/dmdbms/data/dm.ini';
达梦社区技术 https://eco.dameng.com
文章
阅读量
获赞
