System Tablepsace’ inin Altına Oluşturulmuş Olan Objelerin Taşınması

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.
Continue reading

Tablo ve Indexlerin Taşınması

Kullandığımız sistem içerisinde özelliklede kullanıcıların yoğun olduğu sistemlerde zaman zaman bazı tablo ve buna indexlerin yanlış tablespace’ lerde create edildiğini görürüz. System tablespace’ i buna iyi bir örnek olabilir aslında,

select * from dba_segments

where tablespace_name = ‘SYSTEM’

and owner not in  (‘SYS’,’SYSTEM’)

yukarıdaki scriptle system tablespace’ inde nesnesi bulunan userları tespit edebilirsiniz.  Aslında system tablespace’ inde sys ve system dışında hiçbir userın nesnesinin olmaması gerekiyor. Örneğin, transportable tablespace yöntemi ile bir taşıma yapmadan önce taşınacak tablespace’ in database deki diğer tablespace lerle olan ilişkilerini çıkartıyoruz. Burdaki iş kurallarından biri hiçbir tablespace’ in system tablespace’ i ile ilişkisinin olmaması gerekiyor. Eğer bu tarz bir durumla karşılaşırsanız öncelikle bu objeleri taşımanız gerekecektir.

Peki bunları nasıl taşıyacağız. Aslında bunun birkaç yolu var, ben en kolayı olanından bahsetmek istiyorum. Aşağıdaki ilk komut ile istediğiniz tabloların tablespace’ lerini değiştirebilirsiniz. Ancak bu işlemi yaptıkdan sonra tabloların üzerlerindeki indexler bozulacağından onlarında rebulid edilmesi gerekecektir. Onun içinde ikinci scripti kullanabilirsiniz.

— tabloları taşımak için ;

SELECT ‘ALTER TABLE ‘ || OBJECT_NAME ||’ MOVE TABLESPACE ‘||’ tasinacak_tablespace ;’

FROM ALL_OBJECTS

WHERE OWNER = ‘tasinacak_user’

AND OBJECT_TYPE = ‘TABLE’ ;

— indexleri rebuild etmek için

SELECT ‘ALTER INDEX ‘||INDEX_NAME||’ REBUILD TABLESPACE tasinacak_tablespace ;’ FROM ALL_INDEXES

WHERE OWNER = ‘tasinacak_user’ ;

Bu tarz durumları düşmemek için kullandığınız systemlerde var olan userların default tablespace’ lerini kontrol etmeniz sizin yararınıza olacaktır. Çünkü default tablespace’ iniz ne ise oluşturacağınız tüm nesnelerde o tablespace üzerinde oluşacaktır.

— Kullanıcıların default tablespace’ lerini kontrol etmek için ;

SELECT username, account_status, default_tablespace  FROM dba_users

WHERE account_status = ‘OPEN’

— Kullanıcıların default tablespace’ lerini değiştirmek için ;

ALTER USER test_user DEFAULT TABLESPACE  USERS;