一、查詢資料庫表空間使用率
注:文章中星號不顯示,如果有報錯右括號丟失,自己加上這兩個位置
二、查詢表空間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 t_tab1 group by substr(tran_dt,1,6) order by 1;
備份exp test@test file=/aas/database_bak/t_tab1.dmp tables=t_tab1 log=/aas/database_bak/t_tab1.log
清理:truncate table t_tab1;
分割槽表:
備份:exp test@test file=/aas/database_bak/test1.dmp tables=test1 query=\"where tran_dt>='20190101'\" log=/aas/database_bak/test1.log statistics=none direct=y compress=n indexes=n constraints=n
清理:alter table test1 truncate partition m20181201;
alter table test1 truncate partition m20190101 update global indexes;
檢視索引是否失效:
select index_name,table_name,tablespace_name,status from dba_indexes where table_name='test1';
按照條件進行備份和清理:
備份:exp test@test file=/aas/database_bak/test2.dmp tables=test2 query=\"where tran_dt
清理:delete from test2 where tran_dt <20180101;
三種備份清理方法:面對非分割槽表、分割槽表、條件備份
檢視索引是否失效:
select index_name,table_name,tablespace_name,status from dba_indexes where table_name='test2';
四、清理t_tab1表資料(201611—201703)
1、查詢資料記錄數
select count(*) from t_tab1 partition (m20170101) ;--3800371
2、truncate分割槽表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;
七、收集統計資訊,資料匯入完成以後,表統計資訊還沒有執行,手動執行統計資訊收集
begin
dbms_stats.gather_table_stats
(ownname => 'test',
tabname => 'test1',
estimate_percent => dbms_stats.auto_sample_size,
method_opt => 'for all columns size repeat',
degree => 8,
cascade => true);
end;
/begin
dbms_stats.gather_table_stats
(ownname => 'test',
tabname => 'test2',
estimate_percent => dbms_stats.auto_sample_size,
method_opt => 'for all columns size repeat',
degree => 8,
cascade => true);
end;
/以上是非常簡便的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使用者下的表.
將表遷移到其他表空間的命令
alter test1 move tablespace table_space;
重建索引
alter index test1_px rebuild online tablespace space_index;
delete之後,快速清理表佔據的磁碟空間!
收縮innodb儲存引擎表的空間大小 delete 了6000w日誌表記錄,但是表佔據的檔案大小一直沒有變化。後來,找到一招 alter table x engine innodb 搞定,而且速度很很快。mysql alter table order action engine innodb que...
delete之後,快速清理表佔據的磁碟空間!
收縮innodb儲存引擎表的空間大小 delete 了6000w日誌表記錄,但是表佔據的檔案大小一直沒有變化。後來,找到一招 alter table x engine innodb 搞定,而且速度很很快。mysql alter table order action engine innodb que...
Oracle表空間大小查詢和清理
統計表空間 select tablespace name 表空間,to char round bytes 1024,2 99990.00 實有,to char round free 1024,2 99990.00 g 現有,to char round bytes free 1024,2 99990....