AND (t.owner like 'NH_MCRO_COLLECT%' or t.tablespace_name like 'NH_MCRO_COLLECT_%')
--AND segment_name = 'NHTC_SUBJECT_INFO'
GROUP BY T.owner,T.tablespace_name
--,segment_name,segment_type
ORDER BY 1;
确实少了nh_mcro_colllect用户的表空间。
3个用户都删后,dba_extents 没有占用了
4.2 查询:清理后的数据文件
select * from dba_data_files t where t.tablespace_name like 'NH_MCRO_COLLECT_DATA%'
发现数据文件和之前一样,大小没有变化
4.3查询:清理后的对象
select object_type,count(*) from all_objects where owner='NH_MCRO_COLLECT' group by object_type;
查询结果:为空。 已清理对象
4.4 查询:清理后表空间 dba_free_space
复制代码
SELECT UPPER(F.TABLESPACE_NAME) "表空间名",
D.TOT_GROOTTE_MB "表空间大小(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100, 2), '990.99') "使用比",
F.TOTAL_BYTES "空闲空间(M)",
F.MAX_BYTES "最大块(M)"
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
and d.TABLESPACE_NAME like 'NH_MCRO%';
清理前后对比:
5.批量清理其他用户
复制代码
select T.username,T.default_tablespace,'DROP USER '||username||' cascade;' AA
from dba_users t
where t.username like 'NH_MCRO%'
AND T.username NOT LIKE 'NH_MCRO_FINANCE%'
6.清理表空间及数据文件
6.1查询
复制代码
SELECT T.owner,table_name, tablespace_name
FROM dba_tables T
WHERE tablespace_name like 'NH_M%'
AND T.tablespace_name<>'NH_MCRO_FINANCE_DATA';
SELECT segment_name AS table_name, tablespace_name
FROM dba_segments T
WHERE T.tablespace_name<>'NH_MCRO_FINANCE_DATA'
AND tablespace_name like 'NH_M%'
--segment_type = 'TABLE' AND segment_name = '你的表名'
;
发现都已清理
6.2 方式一:缩小数据文件
可以缩小数据文件 或删除表空间
复制代码
alter database datafile '/home/u01/app/oracle/oradata/ORCL/orclpdb1/nh_mcro_collect_data001.dbf' resize 100M;
或删除
drop tablespace CCDD01 including contents and datafiles cascade constraint;
注意:减小数据文件不能比已经使用的大小更小,所以要先查询已经使用的大小。
SELECT file_name,a.file_id, SUM(a.bytes)/1024/1024 AS MB
FROM dba_extents a JOIN dba_data_files b ON a.file_id=b.file_id GROUP BY file_name,a.file_id;
批量缩小表空间:
复制代码
select 'alter database datafile '''||T.file_name||''' resize 100M;' AA,T.*
from dba_data_files t
where t.tablespace_name like 'NH_MCRO%' AND T.tablespace_name <>'NH_MCRO_FINANCE_DATA';
6.3方式二:删除表空间及数据文件
复制代码
drop tablespace NH_MCRO_ASSECT_DATA including contents and datafiles cascade constraint;