mkdir -p /dmdata/data/test5240/arch
chown -R dmdba:dmdba /dmdata/data/test5240/arch
chmod -R 750 /dmdata/data/test5240/arch
cd /home/dmdba/dmdbms/bin
vi /dmdata/data/test5240/dm.ini
修改为ARCH_INI=1
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/data/test5240/arch # 归档文件存放路径,提前建好
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 10240
(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;
进行全库备份,命令:BACKUP DATABASE BACKUPSET 'DB_FULL_20260728';
检验备份完整性,命令: ./dmrman CTLSTMT="CHECK BACKUPSET '/dmdata/data/test5240/bak/DB_FULL_20260728'"
(2)增量备份
修改表test内容
UPDATE test SET name='222' WHRER id = 200000;
进行增量备份:BACKUP DATABASE INCREMENT BASE ON BACKUPSET 'DB_FULL_20260728' BACKUPSET 'DB_INC_20260728';
校验备份完整性,命令:./dmrman CTLSTMT="CHECK BACKUPSET '/dmdata/data/test5240/bak/DB_INC_20260728'"
(3)归档备份
BACKUP ARCHIVE LOG BACKUPSET 'ARCH_BAK_20260728';
./dmrman CTLSTMT="CHECK BACKUPSET '/dmdata/data/test5240/bak/ARCH_BAK_20260727'"
(1)关闭数据库
./DmServiceDMTEST stop
(2)脱机全库备份
./dmrman CTLSTMT="BACKUP DATABASE '/dmdata/data/DMTEST/dm.ini' BACKUPSET 'BACKUP_FILE_01_20260727'"
验证完整性, ./dmrman CTLSTMT="CHECK BACKUPSET '/dmdata/data/DMTEST/bak/BACKUP_FILE_01_20260727'"
(3)增量备份
./dmrman CTLSTMT="BACKUP DATABASE '/dmdata/data/DMTEST/dm.ini' INCREMENT BASE ON BACKUPSET 'BACKUP_FILE_01_20260727' BACKUPSET 'BACKUP_FILE_INC_01_20260727'"
只需要恢复到全备备份时间点,不需要后续增量、归档
脱机备份后的脱机还原
./dmrman CTLSTMT="RESTORE DATABASE '/dmdata/data/DMTEST/dm.ini' FROM BACKUPSET '/dmdata/data/DMTEST/bak/BACKUP_FILE_01_20260727'"
更新魔数
./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/DMTEST/dm.ini' UPDATE DB_MAGIC"
(1)脱机还原联机全库备份
./dmrman CTLSTMT="RESTORE DATABASE '/dmdata/data/test5240/dm.ini' FROM BACKUPSET '/dmdata/data/test5240/bak/DB_FULL_20260728'"
./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/test5240/dm.ini' FOR STANDBY FROM BACKUPSET '/dmdata/data/test5240/bak/DB_FULL_20260728'"
./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/test5240/dm.ini' UPDATE DB_MAGIC"
检验全库还原成功
(2)脱机还原联机全库+增量备份
./dmrman CTLSTMT="RESTORE DATABASE '/dmdata/data/test5240/dm.ini' FROM BACKUPSET '/dmdata/data/test5240/bak/DB_FULL_20260728'"
./dmrman CTLSTMT="RESTORE DATABASE '/dmdata/data/test5240/dm.ini' FROM BACKUPSET '/dmdata/data/test5240/bak/DB_INC_20260728'"
./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/test5240/dm.ini' FOR STANDBY FROM BACKUPSET '/dmdata/data/test5240/bak/DB_INC_20260728'"
./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/test5240/dm.ini' UPDATE DB_MAGIC"
验证
(3)归档还原,恢复到指定时间点
9:17更新表
UPDATE test SET name='222' WHRER id = 199999;
9:19更新表
UPDATE test SET name='333' WHRER id = 200000;
还原全库备份
./dmrman CTLSTMT="RESTORE DATABASE '/dmdata/data/test5240/dm.ini' FROM BACKUPSET '/dmdata/data/test5240/bak/DB_FULL_20260728'"
还原增量备份
./dmrman CTLSTMT="RESTORE DATABASE '/dmdata/data/test5240/dm.ini' FROM BACKUPSET '/dmdata/data/test5240/bak/DB_INC_20260728'"
恢复到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'"
更新数据库魔数
./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/test5240/dm.ini' UPDATE DB_MAGIC"
5.连续增量备份还原
(1)创建表
create table test1(ID INT);
INSERT INTO test1 VALUES(1);
INSERT INTO test1 VALUES(1);
INSERT INTO test1 VALUES(1);
COMMIT;
(2)进行全库备份
BACKUP DATABASE '/data/dmdata/DAMENG/dm.ini' BACKUPSET 'BACKUP_FILE_01'
(3)修改表
(4)第一次增量备份
BACKUP DATABASE '/data/dmdata/DAMENG/dm.ini' INCREMENT BASE ON BACKUPSET 'BACKUP_FILE_01' BACKUPSET 'BACKUP_FILE_INC_01'
(5)再次修改表以及第二次增量备份
本次备份在第一次增量备份的基础上备份。
BACKUP DATABASE '/data/dmdata/DAMENG/dm.ini' INCREMENT BASE ON BACKUPSET 'BACKUP_FILE_INC_01' BACKUPSET 'BACKUP_FILE_INC_02'
(6)进行连续增量还原
INSERT INTO test1 VALUES(100);
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;
因脱机备份不产生日志故可不还原日志。
验证
需先保证主备前置条件已配置完成。
(1)正常关闭主机数据库
(2)进行脱机备份
./dmrman CTLSTMT="BACKUP DATABASE '/dmdata/data/DMDBA/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/dmdata/dmbak/BACKUP_FILE_01'"
(3)拷贝备份文件到备库所在机器
scp -r /dmdata/dmbak/BACKUP_FILE_01 root@192.168.18.138:/dmdata/dmbak
(4)执行脱机数据库还原与恢复
数据库还原:
./dmrman CTLSTMT="RESTORE DATABASE '/dmdata/data/DMDBA/dm.ini' FROM BACKUPSET '/dmdata/dmbak/BACKUP_FILE_01'"
因为脱机备份没有产生任何 REDO 日志,所以此处省略恢复数据库的操作步骤。
数据库更新:
./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/DMDBA/dm.ini' UPDATE DB_MAGIC"
(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"
文章
阅读量
获赞
