概述:达梦的归档类型分为本地归档、实时归档、即时归档、异步归档、远程归档,当dmarch.ini中设置了归档空间上限时,数据库会自动删除归档,如果没有,归档满了系统会挂起,无法使用,需要人工介入。如果因为磁盘损坏导致归档日志写入失败时,系统会强制HALT。
强制HALT的解决方法:?
删除归档考虑:是不是有备库、是不是有dmhs,被删除的归档有没有同步过去,一定要确认好,否则会出大问题。
开启归档 在dm.ini中修改ARCH_INI = 1 0不启动,1启用
归档切换命令,任意一条sql都可以
alter database archivelog current;
alter system archive log current;
alter system switch logfile;
归档的配置文件路径:/dbdata/dmdata/DAMENG/dmarch.ini,也就是实例存在的路径
1.本地归档 local:在redo日志写入日志文件后,有由归档线程写入本地服务器中,最多配置8个本地归档
归档的参数 dmarch.ini的配置方法:
[dmdba@localhost DAMENG]$ more dmarch.ini
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #归档类型
ARCH_DEST = /dbarch/dmarch #归档路径
ARCH_FILE_SIZE = 2048 #单个归档文件大小
ARCH_SPACE_LIMIT = 102400 #归档空间限制 ,这里配置了空间限制,数据库会自动删除最早生成的归档,腾出空间。?什么时候会自动删除归档,是空间还剩多少还是什么
2.实时归档 Realtime:实施归档只有在数据模式为Primary主库才生效,是实现mpp和实时主备的基础,dm8支持实时归档的读写分离。
文件之前,通过mal系统发送redo日志导远程服务器,(看准了是redo日志写入联机日志文件之前,啥是联机日志,联机日志就是数据库正在使用的redo日志文 件,也叫重做日志文件)
第二步:1、成功:远程服务器在收到redo日志后,返回确认消息,主库在执行后续操作。
2、失败:发送redo失败,或者备库不是standby模式,则会将主库切换为suspend挂起 状态,阻塞所有redo日志的写入操作,最多能配置8个实时备库
归档的参数 dmarch.ini的配置方法:
[dmdba@localhost DAMENG]$ more dmarch.ini
ARCH_TYPE = #归档类型
ARCH_DEST = #目标库的实例名
实时主备和MPP主备环境下使用的是实时归档
3.即时归档 Timely:是在redo日志写入联机日志文件后,再通过mal系统将redo_buf发动到备库,及时归档是读写分离实现的基础,一个主库最多配8个即时备库。
[dmdba@localhost DAMENG]$ more dmarch.ini
ARCH_TYPE 归档类型
ARCH_DEST 归档目标实例名
4.异步归档 Async:在设定的时间点或者每隔设定时间,启动归档REDO日志发送。设置定时归档,必须确保至少有一个本地归档。
第一步:根据设定的时间,触发日志发送事件
第二步:通过mal系统获取远程的lsn,生成发送归档的任务,加入任务队列
第三部:归档任务线程,通过mal系统发送到远程服务器,最多可以设置8个异步归档。
[dmdba@localhost DAMENG]$ more dmarch.ini
ARCH_TYPE 归档类型
ARCH_DEST 归档目标实例名
ARCH_TIMER_NAME 定时器名称
5.远程归档:和本地归档差不多,只是远程归档写的联机日志时别人的,不是在本队服务器上
[dmdba@localhost DAMENG]$ more dmarch.ini
ARCH_TYPE 归档类型
ARCH_DEST 归档目标实例名
ARCH_FILE_SIZE 单个归档文件大小,单位MB,取值范围(64~2048),默认为1024MB,即1G
ARCH_SPACE_LIMIT 归档文件空间限制,单位MB,取值范围(1024~4294967294),0表示无空间限制
ARCH_INCOMING_PATH 对应远程归档存放在本节点的实际路径
总结:
先写入联机日志之后发送归档的:远程、异步
在写入联机日志之前发送redo_buf的:实时
在写入联机日志之后发送redo_buf的:即时
即时归档和实时归档都是发送日志文件到备库,区别是发送redo日志的时机不同,即时是写入联机日志文件之后,实时归档是写入联机日志文件之前。