“昨天谁把那张表删了?””能恢复吗?”

这是 DBA 最怕听到的两句话。洹拓科技在为新乡多家企业做数据库运维时,发现一个普遍现象:很多团队用 Oracle 多年,但从没用过 LogMiner。直到出了事,才知道这个工具能救命。

今天从实战角度,聊聊 Oracle LogMiner 的三个核心场景。

LogMiner 是什么

LogMiner 是 Oracle 内置的日志分析工具,可以读取 redo log 和 archive log,提取其中的 SQL 语句和数据变更。

简单说:它能告诉你”谁在什么时间对哪张表做了什么操作”。

核心能力:

  • 查看历史 SQL(INSERT、UPDATE、DELETE)
  • 追踪数据变更(变更前后的值)
  • 审计用户操作
  • 辅助数据恢复

场景一:误删数据恢复

案例

某企业财务人员误执行了 DELETE FROM invoices WHERE create_time < '2026-01-01',删除了 5000 条发票记录。没有备份,怎么办?

解决方案

用 LogMiner 从归档日志里找回被删除的数据:

-- 1. 安装 LogMiner
@?/rdbms/admin/dbmslm.sql

-- 2. 添加要分析的日志文件
BEGIN
DBMS_LOGMNR.ADD_LOGFILE(
LOGFILENAME => '/oracle/archive/1_100_1102345678.arc',
OPTIONS => DBMS_LOGMNR.NEW
);
END;
/

-- 3. 启动 LogMiner
BEGIN
DBMS_LOGMNR.START_LOGMNR(
OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG
);
END;
/

-- 4. 查询被删除的数据
SELECT SQL_REDO, SQL_UNDO
FROM V$LOGMNR_CONTENTS
WHERE SEG_NAME = 'INVOICES'
AND OPERATION = 'DELETE';

-- 5. 用 SQL_UNDO 恢复数据
-- SQL_UNDO 里是 INSERT 语句,可以直接执行

注意事项

  • 归档日志必须完整,不能有缺失
  • 恢复前先在测试环境验证
  • 大量数据恢复建议分批执行

场景二:审计追踪

案例

某政府单位发现系统数据被篡改,需要查出是谁、什么时间、改了什么。

解决方案

用 LogMiner 分析指定时间段的日志:

-- 分析 2026-10-20 10:00-12:00 的操作
BEGIN
DBMS_LOGMNR.START_LOGMNR(
STARTTIME => TO_DATE('2026-10-20 10:00:00', 'YYYY-MM-DD HH24:MI:SS'),
ENDTIME => TO_DATE('2026-10-20 12:00:00', 'YYYY-MM-DD HH24:MI:SS'),
OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG
);
END;
/

-- 查询所有 UPDATE 操作
SELECT
TIMESTAMP,
SESSION_INFO,
SEG_OWNER,
SEG_NAME,
SQL_REDO
FROM V$LOGMNR_CONTENTS
WHERE OPERATION = 'UPDATE'
ORDER BY TIMESTAMP;

输出示例

TIMESTAMP           | SESSION_INFO              | SEG_NAME | SQL_REDO
2026-10-20 10:23:15 | User: zhangsan; OS: admin | USERS | update "ADMIN"."USERS" set "ROLE" = 'ADMIN' where "USER_ID" = 1001;

可以看到:张三在 10:23 把用户 1001 的角色改成了 ADMIN。

场景三:数据同步

案例

某企业需要把 Oracle A 库的数据实时同步到 Oracle B 库,但不想用 GoldenGate(太贵)。

解决方案

用 LogMiner 提取变更,用存储过程应用到目标库:

-- 源库:提取变更
SELECT SQL_REDO
FROM V$LOGMNR_CONTENTS
WHERE SEG_OWNER = 'APP'
AND OPERATION IN ('INSERT', 'UPDATE', 'DELETE')
AND TIMESTAMP > SYSDATE - 1/24/60; -- 最近 1 分钟

-- 目标库:应用变更
BEGIN
EXECUTE IMMEDIATE 'insert into APP.ORDERS values (...)';
END;
/

局限性

  • 性能不如专业同步工具
  • 复杂事务处理困难
  • 需要自己处理冲突

适合:数据量小、实时性要求不高的场景。

洹拓科技的实践经验

在用 LogMiner 做项目时,我们总结了几条经验:

1. 日志管理

  • 开启归档模式(ARCHIVELOG)
  • 合理设置日志保留策略(至少 7 天)
  • 定期清理过期归档

2. 性能优化

  • 用 STARTSCN 和 ENDSCN 限制分析范围
  • 避免一次性加载太多日志文件
  • 查询结果先存到临时表,再分析

3. 安全审计

  • 对敏感表开启细粒度审计(FGA)
  • LogMiner 结果加密存储
  • 限制 LogMiner 访问权限

洹拓科技的数据库服务

如果你的团队也在为 Oracle 运维头疼,洹拓科技可以提供:

  • 数据恢复:误删数据、日志损坏等紧急恢复
  • 性能优化:慢 SQL 分析、索引优化、架构调整
  • 安全审计:操作审计、权限梳理、合规检查

我们为辉县及新乡本地企业提供数据库运维服务,欢迎联系我们。


新乡洹拓科技有限公司
地址:河南省新乡市辉县市金城百货四楼
电话:400-829-9957
业务:数据库运维 | 数据恢复 | 云服务 | 软件开发