文件监控(Inotify)¶
相关概念¶
inotify 是 Linux 内核 2.6.13 新增的一个子系统(API),它提供了一种监控文件系统事件的机制,可以监控文件系统的变化如文件的修改、删除等,并可以将相应的事件通知给应用程序。
神通数据库利用 Linux 内核的 inotify 机制实现自身的文件监控功能。
可监控的文件类型:控制文件、在线日志文件、归档日志文件、数据文件、double_write文件。
监控事件¶
神通数据库实现以下类型的监控事件
| 事件类型 | 描述 |
|---|---|
| IN_DELETE | 在受控目录内删除了文件或者目录 |
| IN_MOVED_TO | 文件移入受控目录 |
| IN_MOVED_SELF | 监控的文件或目录自身被移动 |
| IN_UNMOUNT | 卸载文件系统 |
若被监控的数据文件、控制文件、doublewrite文件被删除或移动,会在执行与该文件相关的DML、DDL语句时,会通过报错来及时抛出文件丢失的信息。
例如,ts1 表空间的 ts1.dbf 文件丢失后,指定向 ts1 中建表
create table t1(a int) tablespace ts1;
ERROR, 建立物理表失败, 数据文件丢失,文件 /home/oscar/STDB/odbs/OSRDB/ts1.dbf 被删除或移动,fileid: 5,不能简单地将原始文件复制回原位置,在修改数据库配置参数 ENABLE_FILE_INOTIFY 为 false 后,数据库仍可以继续使用,请修改参数后尽快进行逻辑备份,以防数据丢失!
注解
若出现上述报错信息,请不要立刻停库,应立即对数据库进行逻辑备份以免数据丢失。
若被监控的日志文件被删除或移动,会在执行DML、DDL语句时立即停库,确保事务的持久性。
例如,redo 文件丢失后,创建 test 表
create table test(a int);
-- 停库,查看mlog文件
2024-05-27 11:17:08, /*log_flush*/ LOG, 日志文件丢失导致数据库无法运行,请联系技术人员以获取进一步的支持和解决方案。
注解
若出现上述报错信息,请联系技术人员以获取进一步的支持和解决方案。
相关配置参数¶
ENABLE_FILE_INOTIFY:是否启用Linux平台上的文件监控功能,默认值为true。该功能可以自动监控数据库的关键文件,包括控制文件、数据文件、日志文件、doublewrite文件。当控制文件、数据文件、doublewrite文件被删除、重命名或覆盖时,数据库在执行DML、DDL语句时会报错,提示管理员在临时关闭当前参数的情况下进行逻辑备份或迁移,以防止数据丢失。当日志文件被删除、重命名或覆盖时,数据库在执行DML、DDL语句时立即停库,应联系技术人员以获取进一步的支持和解决方案。
FILE_INOTIFY_WATCHES_AUTO_EXTNED_TIMES:用户可扩增文件监控系统值的次数,取值范围[0,10],默认值为 2。 在 linux 系统中,文件监控参数 max_user_watches 系统默认值为8192,表示系统中某个用户可以设置的最大文件监控数量,不是以进程为单位的。 若数据库运行过程中打开的文件监控数量超过了系统值,在 FILE_INOTIFY_WATCHES_AUTO_EXTNED_TIMES 参数不为 0 的情况下,会扩增文件监控系统值,每次扩增会将 max_user_watches 值增加 60000。 若用户不希望文件监控的系统值被修改,可将 FILE_INOTIFY_WATCHES_AUTO_EXTNED_TIMES 参数值修改为 0,但这样会导致数据库无法及时发现文件的异常变动,请谨慎操作。