Oracle 排除非业务表:一份能直接抄的“全量过滤”SQL
2026-09-10 07:19 AlfredZhao 阅读(87) 评论(0) 收藏 举报在日常的 Oracle 开发与运维中,我们经常需要列出某个 Schema 下的“真实业务表”。但现实往往很骨感:只要库里启用过全文索引、物化视图、高级队列,甚至只是删过几张表,USER_TABLES 里就会混入一堆系统自动生成的辅助表。
笔者在整理清单时发现,仅靠过滤常见的 BIN$%(回收站)和 SYS_% 并不够。像外部表临时表 ET$%、空间索引 MDXT_% 这类前缀,仅在特定场景下出现,容易被遗漏。为此,笔者将新旧版本中所有系统辅助表前缀做了全量整合,整理出下面这份“最全排除 SQL”。
01 | 查 USER_TABLES(最全推荐版)
如果只需要当前用户下、且排除官方标记的二级表和嵌套表的业务表,推荐直接查 USER_TABLES:
SELECT table_name
FROM user_tables
WHERE
-- 1. 过滤官方标记的二级表与嵌套表
(secondary IS NULL OR secondary = 'N')
AND (nested IS NULL OR nested = 'NO')
-- 2. 索引与内部特性辅助表
AND table_name NOT LIKE 'DR$%' -- 全文索引 (Oracle Text)
AND table_name NOT LIKE 'VECTOR$%' -- 23ai 向量索引 (HNSW/IVF)
AND table_name NOT LIKE 'MDXT_%' -- 空间索引 (Spatial Index)
AND table_name NOT LIKE 'SYS_%' -- 系统临时表 / LOB 表
-- 3. 数据同步与高级特性表
AND table_name NOT LIKE 'AQ$%' -- 高级队列 (Advanced Queuing)
AND table_name NOT LIKE 'MLOG$%' -- 物化视图日志
AND table_name NOT LIKE 'RUPD$%' -- 物化视图更新日志
AND table_name NOT LIKE 'ET$%' -- 外部表 (External Table) 临时表
AND table_name NOT LIKE 'DM$%' -- Data Mining 数据挖掘模型表
AND table_name NOT LIKE 'ANNOTATIONS_%' -- 23ai 数据注解表
-- 4. 开发工具与管理平台辅助表
AND table_name NOT LIKE 'DBTOOLS$%' -- Database Actions / ORDS 执行历史表
AND table_name NOT LIKE 'SQLDEV$%' -- SQL Developer 辅助表
-- 5. 系统垃圾与回收站
AND table_name NOT LIKE 'BIN$%' -- 回收站表 (Recycle Bin)
order by table_name;
02 | 查 USER_OBJECTS(全量过滤版)
如果想覆盖当前用户可见的所有对象,可以改用 user_objects 视图,比如最常见的,需要过滤出业务的表以及视图:
SELECT object_name AS table_name, object_type AS table_type
FROM user_objects
WHERE object_type IN ('TABLE', 'VIEW')
-- 1. 过滤所有系统/后台标记为自动生成的对象
AND generated = 'N'
-- 2. 索引与内部特性辅助表(以防某些版本或场景下 generated 为 N)
AND object_name NOT LIKE 'DR$%' -- 全文索引 (Oracle Text)
AND object_name NOT LIKE 'VECTOR$%' -- 23ai 向量索引 (HNSW/IVF)
AND object_name NOT LIKE 'MDXT_%' -- 空间索引 (Spatial Index)
AND object_name NOT LIKE 'SYS_%' -- 系统临时表 / LOB 表
-- 3. 数据同步、工具与高级特性表
AND object_name NOT LIKE 'AQ$%' -- 高级队列 (Advanced Queuing)
AND object_name NOT LIKE 'MLOG$%' -- 物化视图日志
AND object_name NOT LIKE 'RUPD$%' -- 物化视图更新日志
AND object_name NOT LIKE 'ET$%' -- 外部表 (External Table) 临时表
AND object_name NOT LIKE 'DM$%' -- Data Mining 数据挖掘模型表
AND object_name NOT LIKE 'ANNOTATIONS_%' -- 23ai 数据注解表
-- 4. 开发工具与管理平台辅助表
AND object_name NOT LIKE 'DBTOOLS$%' -- Database Actions / ORDS 执行历史表
AND object_name NOT LIKE 'SQLDEV$%' -- SQL Developer 辅助表
-- 5. 系统视图 & 回收站
AND object_name NOT LIKE 'METADATA_%' -- 23ai 元数据注解相关视图
AND object_name NOT LIKE 'MVIEW_%' -- 物化视图系统视图
AND object_name NOT LIKE 'LOGMNR_%' -- LogMiner 系统视图
AND object_name NOT LIKE 'OLAP_%' -- OLAP 特性系统视图
AND object_name NOT LIKE 'BIN$%' -- 数据库回收站 (Recycle Bin)
order by table_type, table_name;
03 | 核心汇总对照清单
这份对照表可以直接保存为开发规范,方便日后排查:
| 过滤前缀 | 对应功能/模块 | 产生场景 |
|---|---|---|
DR$% |
全文索引 (Oracle Text) | 创建 CONTEXT 类型的全文索引 |
VECTOR$% |
AI 向量检索 (23ai) | 创建 VECTOR 类型字段的 HNSW/IVF 索引 |
MDXT_% |
空间索引 (Spatial Index) | 创建 SDO_GEOMETRY 空间索引 |
SYS_% |
系统底层/LOB段/临时表 | 表中包含 CLOB/BLOB 或在线重定义 |
AQ$% |
高级队列 (Advanced Queuing) | 使用 Oracle 内部消息队列 |
MLOG$% / RUPD$% |
物化视图日志 (MView Log) | 为表创建了增量刷新的物化视图日志 |
ET$% |
外部表 (External Table) | 访问外部文件时生成的临时控制表 |
DM$% |
数据挖掘 / 机器学习 (OML) | 在数据库内训练/运行 ML 模型 |
ANNOTATIONS_% |
数据注解 (23ai) | 给表或列添加元数据 Annotation |
DBTOOLS$% / SQLDEV$% |
Web/客户端工具控制表 | 使用 ORDS、SQL Developer Web 等工具 |
BIN$% |
数据库回收站 | 删表(DROP TABLE)后留在回收站的数据 |
按这份全量列表过滤后,可以覆盖绝大多数常见场景下的系统辅助表;但不同版本和特性可能引入新的前缀,且若业务表本身以 SYS_、BIN$ 等开头也会被误过滤,请结合实际情况调整。当然,如果你发现还有漏网之鱼,欢迎补充,加到过滤列表中来。
关注我,和AI一起成长~
AlfredZhao©版权所有「从Oracle起航,领略精彩的IT技术。」
转载请注明原文链接:https://www.cnblogs.com/jyzhao/p/22914729
转载请注明原文链接:https://www.cnblogs.com/jyzhao/p/22914729
👋 感谢阅读,欢迎关注我的公众号 「赵靖宇」
浙公网安备 33010602011771号