【Oracle专栏】删除用户 释放表空间
Oracle相关文档,希望互相学习,共同进步
风123456789~-CSDN博客
1.背景
本文主要实验:1)oracle删除用户,释放表空间
2)删除表,收缩表空间
3)降低表空间的高水位线
2. 实验验证
2.1 准备数据
1)实验前,表空间大小
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_BYTESFROM SYS.DBA_FREE_SPACEGROUP BY TABLESPACE_NAME) F,(SELECT DD.TABLESPACE_NAME,ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MBFROM SYS.DBA_DATA_FILES DDGROUP BY DD.TABLESPACE_NAME) DWHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME;
结果截图:
2)实验前,使用表空间用户情况
SELECT owner, tablespace_name,round(sum(BYTES/1024/1024),2) sizes
FROM dba_segments
WHERE owner like 'NH_MCRO_FINANCE%'
group by owner, tablespace_name;
结果截图:
2.2 删除用户,验证
drop user NH_MCRO_FINANCE0108 cascade;
1) 执行后的 表空间用户情况
SELECT owner, tablespace_name,round(sum(BYTES/1024/1024),2) sizes
FROM dba_segments
WHERE owner like 'NH_MCRO_FINANCE%'
group by owner, tablespace_name;
删除0108的用户后,结果截图对比:
2)执行后,表空间大小
删除后结果:看到已使用空间减小,确实是删除了数据。
但是由于空间是大表空间,且自动增长的,看到表空间文件没有自动收缩,1.3T 但是目前是273M使用的,因此需要收缩一下空间
3)执行后,数据文件大小
select * from dba_data_files t where t.tablespace_name ='NH_MCRO_FINANCE_DATA'
结果截图:
4)直接收缩空间
ALTER TABLESPACE NH_MCRO_FINANCE_DATA SHRINK SPACE;
报错:ora12916无法压缩永久表空间(shrink:该命令将回收未使用的空间并压缩表空间。)
ALTER DATABASE DATAFILE '/home/u01/app/oracle/oradata/ORCL/orclpdb1/nh_mcro_finance_data001.dbf' RESIZE 600M
这主要涉及到Oracle的逻辑存储和段空间管理以及数据库块中的数据分布。
Oralce有一个High Water Mark(高水位线),它表示Oracle对象使用空间最高水位线。
当插入了数据以后,HWM就会上涨;Delete语句删除数据后,HWH并没有降低。
HWH数据库块分布在调整范围之外,此时使用RESIZE命令会报错。
5) 收缩空间
对所有表空间中的所有表执行一次shrink命令
在执行shrink前,必须开启数据表的行迁移功能
alter table xxx enable row movement;
alter table xxx shrink space cascade;
注意:该SQL语句会造成引用表xxx的对象(如存储过程、包、视图等)变为无效,后续需要重新编译一次确认是否有效。
构造shrink命令,建立shrink.sql文件,其内容如下:
set heading off;
set echo off;
set feedback off;
set termout on;
spool /home/oracle/backup/deal_shrink.sql;
select 'alter table NH_MCRO_FINANCE_OLD.'|| table_name || ' enable row movement; ' from user_tables where tablespace_name='NH_MCRO_FINANCE_DATA';
select 'alter table NH_MCRO_FINANCE_OLD.'|| table_name || ' shrink space CASCADE;' from user_tables where tablespace_name='NH_MCRO_FINANCE_DATA';
spool off;
NH_MCRO_FINANCE_OLD@xxx/orclpdb1> @/home/oracle/backup/shrink.sql
NH_MCRO_FINANCE_OLD@xxx/orclpdb1> @deal_shrink.sql
执行后,发现表空间会变小
SELECT owner, tablespace_name,round(sum(BYTES/1024/1024),2) sizes
FROM dba_segments
WHERE owner like 'NH_MCRO_FINANCE%'
group by owner, tablespace_name;
2.3 单表删除后的表空间 收缩
alter table table_name enable row movement;–语句开启允许行移动,该语句允许rowid改变;
alter table table_name shrink space;–语句回收空间。
备注:如果使用turncate直接进行全表删除,会直接释放表空间,不需要进行回收
实验验证:ok
3.相关知识点
alter table <table_name> shrink space [ <null> | compact | cascade ];
alter table <table_name> shrink space compcat;
说明:收缩表,移动块中数据位置到一起,但 High Water Mark 保持不变alter table <tablespace_name> shrink space;
说明:收缩表,降低 High Water Markalter table <tablespace_name> shrink space cascade;
说明:收缩表,降低 High Water Mark,并且把相关索引也收缩一下。alter index idxname shrink space;
说明:回缩索引
项目管理--相关知识
项目管理-项目绩效域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博客