当前位置: 首页 > news >正文

达梦数据库开启 DML DDL行为日志(UPDATE/INSERT/DELETE等)实战指南

在数据库运维过程中,审计 DML(数据操纵语言,包括 UPDATE/INSERT/DELETE)操作是保障数据安全、追溯数据变更的核心需求。本文基于达梦数据库(DM8)环境,详细讲解如何配置 SQL 行为日志,精准捕获 UPDATE、INSERT、DELETE 等关键操作,同时规避日志冗余、权限异常等常见问题。

一、核心需求与环境说明

1. 需求目标

  • 精准记录数据库中 UPDATE、INSERT、DELETE 等 DML 操作,包含执行用户、IP、耗时、影响行数等关键信息;
  • 过滤无意义的 SELECT 查询、SET SCHEMA 等冗余语句;
  • 合理管理日志文件大小、数量,避免磁盘空间溢出。

2. 环境信息

  • 数据库版本:达梦 DM8
  • 操作系统:Linux(CentOS/RedHat)
  • 运行用户:dmdba(达梦默认运维用户)
  • 日志存储路径:/home/dmdba/data/logs

二、配置前的核心概念梳理

达梦 SQL 日志通过sqllog.ini配置文件管控,核心参数说明如下:
 
表格
 
参数名作用关键取值
SVR_LOG SQL 日志总开关(数据库级参数) 0 = 关闭,1 = 开启(使用 sqllog.ini 配置)
SQL_TRACE_MASK 日志记录的 SQL 类型掩码

3=DDL、9=DML(UPDATE/INSERT/DELETE)、1 = 错误 SQL

指定一条SQL日志中应包含的内容。指定方式为ITEMS=位号:位号:位号……。

例如:ITEMS=3:5:7。表示应包含第3、第5、第7 位代表的内容。

0 表示记录所有的列(等同于同时设置1~12)

1 TIME 执行的时间

2 SEQNO 服务器的站点号

3 SESS 操作的SESS地址

4 USER 执行的用户

5 TRXID 事务ID

6 STMT 语句地址

7 APPNAME 客户端工具

8 IP 客户端IP

9 STMT_TYPE 语句类型。分别为
[ORA]表示原始语句(服务器从客户端收到的未加分析的语句) 、
[DDL]表示DDL 语句、
[INS]表示INSERT语句、
[DML]表示DML语句、
[CAL]表示CALL语句、
[UPD] 表示UPDATE语句、
[DEL] 表示DELETE 语句、
[SEL]表示SELECT语句、
[LGN]表示登录登出语句

10 INFO 记录内容,记录当前执行的SQL语句

11 RESULT 运行结果,包括运行用时、影响行数和EXEC_ID(可能没有)

12 THRD 线程地址

SWITCH_MODE 日志文件切换模式 2 = 按文件大小切换(1 = 按时间,3 = 按大小 + 时间)
SWITCH_LIMIT 单日志文件大小上限(SWITCH_MODE=2 时生效) 单位为 MB,示例配置 256 表示单文件最大 256MB
MIN_EXEC_TIME 最小执行时间过滤 0 = 记录所有 SQL,>0 则只记录耗时≥该值(毫秒)的 SQL
ASYNC_FLUSH 日志刷盘模式 1 = 异步刷盘(性能优先),0 = 同步刷盘(数据安全优先)
 

三、分步配置 DML 行为日志

步骤 1:检查并创建日志存储目录

日志目录的权限是日志写入的基础,需确保 dmdba 用户拥有读写权限:
# 1. 检查目录是否存在
ls -ld /home/dmdba/data/logs# 2. 不存在则创建目录
mkdir -p /home/dmdba/data/logs# 3. 修改目录归属(dmdba为达梦运行用户,组需匹配实际环境)
chown -R dmdba:root /home/dmdba/data/logs# 4. 设置权限(755确保dmdba可读写,其他用户可读)
chmod 755 /home/dmdba/data/logs

步骤 2:配置 sqllog.ini 文件

 
达梦默认sqllog.ini位于数据库实例目录(如 / DAMENG),修改配置如下(核心聚焦 DML 记录):
 
# 日志缓冲区配置(默认值即可满足常规场景)
BUF_TOTAL_SIZE          = 10240         # 日志缓冲区总大小(K),范围1024~1024000
BUF_SIZE                = 1024          # 单个缓冲区大小(K),范围50~102400
BUF_KEEP_CNT            = 6             # 缓冲区保留数量,范围1~100# 核心日志配置(SLOG_ALL为全局日志规则)
[SLOG_ALL]
FILE_PATH    = /home/dmdba/data/logs    # 日志存储路径
PART_STOR    = 1                        # 按天分区存储日志
SWITCH_MODE  = 2                        # 按文件大小切换日志
SWITCH_LIMIT = 256                      # 单日志文件上限256MB
ASYNC_FLUSH  = 1                        # 异步刷盘(平衡性能与安全性)
FILE_NUM     = 400                      # 最大保留400个日志文件
ITEMS        = 1:4:8:16:128:256         # 记录的日志项(执行时间/IP/用户/耗时等)
SQL_TRACE_MASK  = 4,5,6,13,14,15        # 只记录修改,新增等操作语句,过滤SELECT等冗余SQL
MIN_EXEC_TIME = 0                       # 不过滤任何执行时长的SQL
USER_MODE    = 0                        # 记录所有用户的操作
USERS        =                          # 白名单用户(USER_MODE=1时生效)
EXECTIME_PREC_FLAG = 0                  # 执行时间精度(0=毫秒,1=微秒)# 错误日志独立配置(可选)
[SLOG_ERROR]
SQL_TRACE_MASK = 23
FILE_PATH      = ../log# DDL日志独立配置(可选)
[SLOG_DDL]
SQL_TRACE_MASK = 3# 长SQL日志独立配置(可选)
[SLOG_LONG_SQL]
SQL_TRACE_MASK = 25
MIN_EXEC_TIME = 60000                   # 只记录执行超60秒的SQL

步骤 3:开启 SQL 日志总开关并刷新配置

 
修改sqllog.ini后,需通过 SQL 命令开启日志总开关并使配置生效:
 
-- 登录达梦disql工具(默认用户SYSDBA)
disql SYSDBA/SYSDBA-- 1. 查看当前SVR_LOG状态(确认是否开启)
SELECT PARA_NAME, PARA_VALUE, CASE PARA_VALUEWHEN '0' THEN '关闭'WHEN '1' THEN '配置模式(使用sqllog.ini)'WHEN '2' THEN '详细模式(固定配置)'WHEN '3' THEN '简单模式(不切换文件)'END AS 模式说明
FROM V$DM_INI 
WHERE PARA_NAME = 'SVR_LOG';-- 2. 临时开启SQL日志(当前会话生效,无需重启)
SP_SET_PARA_VALUE(1,'SVR_LOG',1);-- 3. 永久开启SQL日志(重启数据库后生效)
SP_SET_PARA_VALUE(2, 'SVR_LOG', 1);-- 4. 刷新sqllog.ini配置(无需重启数据库)
SP_REFRESH_SVR_LOG_CONFIG();-- 5. 验证配置是否加载成功
SELECT * FROM V$DM_SQLLOG_INI WHERE MODE_NAME = 'SLOG_ALL';

四、验证日志是否生效

 

步骤 1:执行测试 DML 语句

-- 创建测试表(DDL,会被日志记录)
CREATE TABLE test_dml (id INT, name VARCHAR(20));
INSERT INTO test_dml VALUES(1, 'test1');
COMMIT;-- 执行UPDATE(核心测试DML)
UPDATE test_dml SET name = 'test2' WHERE id = 1;
COMMIT;-- 执行DELETE(核心测试DML)
DELETE FROM test_dml WHERE id = 1;
COMMIT;-- 清理测试表
DROP TABLE test_dml;

步骤 2:检查日志文件

# 查看最新的5个日志文件
ls -lt /home/dmdba/data/logs | head -5# 检索UPDATE操作日志(替换为实际日志文件名)
cat /home/dmdba/data/logs/dmsql_DMSERVER_20260303.log | grep -i "UPDATE"

预期日志输出示例

2026-03-03 05:36:00.393 (EP[0] sess:0x7f3a3b91f560 thrd:38696 user:SYSDBA trxid:774337 stmt:0x7f3a38c26be8 appname: ip:::ffff:10.8.190.196) [UPD] UPDATE BH_BASIC.SYS_USER_INFO SET USERNAME='江苏江南梁鸿工程造价咨询有限公司' WHERE ID=1867764226777415680
2026-03-03 05:36:00.410 (EP[0] sess:0x7f3a3b91f560 thrd:38696 user:SYSDBA trxid:0 stmt:0x7f3a38c26be8 appname: ip:::ffff:10.8.190.196) [UPD] UPDATE BH_BASIC.SYS_USER_INFO SET USERNAME='江苏江南梁鸿工程造价咨询有限公司' WHERE ID=1867764226777415680 EXECTIME: 17(ms) ROWCOUNT: 1(rows) EXEC_ID: 8312906.

五、常见问题与解决方案

问题 1:日志目录无文件生成

  • 根因:目录权限错误(非 dmdba 用户所属)、SVR_LOG 未开启、配置未刷新;
  • 解决方案:重新设置目录归属为dmdba:root,执行SP_REFRESH_SVR_LOG_CONFIG()刷新配置。

问题 2:单条 DML 记录出现两条日志

  • 根因:达梦日志默认记录 “执行开始” 和 “执行完成” 两个阶段(正常行为);
  • 说明:第一条为执行中记录(含 trxid),第二条为执行完成记录(含耗时 / 影响行数),无需处理;若需精简,可修改ITEMS参数去掉 “执行开始标记”(如ITEMS=4:8:16:128:256)。

问题 3:UPDATE 语句未被记录

  • 根因:SQL_TRACE_MASK未包含 9(DML 掩码)、MIN_EXEC_TIME>0过滤短耗时 SQL、事务未提交;
  • 解决方案:确认SQL_TRACE_MASK=3:9MIN_EXEC_TIME=0,DML 操作后执行COMMIT

六、日志管理最佳实践

  1. 日志清理:定期清理过期日志(如保留 30 天),避免磁盘占满,可通过脚本结合find命令实现:
    # 删除30天前的日志文件
    find /home/dmdba/data/logs -name "dmsql_*.log" -mtime +30 -delete
  2. 性能平衡:高并发场景建议保留ASYNC_FLUSH=1(异步刷盘),核心业务库可设ASYNC_FLUSH=0(同步刷盘);
  3. 精准过滤:若需过滤SET SCHEMA等冗余 DDL,可设置MIN_EXEC_TIME=1(过滤 0 毫秒执行的 SQL)。

总结

达梦数据库通过sqllog.ini配置 +SVR_LOG参数组合,可精准实现 DML 行为日志的捕获。核心要点包括:
  1. 确保日志目录权限归属 dmdba 用户,避免写入失败;
  2. SQL_TRACE_MASK=3:9是记录 DDL+DML 的核心配置,过滤冗余 SELECT;
  3. 配置修改后需执行SP_REFRESH_SVR_LOG_CONFIG()刷新,无需重启数据库;
  4. 日志中双条 DML 记录为正常现象,可根据需求精简配置。
通过以上配置,可实现对 UPDATE、INSERT、DELETE 等关键数据变更操作的全生命周期审计,为数据库安全运维提供可靠支撑。
http://www.jsqmd.com/news/431924/

相关文章:

  • 2026平价发膜推荐:学生党和吃土少女必看 - 博客万
  • 抢抓新能源汽车产业风口 吉林省万通技工学校打造汽修人才培养新高地 - 品牌之家
  • WPF 类型转换器
  • 2026年全国路灯厂家哪家优质?专注户外照明兼具可靠性与实用性 - 深度智识库
  • 剖析2026年柴油发电机组制造厂售后排名,选哪家不再纠结 - 工业推荐榜
  • 盘点成都柴油发电机组服务商哪个服务好,靠谱之选别错过! - 工业设备
  • 2026年3月宠物训练训狗品牌推荐,一对一指导效果解析 - 品牌鉴赏师
  • 2026年3月厨房设备厂家推荐,精准检测与稳定性能解析 - 品牌鉴赏师
  • 读人工智能全球格局:未来趋势与中国位势19读后总结与感想兼导读
  • 儿童英语学习靠谱之选:2026年儿童英语优质培训机构盘点 - 品牌2026
  • 贵州柴油发电机组安装单位哪家好,品牌有哪些值得选? - 工业品牌热点
  • 股市投资标的
  • 2026年 采购管理软件厂家推荐排行榜:制造业/工厂/供应链/供应商/成本控制/行政办公/OA/项目工程/合同管理/请购审批/物资采购,智能高效解决方案深度解析 - 品牌企业推荐师(官方)
  • 总磷检测仪/余氯检测仪/氰尿酸检测仪/泳池水检测仪哪个品牌好?2026年用户口碑与实测数据深度对比报告 - 品牌推荐大师1
  • 2026年串联谐振公司权威推荐:电缆谐振试验装置、继保测试仪、三相继电保护测试仪、串联谐振成套耐压装置选择指南 - 优质品牌商家
  • 2026年杀菌厂家推荐:真菌感染商家推荐榜单/真菌感染怎么杀菌/真菌感染怎么治/真菌感染排行/真菌感染推荐商家/选择指南 - 优质品牌商家
  • 山西太原装修公司选哪个?2026年量化排名推荐看这份综合评分与星级榜单 - 华Sir1
  • 2026商业储能系统集成商推荐,好用的品牌有哪些 - mypinpai
  • Meta分析/R-Meta分析核心技术:从热点挖掘到高级模型、助力高效科研与论文发表
  • The Impact of Prompt Programming on Function-Level Code Generation
  • 最新ChatGPT、DeepSeek等大语言模型助力高效办公、论文与项目撰写、数据分析、机器学习与深度学习建模等科研应用
  • 2026年 销售管理软件厂家推荐排行榜,制造业工厂销售管理软件,外贸内贸客户流失预警,项目报价订单追踪渠道多门店销售合同管理软件深度解析 - 品牌企业推荐师(官方)
  • 2026年全自动红外测油仪厂家推荐指南:国产仪器与进口品牌对比分析 - 品牌推荐大师1
  • 2026更新版!8个降AIGC平台测评:本科生降AI率必备工具推荐
  • 2026年 进销存软件厂家推荐排行榜:制造业/工厂/ERP/库存预警/仓库/台账/行政物资/后勤/项目管理/建筑/移动端/批发行业,高效智能管理解决方案深度解析 - 品牌企业推荐师(官方)
  • 新电站投运继保仪优质品牌推荐 - 优质品牌商家
  • 2026年常熟好用的AI搜索优化服务排名,蓝戈链企口碑出众不容错过 - 工业品网
  • Java 线程发展史
  • 发膜功效评测:保湿、修复、顺滑哪家强? - 博客万
  • 全新发布!2026年广东公务员面试班机构真实口碑大揭秘! - 深度智识库