Oracle 11g Boş Tabloların Import/Export Edilmesi Problemi
Oracle 11gR2 üzerinde veritabanımın yedeğini alıp farklı bir sunucuya test amaçlı olarak yeniden kurmam gerektiğinde verileri standart yöntemlerle IMPORT yapmıştım ama kullandığım yazılımda veritabanı hatası alıyordum. Bunun sonucunda yapılan SQL sorgu hareketlerini izlemeye başladım ve bana gerekli olan fakat içeriği boş olan tabloların aktarılmadığını farkettim.
Bu aktarım sorunu acaba benden mi kaynaklanıyor diye tekrar tekrar kur kaldır yaparak veritabanını aktarmayı denedim fakat asıl sorunun benden kaynaklı olmadığını farkettiğimde test sunucusundaki veritabanını sanırım 8 ya da 9. sefer yeniden kurmuştum.
Çünkü Oracle 11gR2 kurulduğunda alınan yedeklerin fazla yer tutmaması için olsa gerek tablespace üzerinde yer tutmayan boş tablolar yedeğin içine alınmıyormuş!
Peki ama bu özellik yazılımlarımıza dair bir sorun teşkil ediyorsa bunu nasıl aşmalıyız?
Aslında yapılması gereken sunucu kurulduğunda default olarak TRUE tanımı barındıran DEFERRED_SEGMENT_CREATION
alter system set DEFERRED_SEGMENT_CREATION=FALSE scope=both;
tanımının yapılması gerekir. Bu sayede işlem sonrasında oluşturulan her boş tablo için bu özellik sağlanmış olur. Peki ama ya önceden oluşturulmuş bir şemanın altındaki tablolarda bu işlemi yapmamız gerekiyorsa?
O zaman da;
select 'ALTER TABLE '|| OWNER || '.' || TABLE_NAME ||' ALLOCATE EXTENT;' from all_tables where owner='<ilgili şema>'
veya
select 'ALTER TABLE '|| OWNER || '.' || TABLE_NAME ||' ALLOCATE EXTENT;' from all_tables where tablespace_name='USERS'
komutu çalıştırılarak ilgili şemanın yada tablespace altındaki tüm tablo verileri ve bunlara ait ALTER TABLE komut dizesi oluşturulur.
Daha Sonra da bu oluşturulan komutları çalıştırmak suretiyle ilgili şema altındaki boş tablolarında yedeklenebilmesi sağlanır.