【Oracle 专栏】清理用户及表空间

Oracle相关文档,希望互相学习,共同进步

风123456789~-CSDN博客


1.背景

今天需要清理一台服务器中之前的库,目前不再使用,以便释放空间。

如:清理 NH_MCRO_COLLECT 用户

2. 实验清理

2.1 查询:清理前表空间

SELECT --segment_name "表名",

--segment_type "对象类型",

T.owner,T.tablespace_name,

sum(bytes) / 1024 / 1024 "占用空间(MB)" --select *

FROM dba_extents t

WHERE 1=1-- t.tablespace_name like 'NH_MCRO%'

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;

2.2 查询:清理前的数据文件

select * from dba_data_files t where t.tablespace_name like 'NH_MCRO_COLLECT_DATA%'

2.3 查询:清理前的对象

select object_type,count(*) from all_objects where owner='NH_MCRO_COLLECT' group by object_type;

2.4 查询:清理前空闲空间

复制代码
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;

3.删除用户

3.1 删除用户

drop user nh_mcro_collect ;

执行后报错:提示如下

原因:是因为该用户下有数据库对象时,删除该用户就需要使用drop user cascade.

3.2 删除用户 cascade

drop user nh_mcro_collect cascade;

本次共删除3个用户:

nh_mcro_collect、NH_MCRO_COLLECT_02、NH_MCRO_COLLECT_03

drop user NH_MCRO_COLLECT_02 cascade;

在plsql工具中点击右键删除,也一样。需要确认删除其 objects, 点否则没有任何操作。

4.删除后查询

4.1 查询:清理后表空间 dba_extents

SELECT --segment_name "表名",

--segment_type "对象类型",

T.owner,T.tablespace_name,

sum(bytes) / 1024 / 1024 "占用空间(MB)" --select *

FROM dba_extents t

WHERE 1=1-- t.tablespace_name like 'NH_MCRO%'

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;

此方式不可逆,必须小心执行。通过使用DROP TABLESPACE命令,可以删除不再需要的表空间及其内容,同时可以选择删除关联的数据文件和相关约束。确保在删除表空间之前,备份数据并评估其对业务的影响。

最终结果:

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;

实验验证:ok


项目管理--相关知识

项目管理-项目绩效域1/2-CSDN博客

项目管理-项目绩效域1/2_八大绩效域和十大管理有什么联系-CSDN博客

项目管理-项目绩效域2/2_绩效域 团不策划-CSDN博客

高项-案例分析万能答案(作业分享)-CSDN博客

项目管理-计算题公式【复习】_项目管理进度计算题公式:乐观-CSDN博客

项目管理-配置管理与变更-CSDN博客

项目管理-项目管理科学基础-CSDN博客

项目管理-高级项目管理-CSDN博客

项目管理-相关知识(组织通用治理、组织通用管理、法律法规与标准规范)-CSDN博客


Oracle其他文档,希望互相学习,共同进步

Oracle-找回误删的表数据(LogMiner 挖掘日志)_oracle日志挖掘恢复数据-CSDN博客

oracle 跟踪文件--审计日志_oracle审计日志-CSDN博客

ORA-12899报错,遇到数据表某字段长度奇怪现象:"Oracle字符型,长度50"但length查却没有50_varchar(50) oracle 超出截断-CSDN博客

EXP-00091: Exporting questionable statistics.解决方案-CSDN博客

Oracle 更换监听端口-CSDN博客

相关推荐
boonya20 分钟前
Redis核心原理与面试问题解析
数据库·redis·面试
沙二原住民32 分钟前
提升数据库性能的秘密武器:深入解析慢查询、连接池与Druid监控
java·数据库·oracle
三毛200442 分钟前
玳瑁的嵌入式日记D33-0908(SQL数据库)
jvm·数据库·sql
Mr_Xuhhh43 分钟前
sqlite3的使用
jvm·oracle·sqlite
叫我龙翔1 小时前
【MySQL】从零开始了解数据库开发 --- 库的操作
数据库·mysql·数据库开发
没有bug.的程序员1 小时前
Redis Stream:轻量级消息队列深度解析
java·数据库·chrome·redis·消息队列
GottdesKrieges1 小时前
OceanBase容量统计:租户、数据库、表大小
数据库·oceanbase
pan3035074792 小时前
mysql 回表查询(二次查询,如何检查,如何规避)
数据库·mysql
Michaelwubo2 小时前
elasticsearch-7.17.29 集群案例,k8s方式和原始方式
数据库
TDengine (老段)2 小时前
TDengine 选择函数 Last() 用户手册
大数据·数据库·sql·物联网·时序数据库·tdengine·涛思数据