归档恢复相关介绍
- 归档恢复,就是利用重做本地归档日志来恢复数据的过程。由于日志重做过程中,修改好的数据页首先存入缓冲区,缓冲区分批次将修改好的数据页写入磁盘,如果在此过程中发生异常中断,可能导致缓冲区中的数据页无法写入磁盘,造成数据的不一致,数据库启动时校验失败,所以数据库恢复过程中不允许异常中断。
- 通过使用 RECOVER 命令进行数据库恢复,添加UNTIL TIME参数,恢复数据库到指定的时间点。如果指定的结束时间早于备份结束时间,忽略 UNTIL TIME 参数,重做所有小于备份结束 LSN(END_LSN)的 REDO 日志,将系统 恢复到备份结束时间点的状态,此时并不能精确恢复到 END_LSN,只能保证重演到 END_LSN 之后的第一个时间戳日志,该日志对应的 LSN 值略大于 END_LSN。或者添加UNTIL LSN参数,恢复数据库到指定的 LSN。如果指定的 UNTIL LSN 小于备份结束LSN(END_LSN),则报错。
- 数据库恢复后,还需要执行数据库更新操作,将数据库调整为可正常工作的库才算完成。
环境准备
操作系统:Kylin Linux Advanced Server V10
达梦数据库:dm8_20230104_x86_rh6_64
路径 | 说明 |
---|---|
/dm8 | 数据库安装路径 |
/dm8/data | 数据文件存放路径 |
/dm8/bak | 备份文件存放路径 |
/dm8/arch | 归档文件存放路径 |
开启本地归档
联机备份前需先开启本地归档或远程归档
1、更改dm.ini配置文件中ARCH_INI参数为1
vi /dm8/data/DAMENG/dm.ini
ARCH_INI = 1
2、添加配置文件dmarch.ini至/dm8/data/DAMENG/目录下
vi /dm8/data/DAMENG/dmarch.ini
[ARCHIVE_LOCAL1]
ARCH_TYPE=LOCAL
ARCH_DEST=/dm8/arch
ARCH_FILE_SIZE=2048
ARCH_SPACE_LIMIT=10240
3、重启dmserver服务
cd /dm8/bin
./dmserverd restart
联机备份数据库
cd /dm8/bin
./disql SYSDBA/Dameng123:5236
SQL>backup database backupset '/dm8/bak/dmbak_full';
手动制造数据故障
创建test表,并插入2条数据,删除该表,并记录删除表的时间点。
cd /dm8/bin
./disql SYSDBA/Dameng123:5236
SQL> create table test (a int,b int);
SQL> insert into test values(1,1);
SQL> insert into test values(2,2);
SQL> commit;
SQL> select * from test;
SQL> drop table test;
SQL> select sysdate;
脱机还原数据库
cd /dm8/bin
./dmserverd stop
./dmrman
RMAN> restore database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/bak/dmbak_full';
RMAN> recover database '/dm8/data/DAMENG/dm.ini' with archivedir '/dm8/arch' until time '2023-07-13 10:56:00';
RMAN> recover database '/dm8/data/DAMENG/dm.ini' update db_magic;
启动数据库服务,验证数据是否恢复
cd /dm8/bin
./dmserverd start
./disql SYSDBA/Dameng123
SQL> select * from test;
总结
- 恢复数据库到指定时间点/LSN 是从归档恢复的一种方式,也称为不完全恢复。从归档恢复允许恢复到指定的时间点及指定的 LSN 值。若同时指定了时间点和 LSN,则以较早的为结束点。用户可以通过指定一个时间点/LSN,使数据库恢复到这个指定的时间点/LSN。
- 备份与恢复过程都依赖归档日志,归档日志是保证数据一致性和完整性的重要保障。一般来说配有归档日志的数据库系统在出现故障时丢失数据的可能性更小,这是因为一旦出现介质故障:如磁盘损坏时,利用归档日志,系统可被恢复至故障发生的前一刻,也可以还原到指定的时间点。
达梦数据库社区地址:https://eco.dameng.com