案例要求:备份→建表→插数据→删表→还原。
案例分析:需要使用归档模式进行备份还原。
前提:开启归档模式。
配置 dm.ini 的 ARCH_INI=1 及 dmarch.ini,然后 MOUNT 状态下 ALTER DATABASE ARCHIVELOG;
检查是否开启归档模式。
SELECT ARCH_MODE FROM V$DATABASE;
备份数据库(disql中执行)。
BACKUP DATABASE BACKUPSET '/dmdata/DMTEST/bak/db_bak_02';
建表插数据。
CREATE TABLE TEST_TABLE(ID INT, NAME VARCHAR(50));
INSERT INTO TEST_TABLE VALUES(1,'data_01');
INSERT INTO TEST_TABLE VALUES(2,'data_02');
INSERT INTO TEST_TABLE VALUES(3,'data_03');
INSERT INTO TEST_TABLE VALUES(4,'data_04');
INSERT INTO TEST_TABLE VALUES(5,'data_05');
INSERT INTO TEST_TABLE VALUES(6,'data_06');
INSERT INTO TEST_TABLE VALUES(7,'data_07');
INSERT INTO TEST_TABLE VALUES(8,'data_08');
INSERT INTO TEST_TABLE VALUES(9,'data_09');
INSERT INTO TEST_TABLE VALUES(10,'data_10');
COMMIT;
-- ⚠️ 记录当前时间
SELECT SYSDATE FROM DUAL;
删除测试表。
DROP TABLE TEST_TABLE;
EXIT;
停止数据库。
/dm8/bin/DmServiceDMSERVER stop
进入dmrman还原恢复。
./dmrman
-- 还原
RESTORE DATABASE '/dmdata/DMTEST/dm.ini' FROM BACKUPSET '/dmdata/DMTEST/bak/db_bak_02';
-- 基于时间点恢复(填入第二步记录的时间)
RECOVER DATABASE '/dmdata/DMTEST/dm.ini' WITH ARCHIVEDIR '/dm8/arch' UNTIL TIME '2026-07-15 14:00:00';
-- 更新db_magic
RECOVER DATABASE '/dmdata/DMTEST/dm.ini' UPDATE DB_MAGIC;
exit
启动验证数据库。
/dm8/bin/dmserver /dmdata/DMTEST/dm.ini -noconsole &
进入disql
SELECT * FROM TEST_TABLE; -- 查到10条数据 ✅
前提:开启归档模式。
配置 dm.ini 的 ARCH_INI=1 及 dmarch.ini,然后 MOUNT 状态下 ALTER DATABASE ARCHIVELOG;
检查是否开启归档模式。
SELECT ARCH_MODE FROM V$DATABASE;
停止数据库。
/dm8/bin/DmServiceDMSERVER stop
(未注册服务)
ps -ef | grep dmserver
kill -15 进程PID
进入dmrman备份。
./dmrman
BACKUP DATABASE '/dmdata/DMTEST/dm.ini' BACKUPSET '/dmdata/DMTEST/bak/db_bak_02';
启动数据库。
/dm8/bin/dmserver /dmdata/DMTEST/dm.ini -noconsole &
建表插数据。
CREATE TABLE TEST_TABLE(ID INT, NAME VARCHAR(50));
INSERT INTO TEST_TABLE VALUES(1,'data_01');
INSERT INTO TEST_TABLE VALUES(2,'data_02');
INSERT INTO TEST_TABLE VALUES(3,'data_03');
INSERT INTO TEST_TABLE VALUES(4,'data_04');
INSERT INTO TEST_TABLE VALUES(5,'data_05');
INSERT INTO TEST_TABLE VALUES(6,'data_06');
INSERT INTO TEST_TABLE VALUES(7,'data_07');
INSERT INTO TEST_TABLE VALUES(8,'data_08');
INSERT INTO TEST_TABLE VALUES(9,'data_09');
INSERT INTO TEST_TABLE VALUES(10,'data_10');
COMMIT;
-- ⚠️ 记录当前时间
SELECT SYSDATE FROM DUAL;
删除测试表。
DROP TABLE TEST_TABLE;
EXIT;
停止数据库。
ps -ef | grep dmserver
kill -15 进程PID
进入dmrman还原恢复。
./dmrman
-- 还原
RESTORE DATABASE '/dmdata/DMTEST/dm.ini' FROM BACKUPSET '/dmdata/DMTEST/bak/db_bak_02';
-- 基于时间点恢复(填入第四步记录的时间)
RECOVER DATABASE '/dmdata/DMTEST/dm.ini' WITH ARCHIVEDIR '/dm8/arch' UNTIL TIME '2026-07-16 10:28:44';
-- 更新db_magic
RECOVER DATABASE '/dmdata/DMTEST/dm.ini' UPDATE DB_MAGIC;
exit
启动验证数据库。
/dm8/bin/dmserver /dmdata/DMTEST/dm.ini -noconsole &
进入disql
SELECT * FROM TEST_TABLE; -- 查到10条数据 ✅
归档模式必须提前开启,两种备份方式均依赖归档,操作前务必通过 SELECT ARCH_MODE FROM V$DATABASE; 确认已生效。
时间点必须准确记录,INSERT 提交后、DROP TABLE 前执行 SELECT SYSDATE FROM DUAL; 并记下时间,RECOVER ... UNTIL TIME 填写有误将导致恢复失败。
dmrman 三步顺序不可颠倒:先 RESTORE 还原备份集 → 再 RECOVER ... UNTIL TIME 应用归档日志 → 最后 UPDATE DB_MAGIC,缺少任一步数据库将无法正常启动。
停库方式按实际情况选择:已注册服务用 DmServiceDMSERVER stop,未注册服务用 kill -15 PID,避免 kill -9 强制终止导致数据损坏。
联机备份与脱机备份的核心区别
| 对比项 | 联机备份 | 脱机备份 |
|---|---|---|
| 数据库状态 | 运行中(OPEN)备份 | 停止后备份 |
| 备份工具 | disql 中执行 SQL | dmrman 工具 |
| 业务影响 | 不中断业务 | 需停库,影响业务 |
| 适用场景 | 生产环境推荐 | 测试/维护窗口 |
文章
阅读量
获赞
