Oracle

平衡表空間的 oracle 數據文件的大小

  • November 4, 2016

我有一個表空間,我必須在其中添加數據文件,因為分區已滿。新的數據文件尚未填充。我可以將數據從一個數據文件移動到另一個數據文件嗎?

如果一個表空間有多個數據文件,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;

引用自:https://dba.stackexchange.com/questions/154250