清理Oracle历史数据的准备工作

本文介绍了一种方法,通过清理现网两个项目数据库的历史数据,并整理应用中的表段使用情况,包括创建临时表、执行SQL查询、统计表大小和数量等操作,最终展示各表的详细信息,帮助开发者优化数据库管理和资源利用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

客户要求近期对现网的2个项目的数据库中的历史数据进行清理,于是整理了下应用中的段使用情况,主要是看表段情况,使用的脚本如下。

create or replace procedure get_tab_rows
as
--Drop Table tabsrow
--Create Global Temporary Table tabsrow (Name Varchar2(30),Rowsnum Number) On Commit Delete Rows;
--Create Table tabsrow (Name Varchar2(30),Rowsnum Number) ;
V_SQL Varchar2(300);
Begin
Execute Immediate 'truncate table tabsrow';
For x In (Select OWNER,table_name From dba_tables Where owner='XXX' and table_name<>'test') Loop
V_SQL:='insert into tabsrow Select '''||x.table_name||''' ,Count(1) From '||X.OWNER||'.'||x.table_name;
Execute Immediate V_SQL;
End Loop;
commit;
End;
/
exec get_tab_rows;
Select a.Owner,
a.Table_Name,
--b.Segment_Name,
a.Tablespace_Name,
b.Bytes/1024/1024 as "size(Mb)",e.rowsnum,
--b.Blocks,
--c.Table_Name,
c.Partitioning_Type,
d.column_name
From Dba_Tables a
Left Join (Select b.Segment_Name, Sum(b.Bytes) Bytes, Sum(b.Blocks) Blocks
From Dba_Segments b
WHERE B.OWNER = 'XXX'
AND B.segment_type NOT IN ('INDEX')
Group By b.Segment_Name) B on a.Table_Name = b.Segment_Name
Left Join Dba_Part_Tables c On a.Table_Name = c.Table_Name
left join Dba_Part_Key_Columns d on d.owner = 'XXX'
and a.table_name = d.name
left join tabsrow e on a.table_name=e.name
Where a.Owner = 'XXX' order by "size(Mb)" desc;
drop procedure get_tab_rows;
Drop Table tabsrow;

-The End-


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值