快速进行表空间清理方案的编写和操作

一、查询数据库表空间使用率
select total.tablespace_name,
round(total.gb, 2) total_gb,
round(total.gb, 2) - round(nvl(free.gb, 0), 2) used_gb,
round(nvl(free.gb, 0), 2) free_gb,
round( 100 ( 1 - nvl( free.gb, 0 ) / total.gb ), 2 ) "USED RATE(%)",
round(nvl(free.gb, 0) / total.gb
100, 2) "FREE RATE(%)"
from (select tablespace_name, sum(bytes) / 1024 / 1024 / 1024 GB
from dba_free_space
group by tablespace_name) free,
(select tablespace_name, sum(bytes) / 1024 / 1024 / 1024 GB
from dba_data_files
group by tablespace_name) total
where total.tablespace_name = free.tablespace_name(+)
order by "FREE RATE(%)" ;

二、查询表空间T_SPACES占用空间比较大的对象
select *
from (select segment_name,
segment_type,
tablespace_name,
sum(bytes / 1024 / 1024 / 1024) used_gb
from dba_segments
where tablespace_name = ‘T_SPACES‘
group by segment_name, segment_type, tablespace_name )
order by 4 desc;

经分析:占用表空间T_SPACES使用率如上图所示。
注:写的比较久了,图不见了,根据上面语句可以查询出来占用空间最大的就是最前面的,因为使用了ORDER BY DESC倒序排列。
结论:我们需要清理上图表中数据,可将表空间T_SPACES使用率降低。
三、建议删除T_TAB1表数据(因为该笔与历史表T_TAB1_his有重复数据)
数据分布情况
1、T_TAB1分布情况如下:
select substr(tran_dt,1,6),count(*) from cpsser.T_TAB1 group by substr(tran_dt,1,6);
20170426日最新查询:

四、清理T_TAB1表数据(201611—201703)
1、查询数据记录数
select count(*) from cpsser.T_TAB1 partition (M20170101) ;--3800371

2、truncate分区表cpsser.T_TAB1数据
alter table T_TAB1 truncate partition M20170101 update global indexes;

五、查看索引是否失效(VALID有效),若失效重建索引
select status from dba_indexes where table_name=‘T_TAB1‘;
注:若有失效的索引,需要重建索引,重建索引语句如下:
alter index P_T_TAB1 rebuild online;

六、清理索引空间
在线重建索引(T_TAB1、T_TAB2)
1、T_TAB1
alter index INX1_T_TAB1 rebuild online;
alter index INX2_T_TAB1 rebuild online;
alter index PK_T_TAB1 rebuild online;

以上是非常简便的ORACLE数据库表空间清理方案,可以直接拿去使用。
小知识:
数据库分区索引的几个视图
dba_ind_partitions:分区索引的分区情况和统计信息。
dba_part_indexes:分区索引的概要统计信息,可以查看表中有那些分区索引,和分区索引的类型。
dba_indexes minus dba_part_indexes 可以得到每个表中哪些非分区索引
分区索引分为:本地索引和全局索引。
分区索引不能对整体重建,必须对每个分区重建。

--查询该用户下有哪些是分区表
select * from dba_part_tables where owner=‘SROOT‘
dba_part_tables是sys用户下的表

原文地址:https://blog.51cto.com/7794482/2419447

时间: 2024-11-09 03:36:30

快速进行表空间清理方案的编写和操作的相关文章

Oracle大表改为分区表及表空间切换方案

Oracle大表改为分区表及表空间切换方案 一.            背景 由于之前数据库表和索引放在一个表空间导致表空间数据文件增长太快,文件数量即将达到Oracle表空间的限制,需要对表(没有分区,有些表数据量多达几十亿,文件大小TB级)进行表空间迁移,并对某些表改造为分区表. 二.            可选方案分析 1.    使用IMP/EXP 导入(import)导出(export)工具年头已久,将数据导出为二进制文件,将会在11g r2之后废弃,只用于遗留数据的导入导出 此工具可

工作笔记 ---表空间清理

--查看数据库中表空间详细使用情况 SELECT A.TABLESPACE_NAME "表空间名", A.TOTAL_SPACE "总空间(M)", NVL(B.FREE_SPACE, 0) "剩余空间(M)", A.TOTAL_SPACE - NVL(B.FREE_SPACE, 0) "使用空间(M)", trunc(NVL(B.FREE_SPACE, 0) / A.TOTAL_SPACE * 100, 2) "剩

oracle 快速建表空间,用户,赋权

本文章并不是给初学者详细详解oracle下如何建立表空间,用户,赋权等命令参数及含义,本文章可能只是对有一定的oracle基础的朋友有所帮助. 最近项目中又开始需要oracle数据库,在搭建环境时,发现自己的oracle命令已经忘了差不多,所以我从网上找来一些语句:可以快速的建表空间,用户并且赋权,由于我现在的项目并不是很严谨,所以像临时表空间,oracle的权限分配等细节,在这里会被忽略. 由于10g开始,oracle的控制台改成网页形式,不但界面改变而且相对的速度也慢了许多,所以我喜欢用命令

oracle之表空间(tablespace)、方案(schema)、段(segment)、区(extent)、块(block)

数据文件和日志文件是数据库中最重要的文件.它们是数据存储的地方.每个数据库至少有一个与之相关的数据文件,通常情况下不只一个,有很多.数据在数据文件中是如何组织的?要了解这些内容我们首先必须理解什么是表空间(tablespace).段(segment).区(extent).块(block),这些都是oracle数据库在数据文件中组织数据的基本单元.现在我们来理解这些概念. 块是数据存储的物理单位,也是数据文件中最基础的单位,数据直接存储在块上.是oracle空间分配的最小单位.oracle中的块大

oracle中的表空间(tablespace)、方案(schema)、段(segment)、区(extent)、块(block)

数据文件和日志文件是数据库中最重要的文件.它们是数据存储的地方.每个数据库至少有一个与之相关的数据文件,通常情况下不只一个,有很多.数据在数据文件中是如何组织的?要了解这些内容我们首先必须理解什么是表空间(tablespace).段(segment).区(extent).块(block),这些都是oracle数据库在数据文件中组织数据的基本单元.现在我们来理解这些概念.     块是数据存储的物理单位,也是数据文件中最基础的单位,数据直接存储在块上.是oracle空间分配的最小单位.oracle

oracle的表如何跨表空间存储

oracle的一个表所在表空间,空间已经占满,其他表空间有剩余空间.实现表存在另外的表空间. 方案一:利用原表重建分区表 1:原表temp,存在字段id,time; 2:temp存在纪录; 3:根据原表temp创建新的分区表temp_new CREATE TABLE temp_new (ID, TIME) PARTITION BY RANGE (TIME) ( PARTITION P1 VALUES LESS THAN (TO_DATE('2004-7-1', 'YYYY-MM-DD')) TA

[转]Oracle DB 执行表空间时间点恢复

• 列出在执行表空间时间点恢复(TSPITR) 时会发生的操作 • 阐释TSPITR 使用的术语的定义 • 确定适合将TSPITR 用作解决方案的情况 • 确定时间点恢复的正确目标时间 • 确定不能使用TSPITR 的情况以及解决方法 • 执行自动TSPITR 表空间时间点恢复(TSPITR):概念 • 通过执行TSPITR 可将一个或多个表空间快速恢复到以前的某个时间. • 执行TSPITR 不会影响数据库中其它表空间或对象的状态. 使用RMAN 自动表空间时间点恢复(TSPITR) 可将Or

interview:about Oracle表空间

Oracle表空间 SQL Server数据库与Oracle数据库之间最大的区别要属表空间设计.Oracle数据库开创性地提出了表空间的设计理念,这为Oracle数据库的高性能做出了不可磨灭的贡献.可以这么说,Oracle中很多优化都是基于表空间的设计理念而实现的. 1概述 Oracle表空间之基本概念 ORACLE数据库被划分成称作为表空间的逻辑区域——形成ORACLE数据库的逻辑结构.一个ORACLE数据库能够有一个或多个表空间,而一个表空间则对应着一个或多个物理的数据库文件. 表空间是OR

数据库逻辑存储结构管理(5)-存储-表空间段区块

查看表空间信息SELECT * FROM V$TABLESPACE 查看表空间数据文件路径信息SELECT * FROM DBA_DATA_FILES; 查看表空间的属性信息SELECT * FROM DBA_TABLESPACES 查看表空间组及其所属的表空间的信息SELECT * FROM DBA_TABLESPACE_GROUPS查看表空间里面的表的组成SELECT SEGMENT_NAME,SEGMENT_TYPE,TABLESPACE_NAME FROM DBA_SEGMENTS WH