oracle刪除資料釋放表空間流程

2021-10-23 07:24:54 字數 3025 閱讀 4034

生產環境:資料庫裡空間不足,niptest 表空間251g,只使用了17g

再alter database datafile '...../niptest1' resize 10g; 的時候說超出了範圍要求 

由於表變動比較頻繁,高水位值比較大

(高水位 hwm 「high water mark 「:oracle中block有沒有使用的分界線,它會隨著資料的insert而上公升,但它並不會隨資料的delete而下降,因此全表掃瞄的時間並不因資料的delete而減少,相反可能由於塊清除反而全表掃瞄時間增加)

刪除表空間步驟:

1)  批量將niptest表空間中的表move 到users表空間,再刪除表空間niptest

首先看下此表空間內的表  move到其他表空間  防止資料丟失

select * from dba_tables where tablespace_name='niptest';

select * from dba_extents where tablespace_name='niptest';

select * from dba_segments where tablespace_name='niptest';

select 'alter table '||owner||'.'||table_name||' move tablespace users;' from dba_tables where tablespace_name='niptest'; 批量把錶移動到其他表空間

******move(降低高水位)

優點:可以移動表到其他表空間,在執行命令時不需要執行alter table table_name enable row movement

缺點:表move 會導致表中的索引失效,要rebuild;同時表會產生行級鎖......;在此如果表中有lob欄位 時要用一下命令來實現表空間移動:alter table owner.table_name move tablespace tablespace_name lob (lob_column) store as lob segment  tablespace tablespace_name;也可以單獨move lob,index要rebuild

******shrink space

優點:降低高水位時索引不會失效

缺點:不能將表移動到其他表空間;高水位降低效果沒有move明顯;同時在執行命令前要先執行(alter table table_name enable row movement允許行移動)也會表會產生行級鎖.......,shrink比move更耗費cpu,產生很多current block這樣生成巨大的redo與undo 如果表中索引很少可以建議使用move降低高水位

2) 移動完表發現 主鍵和索引還是在源表空間

select * from dba_extents where tablespace_name='users';   -->檢視原表空間的主鍵和索引

alter index xx rebuild tablespace ;

---> 批量執行索引重建

select 'alter index  '||owner||'.'||segment_name||' rebuild tablespace users;' from dba_extents where tablespace_name='niptest';   批量將主鍵索引重建到其他表空間

select * from dba_segments where tablespace_name='niptest';弄完上面的操作,這裡還有資料,不要在意,那是**站的,無需修改直接刪表空間即清空

(3) 表都移動完了  之後 先把資料檔案offline drop再刪除資料檔案

---> 檢視下資料檔案狀態

select status from dba_tablespaces v$datafile where tablespace_name='niptest'; -----offline

--> 再刪除表空間

drop tablespace niptest; --> 刪除表空間,但不刪除其檔案

drop tablespace niptest including contents; -->刪除表空間同時刪除表空間的資料物件

drop tablespace niptest including contents and datafiles; 

--> 刪除表空間時刪除資料物件及其os系統檔案一起刪除,,以便釋放空間,前提表空間不能是資料庫預設表空間

否則會 報錯:ora-12919: can not drop the default permanent tablespace

(4) 怎麼檢視下資料庫的預設表空間是什麼:

select * from database_properties where property_name = 'default_permanent_tablespace';  

如果您刪除的表空間是資料庫預設表空間要用一下命令來

更換資料庫預設表空間:alter database default tablespace users;

再執行: drop tablespace niptest including contents and datafiles;  

[root@kfdb49 kfdb]# df -hl  --> 看下os系統空間情況  --- 表空間釋放

有的人會想著再建立乙個niptest 為10g的表空間,避免後期imp時源表的表空間是niptest

: 其實不需要,如果庫中沒有niptest表空間,就算imp源表的表空間是niptest,也會匯入到使用者的預設表空間,有niptest表空間的話則會匯入到niptest表空間(如果後續不想擁有niptest表空間 就要斬草除根的將niptest刪除之後不要建立)

**unlimited tablespace 給予額外許可權niptest表空間許可權會正常匯入,否則報錯

額外許可權和使用者預設表空間是乙個的話可以正常匯入,否則知道表結構到使用者預設表空間

刪除Oracle表空間,釋放硬碟空間

1.查詢使用者和表空間 select username,default tablespace from dba users 2.刪除表空間 2.1可以先將其offline alter tablespace xx offline 例 alter tablespace eas d kdqhms stan...

MYSQL資料刪除資料,物理空間沒釋放

當您的庫中刪除了大量的資料後,您可能會發現資料檔案尺寸並沒有減小。這是因為刪除操作後在資料檔案中留下碎片所致。optimize table 是指對錶進行優化。如果已經刪除了表的一大部分資料,或者如果已經對含有可變長度行的表 含有 varchar blob 或 text 列的表 進行了很多更改,就應該...

MYSQL資料刪除資料,物理空間沒釋放

當您的庫中刪除了大量的資料後,您可能會發現資料檔案尺寸並沒有減小。這是因為刪除操作後在資料檔案中留下碎片所致。optimize table 是指對錶進行優化。如果已經刪除了表的一大部分資料,或者如果已經對含有可變長度行的表 含有 varchar blob 或 text 列的表 進行了很多更改,就應該...