首先要知道本地管理表空間和字典管理表空間的區別。
字典管理表空間每當表或其他對象需要擴大的時候都檢查其數據字典以確保有可用的空間分配給對象,然后給對象分配一個新區段并更新其可用空間信息。
本地管理表空間保存數據文件本身的空間管理信息,而且表空間自動跟蹤每個數據文件塊的可用或已用狀態。
在事務比較多的數據庫中顯然字典管理每次插入數據時都會檢查數據字典,這就使得數據庫性能有所損耗。
轉換:
第一種方法---命令方式轉移。
首先你要新建一個oracle表空間,在oracle 10g以后默認都是采用本地管理表空間的。
對于表空間的轉移使用命令
ALTER TABLE temp MOVE TABLESPACE new_temp;
對于索引你需要重建
ALTER TABLE index REBUILD TABLESPACE new_index;
或許你可以采用oracle提供的PL/SQL數據包中的DBMS_SPACE_ADMIN。
顯然上面的方法并不適用于對system表進行轉換,因為你不能建立2個同名的system表。
在轉換system表前,你必須把所有的其他表空間轉換為本地管理。
EXECUTE dbms_space_admin.tablespace_migrate_to_local("tablespace"); ---轉行表空間
然后同樣的方法將system表空間也進行轉換.
EXECUTE dbms_space_admin.tablespace_migrate_to_local("system");
使用這種方法很好,但是它建立的表空間沒有automatic segment space managerment選項,所有字典管理表空間都是用默認手動段空間管理,而且在轉換為本地管理的表空間是不能進行修改.
還有一個缺點,就是表空間如果存在空間碎片的話,此方法也不能解決碎片問題.
所以oracle建議你,采用第一種方法.