注册
备份还原实战
专栏/技术分享/ 文章详情 /

备份还原实战

Kira 2026/07/24 55 0 0
摘要

案例要求:备份→建表→插数据→删表→还原。
案例分析:需要使用归档模式进行备份还原。

操作步骤(以下介绍两种备份方法)

联机备份

前提:开启归档模式。

配置 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条数据 ✅

总结与注意事项

  1. 归档模式必须提前开启,两种备份方式均依赖归档,操作前务必通过 SELECT ARCH_MODE FROM V$DATABASE; 确认已生效。

  2. 时间点必须准确记录INSERT 提交后、DROP TABLE 前执行 SELECT SYSDATE FROM DUAL; 并记下时间,RECOVER ... UNTIL TIME 填写有误将导致恢复失败。

  3. dmrman 三步顺序不可颠倒:先 RESTORE 还原备份集 → 再 RECOVER ... UNTIL TIME 应用归档日志 → 最后 UPDATE DB_MAGIC,缺少任一步数据库将无法正常启动。

  4. 停库方式按实际情况选择:已注册服务用 DmServiceDMSERVER stop,未注册服务用 kill -15 PID,避免 kill -9 强制终止导致数据损坏。

  5. 联机备份与脱机备份的核心区别

对比项 联机备份 脱机备份
数据库状态 运行中(OPEN)备份 停止后备份
备份工具 disql 中执行 SQL dmrman 工具
业务影响 不中断业务 需停库,影响业务
适用场景 生产环境推荐 测试/维护窗口
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服