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' ;
Hiç yorum yok:
Yorum Gönder