[待整理]oracle10g刪除(釋放)資料檔案/表空間流程
1.獲取開啟
select 'alter table ' || owner || '.'|| table_name || ' enable row movement; ' from dba_tables where tablespace_name='USERS';
select 'alter table ' || owner || '.'|| table_name || ' shrink space CASCADE; ' from dba_tables where tablespace_name='USERS';
oracle刪除(釋放)資料檔案/表空間流程
生產環境:資料庫裡空間不足,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再刪除資料檔案
alter database datafile '/home/oracle/app/oracle/oradata/kfdb/niptest1' 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系統空間情況 --- 表空間釋放
------建立表空間的語句:
create tablespace niptest datafile '/home/oracle/app/oracle/oradata/kfdb/niptest1' size 10G autoextend on next XXM maxsize XXm extent management local;
有的人會想著再建立一個niptest 為10G的表空間,避免後期imp時源表的表空間是niptest
: 其實不需要,如果庫中沒有niptest表空間,就算imp源表的表空間是niptest,也會匯入到使用者的預設表空間,有niptest表空間的話則會匯入到niptest表空間(如果後續不想擁有niptest表空間 就要斬草除根的將niptest刪除之後不要建立)
回收unlimited tablespace 給予額外許可權niptest表空間許可權會正常匯入,否則報錯
額外許可權和使用者預設表空間是一個的話可以正常匯入,否則知道表結構到使用者預設表空間
select 'alter table ' || owner || '.'|| table_name || ' enable row movement; ' from dba_tables where tablespace_name='USERS';
select 'alter table ' || owner || '.'|| table_name || ' shrink space CASCADE; ' from dba_tables where tablespace_name='USERS';
oracle刪除(釋放)資料檔案/表空間流程
生產環境:資料庫裡空間不足,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再刪除資料檔案
alter database datafile '/home/oracle/app/oracle/oradata/kfdb/niptest1' 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系統空間情況 --- 表空間釋放
------建立表空間的語句:
create tablespace niptest datafile '/home/oracle/app/oracle/oradata/kfdb/niptest1' size 10G autoextend on next XXM maxsize XXm extent management local;
有的人會想著再建立一個niptest 為10G的表空間,避免後期imp時源表的表空間是niptest
: 其實不需要,如果庫中沒有niptest表空間,就算imp源表的表空間是niptest,也會匯入到使用者的預設表空間,有niptest表空間的話則會匯入到niptest表空間(如果後續不想擁有niptest表空間 就要斬草除根的將niptest刪除之後不要建立)
回收unlimited tablespace 給予額外許可權niptest表空間許可權會正常匯入,否則報錯
額外許可權和使用者預設表空間是一個的話可以正常匯入,否則知道表結構到使用者預設表空間
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22558114/viewspace-2151701/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux檔案刪除空間未釋放Linux
- RM刪除檔案空間釋放詳解
- MySQL 5.7的表刪除資料後的磁碟空間釋放MySql
- Oracle10g刪除資料檔案Oracle
- Linux檔案刪除但空間不釋放問題篇Linux
- 處理Linux刪除檔案後空間未釋放的問題Linux
- (轉載)刪除檔案後硬碟空間不釋放的問題硬碟
- Mysql InnoDB刪除資料後釋放磁碟空間的方法MySql
- linux中如何解決檔案已刪除但空間不釋放的案例Linux
- oracle建立臨時表空間和資料表空間以及刪除Oracle
- 解決刪除檔案後 WSL2 磁碟空間不釋放的問題
- Oracle 刪除使用者、表空間、資料檔案、使用者下的所有表Oracle
- Tablespace表空間刪除
- 表空間和資料檔案的管理
- 刪除臨時表空間組
- oracle 普通表空間資料檔案壞塊Oracle
- 表空間(資料檔案shrink)收縮示例
- oracle級聯刪除使用者,刪除表空間Oracle
- 新建的表空間(或資料檔案)丟失以及控制檔案丟失,有新建表空間(或資料檔案)前的控制文
- Oracle資料庫高水位釋放——LOB欄位空間釋放Oracle資料庫
- MySQL InnoDB系統表空間資料檔案配置MySql
- 面試官給我挖坑:rm刪除檔案之後,空間就被釋放了嗎?面試
- MySQL---資料刪除之後表檔案不變MySql
- 2.5.9 在資料庫建立期間支援大檔案表空間資料庫
- Oracle臨時表空間檢視、新增臨時表空間資料檔案、修改預設臨時表空間 方法!Oracle
- 2.5.4 為 SYSAUX 表空間指定資料檔案屬性UX
- PostgreSQL在不同的表空間移動資料檔案SQL
- 表空間與資料檔案的offline和online操作
- SQLServer如何釋放tempdb臨時表空間SQLServer
- 如何釋放Mac空間?釋放Mac系統空間小技巧Mac
- Oracle 表空間增加檔案Oracle
- oracle徹底刪除資料檔案Oracle
- Oracle案例11——Oracle表空間資料庫檔案收縮Oracle資料庫
- oracle表空間的整理Oracle
- 關於丟失表空間資料檔案的處理方式
- MySQL 磁碟空間滿導致表空間相關資料檔案損壞故障處理MySql
- 達夢資料庫系統表空間資料檔案遷移過程資料庫
- MySQL刪除資料表MySql