Zaman zaman kullanıcıların default tablespace’ lerinin yanlışlıkla SYSTEM tablespace’ i olacak şekilde create edilmeleri veya obje taşımalarında tablepsace bilgisinin yanlış verilmesi gibi bir takım nedenlerden dolayı SYSTEM tablespace’ ini aslında burda olmaması gereken objelerle doldurulmuş olarak görebiliriz. Bu durumun yol açacağı problemlerle bazen upgrade’ lerde veya transportable tablespace gibi yöntemleri kullanırken karşılaşabiliriz. Dolayısıyla bu tarz durumlar da burada yer alan user objelerinin farklı bir alana taşınması gerekecektir. Bu tarz bir durumla karşılaştığımızda yapılması gerekenleri şu şekilde özetleyebiliriz.
Öncelikle systemde default tablespace’ i SYSTEM olan kullanıcıların tespit edilmesi ve bunların değiştirilmesi gerekmektedir.
Bnunun için aşağıdaki sorgudan yararlanabiliriz.
SELECT username, default_tablespace, created FROM DBA_USERS
WHERE DEFAULT_TABLESPACE = ‘SYSTEM’ and username not in (‘SYS’,’SYSTEM’)
USERNAME DEFAULT_TABLESPACE CREATED
LMS SYSTEM 06.02.2007 11:34:58
Bu kullanının default tablespace bilgisini değiştirmek için ise ;
alter user LMS default tablespace USERS
komutundan faydalanabiliriz.
Sonarsında bu kadar SYSTEM tablespace’ i içerisine oluşturulmuuş olan objeleri buradan taşımaya geldi.
Bunun içinde aşağıdaki scripten faydalanabiliriz ;
SELECT ‘ALTER TABLE ‘ || OBJECT_NAME ||’ MOVE TABLESPACE ‘||’ USERS ;’
FROM ALL_OBJECTS
WHERE OWNER = ‘LMS’
AND OBJECT_TYPE = ‘TABLE’ ;
Yukarıdaki yöntemle tabloları kendi tablespace’ lerine taşıdıkdan sonra (biz örnek olarak USERS tablespace’ ine taşımış olduk) tablolar üzerindeki indexleri rebulild etmek gerekecektir. Bunun içinde aşağıdaki scripten faydalanabiliriz.
SELECT ‘ALTER INDEX ‘||INDEX_NAME||’ REBUILD TABLESPACE USERS ;’ FROM ALL_INDEXES
WHERE OWNER = ‘LMS’ ;