注册
【与达梦同行】定时作业归档备份及归档还原实战
技术分享/ 文章详情 /

【与达梦同行】定时作业归档备份及归档还原实战

xx5421 2022/12/12 3521 25 1

摘要:本文将介绍创建定时归档备份作业,以及模拟归档日志丢失后,利用备份和归档备份对数据库进行还原。

前言

​ 备份与恢复过程都依赖归档日志,归档日志是保证数据一致性和完整性的重要保障。配有归档日志的数据库系统在出现故障时丢失数据的可能性更小,这是因为一旦出现介质故障如磁盘损坏时,利用归档日志,系统可被恢复至故障发生的前一刻,也可以还原到指定的时间点

​ 数据恢复时应用的 REDO 日志,既可以是那些在备份过程中产生的、包含在备份集中的REDO 日志,也可以是备份数据库本地归档日志文件。在本地归档日志完整的情况下,数据还原结束后,可以利用本地归档日志和联机日志实现数据库的完全恢复,因此备份归档日志显得尤为重要。

​ 本文将介绍如何创建归档备份的定时作业,利用归档备份进行还原以及观察在执行备份前后、手动执行联机日志切换操作后、执行归档备份前后,归档目录下归档日志的产生情况。

一、创建归档备份定时作业

0.归档备份的前提

  • 归档文件的 db_magic、permanent_magic 值和库的 db_magic、permanent_magic 值必须一样;
  • 服务器必须配置归档;
  • 归档日志必须连续,如果出现不连续的情况,前面的连续部分会忽略,仅备份最新的连续部分。如果未收集到指定范围内的归档,联机备份时显示“操作已执行”但实际并未备份,日志中记录相关警告信息;脱机备份时则直接报错。联机备份的时候经常会切换归档文件,最后一个归档总是空的,所以最后一个归档不会被备份。

1.配置归档

​ 数据库可以在联机状态或脱机状态下进行归档配置,本文中是在脱机状态下,手动配置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)启动数据库实例,数据库已运行于归档模式。

2.备份前创建测试数据

备份前,在数据库中创建表并插入测试数据,用于后期归档还原的验证。

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;

3.对数据库进行联机备份

SQL> backup database backupset '/data/dmbak/20221212';

检查生成的备份集,以及查看归档目录下归档日志的状态:

2.png

4.备份后创建测试数据

备份集生成后,在数据库中创建一张表并插入测试数据,提交数据后,手动切换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;

3.png

-- 手动切换logfile,让redo日志归档
alter system switch logfile;
alter system switch logfile;

此时查看归档目录中的归档日志状态(在线日志的大小为256M*2):

4.png

创建的backup_after表及其数据的相关操作已归档在第一个归档日志中;

第一次执行switch logfile操作后,生成第二个归档日志文件;

第二次执行switch logfile操作后,生成第三个归档日志文件(即目前正在使用的归档文件)。

5.设置归档备份定时作业(图形化)

5.1 创建作业,输入作业名和作业描述

5.png

5.2 新建作业步骤

6.png

说明:输入步骤名称以后,选择步骤类型为“备份数据库”,输入要备份归档到哪个路径下,然后备份方式选择归档备份

5.3 新建作业调度:设置调度作业的时间

7.png

5.4 可以通过DDL选选项,查看相应操作的DDL

8.png

具体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');

5.5 定时归档备份作业执行完毕后,查看归档日志情况

定时归档备份作业执行完毕后,检查对应目录下的归档备份:

10.png

此时,查看归档目录下的归档日志情况,根据归档日志情况发现,当定时执行一次归档备份后,就会创建新的归档日志用于记录联机日志。

11.png

6.产生归档备份集后,创建测试数据

-- 定时归档备份时间为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;

12.png

手动切换联机日志,并查看此时归档目录下归档情况

alter system switch logfile;

13.png

说明:红色部分为存有arch_after表及数据相关操作的归档日志。

二、模拟归档日志丢失/故障

1.模拟部分归档日志丢失

说明:将执行定时归档备份时间前的归档日志进行删除来模拟归档日志丢失。

14.png

2.模拟归档目录下的所有日志丢失

说明:如果在执行定时归档操作之后, 没有对新产生的归档日志进行备份或者对全库进行备份,那么后续还原恢复将会导致联机日志中未刷入本地归档的 REDO 日志丢失。

15.png

三、利用备份和归档日志备份对数据库进行还原

1.停止数据库

/opt/dmdbms/bin/DmServerDAMENG stop

2.RMAN还原归档

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 表示强制删除归档,重新还原同名归档。
16.png

还原后,查看归档目录下归档日志情况(所有被删除的归档日志都已被还原):

17.png

3.执行归档修复

​ 使用 REPAIR 命令完成指定数据库的归档修复,归档修复会对目标库 dmarch.ini 中配置的所有本地归档日志目录执行修复。若目标库没有配置本地归档,则不执行修复。执行修复时,目标库一定不能处于运行状态。一般建议在数据库故障后,应立即执行归档修复,否则后续还原恢复将会导致联机日志中未刷入本地归档的 REDO 日志丢失,届时再利用本地归档恢复将无法恢复到故障前的最新状态.

RMAN>REPAIR ARCHIVELOG DATABASE '/data/DAMENG/dm.ini';

4.RMAN还原数据库

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 ;

5.启动数据库

6.查看数据库中的数据

18.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服