關於ORACLE清理表空間總結

2021-08-17 06:24:30 字數 1659 閱讀 4373



--1.檢視索引和表的初始大小

select bytes/1024/1024 ||'m' table_size ,u.* from dba_segments u

where u.owner in ('clear','trade','inte***ce','security')

order by 1 desc

--2. 通過上面語句找到占用空間較大的表,刪除表記錄

delete

from clear.tc_syscfee_inquire_fee_detail t

where t.trade_date <'20180101';

--3.消除行遷移,清除空間碎片,刪除空閒空間,實現縮小所佔的空間

alter table clear.tc_syscfee_inquire_fee_detail move

/*因為alter table jk_test move 是通過消除行遷移,清除空間碎片,刪除空閒空間,實現縮小所佔的空間,但會導致此表上的索引無效(因為rowid變了,無法找到),

所以執行 move 就需要重建索引。

找到表對應的索引。

select index_name,table_name,tablespace_name,index_type,status  from dba_indexes  where table_owner='scott' ;

根據status 的值,重建無效的就行了。

sql='alter index '||index_name||' rebuild'; 使用儲存過程執行。

還要注意alter table move過程中會產生鎖,應該避免在業務高峰期操作!*/

--4.刪除主鍵

alter table clear.tc_syscfee_inquire_fee_detail drop primary key drop index;

--5.重新建主鍵

alter table clear.tc_syscfee_inquire_fee_detail

add constraint pk_syscfee_inquire_fee_detail primary key (trade_date, seq_no);

--6.原建表初始化大小為10m,每次增加5m,會造成空間浪費,例如只要往表中插入一條資料,就會占用10m的空間

--故修改設定 表和索引 initial初始化大小為1m,之後每次增加1m。

select 'alter table '||owner||'.'||table_name||' move tablespace '||tablespace_name||' storage(initial 1m next 1m);'  

from dba_tables  

where owner='clear' ;

select 'alter index '||owner||'.'||index_name||' rebuild storage(initial 1m next 1m);'  

from dba_indexes  

where owner='clear'

--重建索引

select 'alter index clear.' || t.index_name ||' rebuild;' from dba_indexes t where t.owner ='clear';

oracle測試環境表空間清理

測試場景下,使用的oralce遇到表空間的占用超大,可以採用如下的方式進行空間的清理 首先使用sqlplus連線資料庫 sqlplus sys password orcl as sysdba 之類進行資料庫的連線沒然後進行如下的操作 建立表空間 對於自己的測試庫和表等最好都建立自己的表空間,以方便清...

oracle測試環境表空間清理

測試場景下,使用的oralce遇到表空間的占用超大,可以採用如下的方式進行空間的清理 首先使用sqlplus連線資料庫 sqlplus sys password orcl as sysdba 之類進行資料庫的連線沒然後進行如下的操作 建立表空間 對於自己的測試庫和表等最好都建立自己的表空間,以方便清...

清理表空間

1 清理表 truncate table 2 重建temp表空間 create temporary tablespace temp1 tempfile d oracle product 10.2.0 oradata xgp3 temp02.dbf size 512m reuse autoextend...