上一篇
"小王啊,把测试环境那个没用的USERS_BAK
表空间删了吧,省点存储空间。"
运维主管轻描淡写的一句话,让新手DBA小王在SQL*Plus里自信输入:
DROP TABLESPACE USERS_BAK INCLUDING CONTENTS AND DATAFILES;
结果迎面撞上红色报错:
ORA-01561: 无法移除指定表空间所有对象
小王瞬间头皮发麻——这表空间里明明没数据啊?!🤯
SELECT owner, object_name, object_type FROM dba_objects WHERE tablespace_name = 'USERS_BAK';
如果返回空结果,别高兴太早!试试这个隐藏关卡:
SELECT segment_name, segment_type FROM dba_segments WHERE tablespace_name = 'USERS_BAK';
Oracle的回收站功能经常藏雷💣:
SELECT original_name, type, droptime FROM recyclebin WHERE ts_name = 'USERS_BAK';
如果上述都查不到,可能是内存中的临时对象:
SELECT * FROM v$tempseg_usage WHERE tablespace = 'USERS_BAK';
-- 单个表空间清理 PURGE TABLESPACE USERS_BAK; -- 核弹选项(慎用!) PURGE RECYCLEBIN;
-- 查找延迟删除的MV SELECT mview_name FROM dba_mviews WHERE tablespace_name = 'USERS_BAK' AND staleness = 'UNDEFINED'; -- 强制删除 BEGIN DBMS_MVIEW.PURGE_MVIEW_FROM_LOG('问题MV名称'); END;
-- 查询会话信息 SELECT s.sid, s.serial#, s.username FROM v$session s, v$tempseg_usage t WHERE s.saddr = t.session_addr AND t.tablespace = 'USERS_BAK'; -- 强制终止会话 ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
-- 先离线再删除 ALTER TABLESPACE USERS_BAK OFFLINE IMMEDIATE; DROP TABLESPACE USERS_BAK INCLUDING CONTENTS AND DATAFILES;
# 优雅关闭 shutdown immediate # 启动 startup # 再尝试删除
DROP TABLESPACE
和PURGE
权限DBMS_SPACE.UNUSED_SPACE
确认数据文件状态ORA-01561本质是Oracle的"对象残留保护机制",常见诱因包括:
Oracle ACE大师李工的建议:"遇到01561别急着重启,先查DBA_SEGMENTS
和RECYCLEBIN
这两个表,十次有九次能定位问题,剩下那次...可能是Oracle的bug,直接开SR吧!" 😅
遇到其他奇葩情况?试试这个万能命令:
ALTER SESSION SET "_oracle_script"=true;
(但千万别在生产环境乱用哦!)🚀
删库跑路是段子,谨慎操作才是真!💼
本文由 越碧曼 于2025-08-03发表在【云服务器提供商】,文中图片由(越碧曼)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/527789.html
发表评论