摘要:本文将介绍创建定时归档备份作业,以及模拟归档日志丢失后,利用备份和归档备份对数据库进行还原。
备份与恢复过程都依赖归档日志,归档日志是保证数据一致性和完整性的重要保障。配有归档日志的数据库系统在出现故障时丢失数据的可能性更小,这是因为一旦出现介质故障如磁盘损坏时,利用归档日志,系统可被恢复至故障发生的前一刻,也可以还原到指定的时间点。
数据恢复时应用的 REDO 日志,既可以是那些在备份过程中产生的、包含在备份集中的REDO 日志,也可以是备份数据库本地归档日志文件。在本地归档日志完整的情况下,数据还原结束后,可以利用本地归档日志和联机日志实现数据库的完全恢复,因此备份归档日志显得尤为重要。
本文将介绍如何创建归档备份的定时作业,利用归档备份进行还原以及观察在执行备份前后、手动执行联机日志切换操作后、执行归档备份前后,归档目录下归档日志的产生情况。
数据库可以在联机状态或脱机状态下进行归档配置,本文中是在脱机状态下,手动配置dmarch.ini文件和开启ARCH_INI参数的方式进行配置。其他方法可参考文章:https://eco.dameng.com/document/dm/zh-cn/pm/backup-restore-combat#3.1.2%20%E5%BD%92%E6%A1%A3%E9%85%8D%E7%BD%AE
1)手动编辑 dmarch.ini 文件,之后保存在 dm.ini 所在的目录;
dmarch.ini 文件内容如下:
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /data/dmarch
ARCH_FILE_SIZE = 256
ARCH_SPACE_LIMIT = 2048
ARCH_HANG_FLAG = 1
2)编辑 dm.ini 文件,设置参数 ARCH_INI=1,保存;
ARCH_INI = 1
3)启动数据库实例,数据库已运行于归档模式。
备份前,在数据库中创建表并插入测试数据,用于后期归档还原的验证。
create table backup_ago(a int);
insert into backup_ago values(1);
insert into backup_ago values(2);
insert into backup_ago values(3);
insert into backup_ago values(4);
commit;
SQL> backup database backupset '/data/dmbak/20221212';
检查生成的备份集,以及查看归档目录下归档日志的状态:
备份集生成后,在数据库中创建一张表并插入测试数据,提交数据后,手动切换logfile,目的是将联机日志文件中的数据进行归档。
--备份完成后再创建表,让其置入归档文件中
create table backup_after(a int);
insert into backup_after values(1);
insert into backup_after values(2);
insert into backup_after values(3);
insert into backup_after values(4);
commit;
-- 手动切换logfile,让redo日志归档
alter system switch logfile;
alter system switch logfile;
此时查看归档目录中的归档日志状态(在线日志的大小为256M*2):
创建的backup_after表及其数据的相关操作已归档在第一个归档日志中;
第一次执行switch logfile操作后,生成第二个归档日志文件;
第二次执行switch logfile操作后,生成第三个归档日志文件(即目前正在使用的归档文件)。
说明:输入步骤名称以后,选择步骤类型为“备份数据库”,输入要备份归档到哪个路径下,然后备份方式选择归档备份
具体DDL语句如下:
call SP_CREATE_JOB('bakarch',1,0,'',0,0,'',0,'bakarch');
call SP_JOB_CONFIG_START('bakarch');
call SP_ADD_JOB_STEP('bakarch', 'bakarch', 6, '30000000/dmbak/archbak/', 1, 1, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('bakarch', 'bakarch', 1, 1, 1, 0, 0, '15:05:28', NULL, '2022-12-12 15:00:28', NULL, '');
call SP_JOB_CONFIG_COMMIT('bakarch');
定时归档备份作业执行完毕后,检查对应目录下的归档备份:
此时,查看归档目录下的归档日志情况,根据归档日志情况发现,当定时执行一次归档备份后,就会创建新的归档日志用于记录联机日志。
-- 定时归档备份时间为15:05
create table arch_after(a int);
insert into arch_after values(1);
insert into arch_after values(2);
insert into arch_after values(3);
insert into arch_after values(4);
commit;
手动切换联机日志,并查看此时归档目录下归档情况
alter system switch logfile;
说明:红色部分为存有arch_after表及数据相关操作的归档日志。
1.模拟部分归档日志丢失
说明:将执行定时归档备份时间前的归档日志进行删除来模拟归档日志丢失。
2.模拟归档目录下的所有日志丢失
说明:如果在执行定时归档操作之后, 没有对新产生的归档日志进行备份或者对全库进行备份,那么后续还原恢复将会导致联机日志中未刷入本地归档的 REDO 日志丢失。
/opt/dmdbms/bin/DmServerDAMENG stop
RMAN> RESTORE ARCHIVE LOG FROM BACKUPSET '/dmbak/archbak/ARCH_LOG_DAMENG_2022_12_12_15_05_53' TO ARCHIVEDIR '/data/dmarch/' OVERWRITE 3;
OVERWRITE 参数为:1 表示认为归档文件完好,不再还原该归档文件,添加一条日志记录;2 表示存在同名归档立即报错返回,终止还原;3 表示强制删除归档,重新还原同名归档。
还原后,查看归档目录下归档日志情况(所有被删除的归档日志都已被还原):
使用 REPAIR 命令完成指定数据库的归档修复,归档修复会对目标库 dmarch.ini 中配置的所有本地归档日志目录执行修复。若目标库没有配置本地归档,则不执行修复。执行修复时,目标库一定不能处于运行状态。一般建议在数据库故障后,应立即执行归档修复,否则后续还原恢复将会导致联机日志中未刷入本地归档的 REDO 日志丢失,届时再利用本地归档恢复将无法恢复到故障前的最新状态.
RMAN>REPAIR ARCHIVELOG DATABASE '/data/DAMENG/dm.ini';
RMAN>RESTORE DATABASE '/data/DAMENG/dm.ini' FROM BACKUPSET '/data/dmbak/20221212';
RMAN>RECOVER DATABASE '/data/DAMENG/dm.ini' WITH ARCHIVEDIR '/data/dmarch/';
RMAN>RECOVER DATABASE '/data/DAMENG/dm.ini' update db_magic ;
文章
阅读量
获赞