首先要知道本地管理表空間和字典管理表空間的區(qū)別。
字典管理表空間每當表或其他對象需要擴大的時候都檢查其數(shù)據(jù)字典以確保有可用的空間分配給對象,然后給對象分配一個新區(qū)段并更新其可用空間信息。
本地管理表空間保存數(shù)據(jù)文件本身的空間管理信息,而且表空間自動跟蹤每個數(shù)據(jù)文件塊的可用或已用狀態(tài)。
在事務比較多的數(shù)據(jù)庫中顯然字典管理每次插入數(shù)據(jù)時都會檢查數(shù)據(jù)字典,這就使得數(shù)據(jù)庫性能有所損耗。
轉換:
第一種方法---命令方式轉移。
首先你要新建一個oracle表空間,在oracle 10g以后默認都是采用本地管理表空間的。
對于表空間的轉移使用命令
ALTER TABLE temp MOVE TABLESPACE new_temp;
對于索引你需要重建
ALTER TABLE index REBUILD TABLESPACE new_index;
或許你可以采用oracle提供的PL/SQL數(shù)據(jù)包中的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建議你,采用第一種方法.