注册
单机与主备上的备份还原示例
培训园地/ 文章详情 /

单机与主备上的备份还原示例

努力成为合格码农 2026/09/24 249 0 0

一、备份还原前准备工作(单机)

1.创建归档目录并授权

mkdir -p /dmdata/data/test5240/arch
chown -R dmdba:dmdba /dmdata/data/test5240/arch
chmod -R 750 /dmdata/data/test5240/arch

2.修改 dm.ini配置

cd /home/dmdba/dmdbms/bin
vi /dmdata/data/test5240/dm.ini
修改为ARCH_INI=1
image.png

3.编写 dmarch.ini 归档配置

[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/data/test5240/arch    # 归档文件存放路径,提前建好
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 10240

二、单机备份还原示例

1.联机全库备份、增量备份、归档备份

(1)联机全库备份
创建表test,向表中加入20w行数据
CREATE TABLE test(
id INT IDENTITY(1,1) PRIMARY KEY,
name VARCHAR(200)
);
INSERT INTO test(name) SELECT '111' FROM DUAL CONNECT BY LEVEL <= 200000;
image.png
进行全库备份,命令:BACKUP DATABASE BACKUPSET 'DB_FULL_20260728';
image.png
检验备份完整性,命令: ./dmrman CTLSTMT="CHECK BACKUPSET '/dmdata/data/test5240/bak/DB_FULL_20260728'"
image.png
(2)增量备份
修改表test内容
UPDATE test SET name='222' WHRER id = 200000;
image.png
 进行增量备份:BACKUP DATABASE INCREMENT BASE ON BACKUPSET 'DB_FULL_20260728' BACKUPSET 'DB_INC_20260728';
image.png
 校验备份完整性,命令:./dmrman CTLSTMT="CHECK BACKUPSET '/dmdata/data/test5240/bak/DB_INC_20260728'"
image.png
(3)归档备份
BACKUP ARCHIVE LOG BACKUPSET 'ARCH_BAK_20260728';
image.png
 ./dmrman CTLSTMT="CHECK BACKUPSET '/dmdata/data/test5240/bak/ARCH_BAK_20260727'"
image.png

2.脱机全库备份、增量备份

(1)关闭数据库
./DmServiceDMTEST stop
(2)脱机全库备份
./dmrman CTLSTMT="BACKUP DATABASE '/dmdata/data/DMTEST/dm.ini' BACKUPSET 'BACKUP_FILE_01_20260727'"
image.png
验证完整性, ./dmrman CTLSTMT="CHECK BACKUPSET '/dmdata/data/DMTEST/bak/BACKUP_FILE_01_20260727'"
image.png
(3)增量备份
 ./dmrman CTLSTMT="BACKUP DATABASE '/dmdata/data/DMTEST/dm.ini' INCREMENT BASE ON BACKUPSET 'BACKUP_FILE_01_20260727' BACKUPSET 'BACKUP_FILE_INC_01_20260727'"
image.png

3.使用全库备份还原

只需要恢复到全备备份时间点,不需要后续增量、归档
脱机备份后的脱机还原
 ./dmrman CTLSTMT="RESTORE DATABASE '/dmdata/data/DMTEST/dm.ini' FROM BACKUPSET '/dmdata/data/DMTEST/bak/BACKUP_FILE_01_20260727'"
image.png
更新魔数
./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/DMTEST/dm.ini' UPDATE DB_MAGIC"
image.png

4.使用全库备份+增量备份集+归档还原到指定时间点

(1)脱机还原联机全库备份
./dmrman CTLSTMT="RESTORE DATABASE '/dmdata/data/test5240/dm.ini' FROM BACKUPSET '/dmdata/data/test5240/bak/DB_FULL_20260728'"
image.png
./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/test5240/dm.ini' FOR STANDBY FROM BACKUPSET '/dmdata/data/test5240/bak/DB_FULL_20260728'"
image.png
./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/test5240/dm.ini' UPDATE DB_MAGIC"
image.png
检验全库还原成功
image.png
(2)脱机还原联机全库+增量备份
./dmrman CTLSTMT="RESTORE DATABASE '/dmdata/data/test5240/dm.ini' FROM BACKUPSET '/dmdata/data/test5240/bak/DB_FULL_20260728'"
image.png
./dmrman CTLSTMT="RESTORE DATABASE '/dmdata/data/test5240/dm.ini' FROM BACKUPSET '/dmdata/data/test5240/bak/DB_INC_20260728'"
image.png
./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/test5240/dm.ini' FOR STANDBY FROM BACKUPSET '/dmdata/data/test5240/bak/DB_INC_20260728'"
image.png
./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/test5240/dm.ini' UPDATE DB_MAGIC"
image.png
验证
image.png
(3)归档还原,恢复到指定时间点
9:17更新表
UPDATE test SET name='222' WHRER id = 199999;
image.png
9:19更新表
UPDATE test SET name='333' WHRER id = 200000;
image.png
还原全库备份
./dmrman CTLSTMT="RESTORE DATABASE '/dmdata/data/test5240/dm.ini' FROM BACKUPSET '/dmdata/data/test5240/bak/DB_FULL_20260728'"
image.png
还原增量备份
./dmrman CTLSTMT="RESTORE DATABASE '/dmdata/data/test5240/dm.ini' FROM BACKUPSET '/dmdata/data/test5240/bak/DB_INC_20260728'"
image.png
恢复到9:18
./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/test5240/dm.ini' WITH ARCHIVEDIR '/dmdata/data/test5240/arch' UNTIL TIME '2026-01-31 9:18:00'"
image.png
 更新数据库魔数
./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/test5240/dm.ini' UPDATE DB_MAGIC"
image.png
5.连续增量备份还原
(1)创建表
create table test1(ID INT);
INSERT INTO test1 VALUES(1);
INSERT INTO test1 VALUES(1);
INSERT INTO test1 VALUES(1);
COMMIT;
image.png
(2)进行全库备份
BACKUP DATABASE '/data/dmdata/DAMENG/dm.ini' BACKUPSET 'BACKUP_FILE_01'
image.png
(3)修改表
image.png
(4)第一次增量备份
BACKUP DATABASE '/data/dmdata/DAMENG/dm.ini' INCREMENT BASE ON BACKUPSET 'BACKUP_FILE_01' BACKUPSET 'BACKUP_FILE_INC_01'
image.png
(5)再次修改表以及第二次增量备份
本次备份在第一次增量备份的基础上备份。
BACKUP DATABASE '/data/dmdata/DAMENG/dm.ini' INCREMENT BASE ON BACKUPSET 'BACKUP_FILE_INC_01' BACKUPSET 'BACKUP_FILE_INC_02'
image.png
(6)进行连续增量还原
INSERT INTO test1 VALUES(100);
image.png
RESTORE DATABASE '/data/dmdata/DAMENG/dm.ini' FROM BACKUPSET 'BACKUP_FILE_01';
RESTORE DATABASE '/data/dmdata/DAMENG/dm.ini' FROM BACKUPSET 'BACKUP_FILE_INC_01'
RESTORE DATABASE '/data/dmdata/DAMENG/dm.ini' FROM BACKUPSET 'BACKUP_FILE_INC_02'
RECOVER DATABASE '/data/dmdata/DAMENG/dm.ini' FROM BACKUPSET 'BACKUP_FILE_INC_02';
RECOVER DATABASE '/data/dmdata/DAMENG/dm.ini' UPDATE DB_MAGIC;
image.png
因脱机备份不产生日志故可不还原日志。
验证
image.png

三、主备备份还原操作

需先保证主备前置条件已配置完成。

1.脱机备份、脱机还原

(1)正常关闭主机数据库
(2)进行脱机备份
./dmrman CTLSTMT="BACKUP DATABASE '/dmdata/data/DMDBA/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/dmdata/dmbak/BACKUP_FILE_01'"
image.png
(3)拷贝备份文件到备库所在机器
scp -r /dmdata/dmbak/BACKUP_FILE_01 root@192.168.18.138:/dmdata/dmbak
image.png
(4)执行脱机数据库还原与恢复
数据库还原:
./dmrman CTLSTMT="RESTORE DATABASE '/dmdata/data/DMDBA/dm.ini' FROM BACKUPSET '/dmdata/dmbak/BACKUP_FILE_01'"
image.png
因为脱机备份没有产生任何 REDO 日志,所以此处省略恢复数据库的操作步骤。
数据库更新:
./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/DMDBA/dm.ini' UPDATE DB_MAGIC"
image.png

2.联机备份、脱机还原

(1)对主库进行联机备份操作
SQL> BACKUP DATABASE BACKUPSET '/dmdata/dmbak/BACKUP_FILE_01';
(2)拷贝备份文件到备库所在机器
scp -r /dmdata/dmbak/BACKUP_FILE_01 root@192.168.18.138:/dmdata/dmbak
(3)执行脱机数据库还原与恢复
数据库还原:
./dmrman CTLSTMT="RESTORE DATABASE '/dmdata/data/DMDBA/dm.ini' FROM BACKUPSET '/dmdata/dmbak/BACKUP_FILE_01'"
数据库恢复:
./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/DMDBA/dm.ini' FROM BACKUPSET '/dmdata/dmbak/BACKUP_FILE_01'"
数据库更新
./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' UPDATE DB_MAGIC"

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服