0

0

如何清理物化视图日志中未能消费的记录_找到未刷新的MVIEW并手动解除绑定

P粉602998670

P粉602998670

发布时间:2026-03-13 16:42:13

|

661人浏览过

|

来源于php中文网

原创

最直接原因是关联的物化视图未刷新或已失效但未注销;Oracle仅清理DBA_REGISTERED_MVIEWS中CAN_USE_LOG='YES'且仍注册的物化视图所对应日志,远程MV因网络、DB Link失效等停止刷新会导致日志持续堆积。

怎么判断哪些物化视图日志卡住了

物化视图日志(mlog$_*)长期不收缩,最直接原因是关联的物化视图没刷新,或已失效但未注销。oracle 不会自动清理“无人认领”的日志记录——它只信任 dba_registered_mviews 里还注册着、且 can_use_log = 'yes' 的物化视图。一旦远程物化视图因网络中断、db link 失效、测试库下线等原因停止刷新,日志就只能越积越多。

查卡住的日志表,先看数据量:

SELECT tname, (SELECT COUNT(*) FROM <code>tname</code>) cnt 
FROM tab WHERE tname LIKE 'MLOG$%';

再关联注册信息,找“有日志但无有效 MVIEW”的组合:

  • SELECT m.owner, m.name, m.mview_site, m.snapid FROM dba_registered_mviews m WHERE m.name NOT IN (SELECT object_name FROM dba_objects WHERE object_type = 'MATERIALIZED VIEW'); —— 找出已删 MVIEW 但注册残留的
  • SELECT log_table, master, last_refresh FROM dba_mview_logs; 配合 last_refresh 字段看是否长时间没更新
  • 重点盯 SNAPID:它是物化视图在日志消费中的唯一凭证,后续 purge 必须用到

如何安全地解除绑定并清理日志

不能直接删 MLOG$_* 表,也不能 truncate——Oracle 日志机制依赖内部标记(如 SNAPTIME$$DMLTYPE$$OLD_NEW$$),硬删会导致后续刷新报 ORA-12034 或 ORA-12091。

正确路径是:先注销无效物化视图 → 再 purge 对应日志 → 最后确认日志表收缩。关键函数只有两个:DBMS_MVIEW.UNREGISTER_MVIEWDBMS_MVIEW.PURGE_MVIEW_FROM_LOG

  • EXEC DBMS_MVIEW.UNREGISTER_MVIEW('OWNER', 'MV_NAME', 'MVIEW_SITE'); —— MVIEW_SITE 必须和 DBA_REGISTERED_MVIEWS.MVIEW_SITE 完全一致(含大小写、域名、端口),否则报 ORA-12006
  • EXEC DBMS_MVIEW.PURGE_MVIEW_FROM_LOG('OWNER', 'MASTER_TABLE_NAME', SNAPID); —— SNAPID 来自上一步查出的 DBA_REGISTERED_MVIEWS.SNAPID,不是随便填的数字
  • 执行前务必在 SESSION 级加锁基表: LOCK TABLE <master_table> IN EXCLUSIVE MODE;,防止 purge 过程中发生 DML 干扰内部时间戳判断

为什么 PURGE 后日志表还是没变小

PURGE_MVIEW_FROM_LOG 实际做的是逻辑清理:它把 MLOG$_* 中早于该 SNAPID 最后已知刷新时间(SNAPTIME$$)的记录标为可删除,但不会立即释放空间。高水位(HWM)还在,表大小不变是正常现象。

Rose.ai
Rose.ai

一个云数据平台,帮助用户发现、可视化数据

下载

真正释放空间要靠后续的 segment 回收动作:

  • 如果是 ASSM 表空间,等下次物化视图刷新(哪怕只刷一条)会触发自动 HWM 下降
  • 如果等不及,手动 shrink:ALTER TABLE <code>MLOG$_TBL</code> SHRINK SPACE CASCADE;(需行移动启用)
  • 注意:不要用 TRUNCATE,它会重置 SNAPTIME$$,导致所有现存注册 MVIEW 下次刷新失败

远程物化视图场景最容易漏掉的三件事

当物化视图建在另一台数据库(通过 DB Link),注销和清理比本地复杂得多,90% 的残留日志问题都出在这里。

  • 注销时 MVIEW_SITE 必须写完整连接串,比如 'user@dblink_name',而不是只写 'dblink_name';否则 UNREGISTER 成功但实际没生效
  • 主库上查不到远程 MVIEW 的 OBJECT_NAME,所以 dba_objects 查询会漏判——得依赖 DBA_REGISTERED_MVIEWS + 网络连通性验证
  • purge 前没停掉其他数据库的刷新请求:只要还有别的库连着这个 DB Link 刷数据,PURGE_MVIEW_FROM_LOG 就可能被并发刷新打断,日志清理不彻底

最稳妥的做法是:先关监听或防火墙拦截远端 IP,再操作;purge 完立刻查 MLOG$_*COUNT(*),别只看表大小。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

203

2023.11.20

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

336

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

776

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

97

2025.08.19

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

446

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

605

2023.08.10

oracle清空表数据
oracle清空表数据

当表中的数据不需要时,则应该删除该数据并释放所占用的空间。本专题为大家提供oracle清空表数据的相关文章,帮助大家解决该问题。

271

2023.08.16

Oracle中declare的使用
Oracle中declare的使用

Oracle DECLARE语句是PL/SQL编程语言中用于声明变量、常量、游标或异常的关键字。它的主要作用是在程序中定义这些对象,以便在后续的代码中使用。DECLARE语句的语法简单明了,可以根据需要声明多个对象。通过使用这些声明的对象,可以进行各种操作,如计算、查询数据库、处理异常等 。

221

2023.09.15

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号