Oracle
平衡表空間的 oracle 數據文件的大小
我有一個表空間,我必須在其中添加數據文件,因為分區已滿。新的數據文件尚未填充。我可以將數據從一個數據文件移動到另一個數據文件嗎?
如果一個表空間有多個數據文件,Oracle 會管理哪些數據進入哪個數據文件。你無法控制這一點。如果您有足夠的磁碟空間來執行此操作,我建議您進行以下數據雜耍操作:
- 使用足夠大的數據文件創建一個新表空間,以容納源表空間的所有數據。
- 將所有表、索引和其他對象移動到這個新表空間。
- 根據需要調整舊表空間的數據文件的大小。
- 將所有表、索引和其他對象移回調整大小的表空間。
- 重建所有索引
- 刪除您創建的臨時表空間。
邊注。如果您在數據文件上使用了 MAXSIZE,那麼您現在可能不會遇到這種情況…我傾向於將 MAXSIZE 設置為保守的大小,因為我寧願用完數據文件大小,也不願用完磁碟空間…
一些幫助你前進的工具
創建 DML 語句以移動您的表
select distinct 'ALTER TABLE ' || owner || '.' || segment_name || ' MOVE TABLESPACE target_tablespace;' from dba_segments where tablespace_name = 'old_tablespace' and segment_type = 'TABLE';
創建 DML 語句以移動索引
select distinct 'ALTER INDEX ' || owner || '.' || index_name || ' REBUILD TABLESPACE target_tablespace;' from dba_indexes where tablespace_name = 'old_tablespace' and index_type != 'LOB';
調整數據文件的大小
ALTER DATABASE DATAFILE 'D:\ORADATA\file.DBF' RESIZE xxxMB MAXSIZE xxxMB;
重建索引
ALTER INDEX <SCHEMA>.<INDEX> REBUILD;