前言 众所周知,Oracle 数据库要使用实时热备份功能必须要开启归档模式,达梦数据库也是如此,必须要配置本地归档,才可以使用实时备份功能。
那么达梦数据库的归档模式是如何管理的?
介绍 达梦数据库既可以运行在归档模式下也可以运行在非归档模式下:
归档模式:联机日志文件中的内容将被保存至硬盘,形成归档日志文件;
非归档模式:则不会形成归档日志。
采用归档模式对系统的性能会产生一定影响,但对系统的安全性有更大的积极意义,当出现故障时其丢失数据的可能性更小。这是因为一旦出现介质故障,如磁盘损坏时,利用归档日志,系统可被恢复至故障发生的前一刻,也可以还原到指定的时间点,而如果没有归档日志文件,则只能利用备份进行恢复到备份那一刻。
达梦数据库的归档模式可以分为 6 类:
本地归档 :在 REDO 日志写入联机日志文件后触发,将 REDO 日志写入到本地归档文件。由归档线程完成本地归档动作,最多可以设置 8 个本地归档。
远程归档 :远程归档专门用于 DMDSC 环境中。将写入本地归档的 REDO 日志信息,发送到远程节点,并写入远程节点的指定归档目录(共享存储)中。最多可以配置8个远程归档。
实时归档 :在写入 REDO 日志到联机日志文件之前,通过 MAL 系统发送 REDO 日志到远程服务器,远程服务器接收到 REDO 日志后,返回确认消息后,执行后续操作。发送 REDO 日志失败,或从备库返回的数据库模式不是 STANDBY,将数据库切换为 SUSPEND,阻塞所有 REDO 日志的写入操作。只能配置 1 个实时归档。这种归档类型只能用在主从备份集群中。
即时归档 :即时归档在主库将 REDO 日志写入联机日志文件后,再通过 MAL 系统将 REDO 日志发送到备库。即时归档是读写分离集群的实现基础,与实时归档的主要区别是发送 REDO 日志的时间不同。一个主库可以配置 1-8 个即时备库。
异步归档 :在设定的时间点或者每隔设定时间,启动归档 REDO 日志发送。设置定时归档,必须确保至少有一个本地归档。最多可以设置 8 个异步归档。
同步归档 :同步归档的执行流程是,主库在归档日志刷盘后,将 REDO 日志发送到备库,备库收到 REDO 日志(RLOG_PKG)后将其加入日志重演任务系统,并马上响应主库,不需要等待 REDO 日志重演结束后再响应主库。
根据功能与实现方式的不同,用户可以自行选择使用哪一种归档方式,本文主要讲解本地归档的管理方式。
开启本地归档 达梦数据库开启数据库本地归档通常可以通过以下两种方式实现:
方式一:通过 SQL 命令方式开启归档(数据库实例启动)
方式二:通过修改数据库配置文件方式开启归档(数据库实例未启动)
达梦数据库建议使用本地归档目录位置:/dmarch:
1 2 3 mkdir /dmarchchown dmdba:dinstall /dmarchchmod -R 755 /dmarch
创建好本地归档目录之后就可以开始配置数据库。
SQL 命令方式 使用 SQL 语句配置数据库归档,语法如下:
1 2 3 4 5 6 7 ALTER DATABASE < 修改数据库子句> ; < 修改数据库子句> ::= < 数据库状态> | < ADD | MODIFY | DELETE > ARCHIVELOG < 归档配置语句> | ARCHIVELOG CURRENT < 数据库状态> ::= MOUNT | SUSPEND | OPEN [FORCE] | NORMAL | PRIMARY | STANDBY | ARCHIVELOG | NOARCHIVELOG < 归档配置语句> ::= 'DEST = <归档目标>, TYPE = <归档类型>' < 归档类型> ::= LOCAL [< 文件和空间限制设置> ][,ARCH_FLUSH_BUF_SIZE = < 归档合并刷盘缓存大小> ][, HANG_FLAG= < 0 | 1 > ] | REMOTE ,INCOMING_PATH = < 远程归档路径> | < 文件和空间限制设置> ::= [,FILE_SIZE = < 文件大小> ][,SPACE_LIMIT = < 空间大小限制> ]
查看是否开启归档模式:
1 2 3 4 5 6 SQL > select arch_mode from v$database;行号 ARCH_MODE 1 N
登录数据库执行如下 SQL 语句:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 SQL > ALTER DATABASE MOUNT;操作已执行 已用时间: 2.143 (毫秒). 执行号:0. SQL > ALTER DATABASE ARCHIVELOG;操作已执行 已用时间: 48.305 (毫秒). 执行号:0. SQL > ALTER DATABASE ADD ARCHIVELOG 'DEST=/dmarch, TYPE=LOCAL, FILE_SIZE=2048, SPACE_LIMIT=102400' ;操作已执行 已用时间: 16.683 (毫秒). 执行号:0. SQL > ALTER DATABASE OPEN ;操作已执行 已用时间: 31.888 (毫秒). 执行号:0. SQL > select arch_mode from v$database;行号 ARCH_MODE 1 YSQL > select arch_name,arch_type,arch_dest,arch_file_size,arch_space_limit from v$dm_arch_ini;行号 ARCH_NAME ARCH_TYPE ARCH_DEST ARCH_FILE_SIZE ARCH_SPACE_LIMIT 1 ARCHIVE_LOCAL1 LOCAL / dmarch 2048 102400
使用命令行开启归档后,在 /dmdata/DAMENG/ 目录下会生成一个归档参数配置文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 [dmdba@dm8:/dmdata/DAMENG]$ cat dmarch.ini ARCH_WAIT_APPLY = 0 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /dmarch ARCH_FILE_SIZE = 2048 ARCH_SPACE_LIMIT = 102400 ARCH_FLUSH_BUF_SIZE = 2 ARCH_HANG_FLAG = 1
切换归档,三条语句都可以执行切换:
1 2 3 4 5 6 7 8 9 SQL > alter database archivelog current ;操作已执行 已用时间: 1.009 (毫秒). 执行号:0. SQL > alter system archive log current ;操作已执行 已用时间: 0.722 (毫秒). 执行号:0. SQL > alter system switch logfile;操作已执行 已用时间: 0.932 (毫秒). 执行号:0.
关闭归档模式:
1 2 3 4 5 6 7 8 9 SQL > ALTER DATABASE MOUNT;操作已执行 已用时间: 7.742 (毫秒). 执行号:0. SQL > ALTER DATABASE NOARCHIVELOG;操作已执行 已用时间: 11.444 (毫秒). 执行号:0. SQL > ALTER DATABASE OPEN ;操作已执行 已用时间: 10.938 (毫秒). 执行号:0.
删除归档路径配置(目前达梦不允许删除本地归档配置,建议关闭归档之后,保留归档配置即可):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 SQL > ALTER DATABASE DELETE ARCHIVELOG 'DEST=/dmarch, TYPE=LOCAL, FILE_SIZE=2048, SPACE_LIMIT=102400' ;ALTER DATABASE DELETE ARCHIVELOG 'DEST=/dmarch, TYPE=LOCAL, FILE_SIZE=2048, SPACE_LIMIT=102400' ;第1 行附近出现错误[-981 ]:OPEN 状态下仅允许删除REALTIME、TIMELY或ASYNC归档. SQL > alter database mount;操作已执行 SQL > ALTER DATABASE DELETE ARCHIVELOG 'DEST=/dmarch, TYPE=LOCAL, FILE_SIZE=2048, SPACE_LIMIT=102400' ;ALTER DATABASE DELETE ARCHIVELOG 'DEST=/dmarch, TYPE=LOCAL, FILE_SIZE=2048, SPACE_LIMIT=102400' ;第1 行附近出现错误[-2004 ]:不支持的语句类型. SQL > alter database noarchivelog;操作已执行 SQL > ALTER DATABASE DELETE ARCHIVELOG 'DEST=/dmarch, TYPE=LOCAL, FILE_SIZE=2048, SPACE_LIMIT=102400' ;ALTER DATABASE DELETE ARCHIVELOG 'DEST=/dmarch, TYPE=LOCAL, FILE_SIZE=2048, SPACE_LIMIT=102400' ;第1 行附近出现错误[-810 ]:系统未配置归档.
配置参数文件方式 修改数据库实例的 /dmdata/DAMEGN/dm.ini 文件中 ARCH_INI 参数值:
1 2 3 4 5 6 7 8 [dmdba@dm8:~]$ cat /dmdata/DAMENG/dm.ini | grep -i arch_ini ARCH_INI = 0 [dmdba@dm8:~]$ sed -i s/'ARCH_INI = 0' /'ARCH_INI = 1' /g /dmdata/DAMENG/dm.ini [dmdba@dm8:~]$ cat /dmdata/DAMENG/dm.ini | grep -i arch_ini ARCH_INI = 1
新增文件 dmarch.ini 文件(如果使用命令行开启过则会自动生成一个文件,修改对应配置参数即可):
1 2 3 4 5 6 7 8 ## 这里模拟没有这个文件,所以我们新建一个 [dmdba@dm8:~]$ cat<<-\EOF>/dmdata/DAMENG/dmarch.ini [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /dmarch ARCH_FILE_SIZE = 2048 ARCH_SPACE_LIMIT = 102400 EOF
重启数据库完成归档配置:
1 2 3 [dmdba@dm8:~]$ DmServiceDMSERVER restart Stopping DmServiceDMSERVER: [ OK ] Starting DmServiceDMSERVER: [ OK ]
查看归档是否开启:
1 2 3 4 5 SQL > select arch_mode from v$database;行号 ARCH_MODE 1 Y
归档日志清理 归档手动删除:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 SQL > select name from d t where name like 'SF_ARCHIVELOG_%' ;行号 NAME 1 SF_ARCHIVELOG_DELETE_BEFORE_LSN2 SF_ARCHIVELOG_DELETE_BEFORE_LSN3 SF_ARCHIVELOG_DELETE_BEFORE_TIME4 SF_ARCHIVELOG_DELETE_BEFORE_TIME已用时间: 7.327 (毫秒). 执行号:603. SQL > select SF_ARCHIVELOG_DELETE_BEFORE_TIME(sysdate-7 );SQL > select SF_ARCHIVELOG_DELETE_BEFORE_LSN(43502 );
归档自动删除:
归档日志检测 达梦数据库提供了归档校验工具 dmrachk,它可以查看归档日志的状态信息,以及校验归档日志是否连续或者存在不足的情况。
查看 dmrachk 帮助提示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 [dmdba@dm8:~]$ dmrachk help rachk V8 version: 03134284194-20240703-234060-20108 Pack1 格式: dmrachk keyword=value 例程: dmrachk F_TYPE=2 F_PATH=/opt/a.log OP_TYPE=2 关键字 说明(默认值) -------------------------------------------------------------------------------- F_TYPE 必选,表示读入的日志文件类型,与F_PATH配合使用 1 F_PATH必须指向归档目录 2 F_PATH必须指向某个归档文件 F_PATH 必选,对应F_TYPE的路径 OP_TYPE 可选,操作类型,对应不同的F_TYPE,默认为2 当F_TYPE = 1: 1 归档比较,比较两个目录的LSN和PTX差异 2 归档校验,检查归档文件有效性 3 归档抽取,指定新的文件,用于存储从指定seq 范围的归档中抽取的数据 4 去重修复,去除归档目录下存在重复的归档日志,将存在重复的归档拷贝到备份文件路径下 5 缺失修复,使用F_PATH目录中的归档文件来修复RECV_PATH目录中的归档文件 6 密钥更新,更新归档文件加密密钥 当F_TYPE = 2: 1 归档比较,比较两个归档文件的LSN和PTX差异 2 归档校验,检查归档文件有效性 3 归档截取,不论归档是否有效,截取到最后一条有效lsn写入截取文件 CMP_FIL 归档比较必选,指定一个用于比较的归档文件 CMP_PATH 归档比较必选,指定一个用于比较的归档目录 BEGIN_LSN 归档比较和校验可选,指定归档目录时,指定排除小于该LSN的文件,默认为0表示不启用 END_LSN 归档比较和校验可选,指定归档目录时,指定排除大于该LSN的文件,默认为0表示不启用 CHECK 归档校验可选,校验级别(0, 1, 2, 3, 4, 5, 6) 0: 文件校验,1: 包校验(seq & magic),2:ptx 校验,3:rrec校验,4:清理无效的归档文件, 5:各节点日志包依赖关系检查,6:修复归档文件到free之后的最后一个有效日志包。默认0,CHECK=4,CHECK=5只在F_TYPE=1时有效 BEFORE_LSN CHECK=4可选,指定归档目录,删除该LSN之前的文件。默认为0,所有LSN范围内日志均删除 BEFORE_SEQ CHECK=4可选,指定归档目录,删除该SEQ之前的文件。默认为0,所有SEQ范围内日志均删除 BEFORE_TIME CHECK=4可选,指定归档目录,删除该时间点之前的文件。默认删除所有时间点的归档 EXCLUDE_DB_MAGIC CHECK=4可选,指定归档目录,删除指定的DB_MAGIC之外的文件 ARCH_PATH_INI CHECK=5可选,指定dsc节点的归档存放路径配置文件 TRUNC_FIL 归档截取必选,指定新的文件,用于存储从归档中抽取的数据 AFTER_FREE 归档截取可选,是否校验并截取FREE之后的内容。0 不截取;1 截取。默认0 TRUNC_CHECK 归档截取可选,是否校验归档文件。0 不校验;1 校验。默认0 ARCH_BAK_PATH 去重修复必选,指定备份文件路径,用于存储归档修复过程中的重复文件 RECV_PATH 缺失修复必选,指定一个待修复的归档目录 EXTRACT_FIL 归档抽取必选,指定新的文件,用于存储从指定的seq 范围的归档文件中抽取的数据 BEGIN_SEQ 归档抽取必选,指定归档目录时,抽取大于该SEQ的文件 END_SEQ 归档抽取必选,指定归档目录时,抽取小于该SEQ的文件 CYT_UPDATED_PATH 密钥更新可选,归档密钥更新目标文件所在目录。未指定时,直接在原文件上更新;若指定,则更新到新的路径,原文件保持不变 OUTPUT_FIL 可选,LOG可以指定输出到文件 DCR_INI 可选,指定dmdcr.ini路径,用于当前归档文件或者目录在ASM文件系统的情况,若不指定,则不访问ASM。默认不指定 DM_INI 可选,指定dm.ini的路径,用于获取日志加密信息 HELP 显示帮助信息
dmrachk 指定归档目录检测归档日志:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 [dmdba@dm8:~]$ dmrachk F_TYPE=1 F_PATH=/dmarch rachk V8 the database pmnt_magic: 1418059711 the database db_magic: 1447746390 /*******************************************************************/ 归档文件/dmarch/ARCHIVE_LOCAL1_0x564ADB56_EP0_2024-09-18_20-43-01.log 明细. version : 0x7007 status : INACTIVE enc_flag : FALSE n_rpkgs : 4 pmnt_magic : 1418059711 db_magic : 1447746390 src_db_magic : 1447746390 arch_lsn : 43502 arch_seq : 3217 clsn : 43544 next_seq : 3220 g_next_seq : 3220 file len : 36864 file free : 36864 dsc seqno : 0 dsc node : 1 create time : 2024-09-18 20:43:01.555674 time_zone:+08:00 close time : 2024-09-18 20:44:00.794390 time_zone:+08:00 llog first time : 1900-01-01 00:00:00.000000 time_zone:+08:00 llog last time : 1900-01-01 00:00:00.000000 time_zone:+08:00 /*******************************************************************/ /*******************************************************************/ 归档文件/dmarch/ARCHIVE_LOCAL1_0x564ADB56_EP0_2024-09-18_21-19-01.log 明细. version : 0x7007 status : INACTIVE enc_flag : FALSE n_rpkgs : 5 pmnt_magic : 1418059711 db_magic : 1447746390 src_db_magic : 1447746390 arch_lsn : 43665 arch_seq : 3229 clsn : 43742 next_seq : 3233 g_next_seq : 3233 file len : 49152 file free : 49152 dsc seqno : 0 dsc node : 1 create time : 2024-09-18 21:19:01.783604 time_zone:+08:00 close time : 2024-09-18 21:23:59.589803 time_zone:+08:00 llog first time : 1900-01-01 00:00:00.000000 time_zone:+08:00 llog last time : 1900-01-01 00:00:00.000000 time_zone:+08:00 /*******************************************************************/ /*******************************************************************/ 归档文件/dmarch/ARCHIVE_LOCAL1_0x564ADB56_EP0_2024-09-18_21-41-33.log 明细. version : 0x7007 status : ACTIVE enc_flag : FALSE n_rpkgs : 6 pmnt_magic : 1418059711 db_magic : 1447746390 src_db_magic : 1447746390 arch_lsn : 43890 arch_seq : 3241 clsn : 43965 next_seq : 3246 g_next_seq : 3246 file len : 2147483648 file free : 45056 dsc seqno : 0 dsc node : 1 create time : 2024-09-18 21:41:33.701013 time_zone:+08:00 close time : 2024-09-18 21:41:33.701013 time_zone:+08:00 llog first time : 1900-01-01 00:00:00.000000 time_zone:+08:00 llog last time : 1900-01-01 00:00:00.000000 time_zone:+08:00 /*******************************************************************/ 概要(节点[0]): 总计: 3 个文件 正确: 3 个文件 错误: 0 个文件 重复: 0 个文件 F_PATH的归档文件链表是不连续的。 breakpoint 0: the left file /dmarch/ARCHIVE_LOCAL1_0x564ADB56_EP0_2024-09-18_20-43-01.log , clsn: 43544, next_seq: 3220 the right file /dmarch/ARCHIVE_LOCAL1_0x564ADB56_EP0_2024-09-18_21-19-01.log , arch_lsn: 43665, arch_seq: 3229 breakpoint 1: the left file /dmarch/ARCHIVE_LOCAL1_0x564ADB56_EP0_2024-09-18_21-19-01.log , clsn: 43742, next_seq: 3233 the right file /dmarch/ARCHIVE_LOCAL1_0x564ADB56_EP0_2024-09-18_21-41-33.log , arch_lsn: 43890, arch_seq: 3241 the rachk tool running cost 1.143 ms, code:0
相关数据字典 最后再介绍一下归档相关的数据字典视图:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 V$ARCHIVED_LOG V$DM_ARCH_INI V$ARCH_FILE V$ARCH_QUEUE V$ARCH_SEND_INFO V$ARCH_STATUS V$BACKUPSET_ARCH V$BACKUPSET_SEARCH_DIRS
今天主要学习了达梦数据库的本地归档管理方式以及一些归档管理的知识,如有错误或者不足,欢迎补充。