#运行日志管理

运行日志通过日志级别控制记录开关和记录策略,级别为OFF时不记录运行日志。

# 设置日志文件保留个数

通过设置RUN_LOG_FILE_COUNT参数修改运行日志的保留个数,当达到该参数设置的值(默认10)时,系统会自动删除时间靠前的日志。

日志文件保留个数修改指令:

ALTER SYSTEM SET RUN_LOG_FILE_COUNT=<保留个数> SCOPE=SPFILE;

该参数需重启数据库才能生效。

可进入日志文件存放位置观察文件的保留数量:

$ ls -l $YASDB_HOME/log/run

# 设置日志文件最大大小

通过设置RUN_LOG_FILE_SIZE参数修改运行日志的最大大小,当达到该参数设置的值(默认20M)时,该日志文件会自动归档。

日志文件最大大小修改指令:

ALTER SYSTEM SET RUN_LOG_FILE_SIZE=<日志文件大小> SCOPE=SPFILE;

该参数需重启数据库才能生效。

# 设置运行日志的存放路径

通过设置RUN_LOG_FILE_PATH参数修改运行日志的存放路径。

运行日志的存放路径修改指令:

ALTER SYSTEM SET RUN_LOG_FILE_PATH='<path>' SCOPE=SPFILE;

该参数需重启数据库才能生效。

Warn

为运行日志设置的新路径必须已存在且对其拥有写权限,否则数据库将启动失败。

# 运行日志级别管理

运行日志级别的排序为:

ERROR < WARN < INFO < DEBUG < TRACE < ALL

从左到右,日志等级依次增高,高日志级别包含低日志级别。

查看当前日志级别的指令如下:

show parameter RUN_LOG_LEVEL;

# ERROR级别

数据库产生了可处理的关键错误时,将输出ERROR日志。这些错误一般无法返回给客户端,例如后台线程的产生的错误。

将日志级别设置为ERROR的指令如下:

ALTER SYSTEM SET RUN_LOG_LEVEL=ERROR;

当YashanDB丢失表空间数据文件时,run.log打印情况如下:(本文以单机部署为例,具体日志以实际为准)

2022-06-17 19:20:56.981 20098 [ERROR] [MONITOR]
/data/yashan/yasdb_data/db-1-1/dbfiles/temp metadata changed, for example, permissions, timestamps, extended attributes, 
and user/group ID, etc
2022-06-17 19:21:55.839 20308 [ERROR][errno=00313]: open file /data/yashan/yasdb_data/db-1-1/dbfiles/temp failed, errno 2, 
error message "No such file or directory"

# INFO级别

YashanDB默认使用的日志级别为INFO。

INFO级别记录数据库正常运行中发生的关键事件,主要包括:

  • 数据库状态变更:例如启动、关闭、升主降备。

  • 数据库关键资源的变更:例如表空间、用户增加删除等。

  • 数据库资源变更:例如线程的启动和停止等。

  • 数据库关键活动:例如重启恢复、残留事务等。

  • 数据库参数变化:修改系统配置。

将日志级别设置为INFO的指令如下:

ALTER SYSTEM SET RUN_LOG_LEVEL=INFO;

示例

//数据库启动时,run.log打印情况如下:
2022-06-17 19:29:18.341 21320 [INFO] [DB] start database
2022-06-17 19:29:18.570 21320 [INFO] [DB] database mount
2022-06-17 19:29:18.570 21331 [INFO] [MONITOR] patrol process start
2022-06-17 19:29:18.599 21320 [INFO] [RCY] replay start, rcy begin point asn 1, block id 4650, lfn 1290. rcy least lfn 1289. 
flush point asn 1, block id 4650, lfn 1290. scn 317965525569531904
2022-06-17 19:29:18.602 21320 [INFO] [RCY] stop to replay, point 0-1-4650-1290
2022-06-17 19:29:18.603 21320 [INFO] [RCY] replay end, rcy replay point asn 1, block id 4650, lfn 1290. current scn 317965525569531904
2022-06-17 19:29:18.603 21320 [INFO] [RCY] flush point 0-1-4650-1290, receive point 0-1-4650-1290
2022-06-17 19:29:18.700 21320 [INFO] [DB] database open
2022-06-17 19:29:18.701 21320 [INFO] [DATABASE] database start up,phase 2
2022-06-17 19:29:18.702 21338 [INFO] [MMS PRELOAD] start to preload memory mapped tablespaces
2022-06-17 19:29:18.702 21342 [INFO] pre-process TABXFMR$ successful
2022-06-17 19:29:18.704 21338 [INFO] [MMS PRELOAD] end to preload memory mapped tablespaces

//数据库关闭时,run.log打印情况如下:
2022-06-17 19:28:45.612 20747 [INFO] [DATABASE] shutdown database,mode: 2
2022-06-17 19:28:47.043 20747 [INFO] [HA] stop redo sender
2022-06-17 19:28:47.043 20747 [INFO] [HA] stop redo receiver
2022-06-17 19:28:47.088 20763 [INFO] [MONITOR] patrol process exited

# DEBUG级别

DEBUG级别用于打印追溯问题时可能用到的关键信息。

将日志级别设置为DEBUG的指令如下:

ALTER SYSTEM SET RUN_LOG_LEVEL=DEBUG;

示例

//当YashanDB执行shutdown abort强制关闭数据库时,run.log打印如下:
2022-06-17 19:33:58.961 21916 [DEBUG][errno=02094]: current session has been killed or canceled
2022-06-17 19:33:58.961 21916 [DEBUG][errno=02094]: promise catch unhandled error: current session has been killed or canceled
2022-06-17 19:34:15.683 21984 [DEBUG][yasdb][col_executor::executor]remove temp dir/data/yashan/yasdb_data/tmp

//当数据文件的物理文件重命名后,启动数据库,run.log打印如下:
2022-06-17 20:26:13.475 28790 [DEBUG][MMON][col_executor::executor]Local execute, end local resource
2022-06-17 20:26:13.475 28790 [DEBUG][MMON][col_executor::executor]Local execute, end column query context
2022-06-17 20:26:13.475 28790 [DEBUG][MMON][col_executor::executor]Local execute, prepare column query context
2022-06-17 20:26:13.475 28790 [DEBUG][MMON][anchor::plsql::statement]Statement is cloned, check it is safe
2022-06-17 20:26:13.475 28790 [DEBUG][MMON][anchor::plsql::statement]Statement is cloned, check it is safe
2022-06-17 20:26:13.475 28790 [DEBUG][MMON][anchor::plsql::statement]Statement is cloned, check it is safe
2022-06-17 20:26:13.475 28790 [DEBUG][MMON][col_executor::executor]Local execute, end local resource
2022-06-17 20:26:13.475 28790 [DEBUG][MMON][col_executor::executor]Local execute, end column query context

# ALL级别

ALL级别记录所有日志信息,是最高级别的日志级别模式。

将日志级别设置为ALL的指令如下:

ALTER SYSTEM SET RUN_LOG_LEVEL=ALL;