Forum
Merhabalar
Öncelikle baştan söylemek isterim ki Oracle konusuna yabancıyım. Win7 işletim sistemi kullanıyorum.
Oracle veritabanı üzerinde yapmak isteyipte yapamadığım bazı işlemler var. Bunlardan bir tanesi de açık kalan indexleri kapatmak.
Normal şartlarda bu işlemi Toad üzerinden sorunsuz yapabiliyorum ama ben Dos üzerinden yapmak istiyorum.
Mesela aşağıdaki işlemi yaptığım zaman açık indexleri kapatabiliyorum.
26000 satırdan oluşan indextablosu.sql dosyasının örnek içeriği:
ALTER index ACCOUNTXXXXX_I04 REBUILD;
ALTER index ACCOUNTZZZZZ_I06 REBUILD;
ALTER index ACCOUNTCCCCC_I09 REBUILD;
Bat dosyası üzerinden verdiğim komut:
sqlplus -s xxxxxxx/yyyyyyyy @C:\indextablosu.sql
Lakin bu işlem 10 dakika gibi bir süre alıyor ve de veritabanının doluluk oranını arttırıyor. Sonrasında Oracle nin performansı artıyor mu düşüyor mu hiç denemedim.
Sadece açık indexleri (sorgulayıp) kapatabileceğim, (bat dosyası ile) yönteme ihtiyacım var.
Merhaba;
Açık olan indexleri kapatmak derken neyi yapmak istediğinizi anlamamız gerekiyor.
Ayrıca diğer bir sorum da neden sürekli indexleri rebuild etmek istediğinizdir ? Bu işlemi performans için mi yapıyorsunuz ?
Bu soruları yanıtlarmısınız ? Buna göre yardımcı olmaya çalışayım.
Teşekkürler.
Öncelikle ilginiz için teşekkür ederim.
Ne kadar anlaşılır olurum bilmiyorum ama anlatmaya çalışayım.
Birimlerimizde local oracle veritabanı kullanılmaktadır. Arkaplanda çalışan bir program vasıtası ile local veriler Genel Merkeze gönderilmektedir.(CANLI ya alınmaktadır)
Local veritabanların boyutu 11GB olup boş alan sorunumuz vardır. Merkezimiz tarafından yapılan bir program vasıtası ile eski dataları sildiriyorum. Sürekli olmasada indexler açık kalıyor, teknik adı nedir bilmiyorum, TOAD üzerinde Invalid Object olarak gözüküyor.
Son zamanlarda çok fazla veri girişi yapılmaya başlandı ve her hafta bakıma almak zorunda kalıyorum. Merkezimizin yapmış olduğu programı çalıştırıyorum yani. Haliyle de çok fazla çalıştırdığım içinde indexler sürekli açık kalıyor, Invalid e düşüyor. Bu sebeplede birimlerimizin kullandığı programı hataya düşürüyor. Şirketimiz yakın zamanda (belki de 1 yıl sonra) tamamen online sisteme geçecek ama bu zamana kadar birimlerimi çalışır durumda tutmam gerekiyor.
İndexleri rebuild etmek isteme nedenim işlem gördüklerinde bazılarının invalid e düşebiliyor olması.
Selamlar;
Konuyu anladım. Şöyle bir durum var. eğer sorgulama olmayan bir sistem ve sürekli veri girişi oluyorsa sistemde bir index olması açıkcası çok istenmez. bu durum veri girişini yavaşlatır.
Bu yüzden bu konuyu index olmadan değerlendirmenizi öneriyorum.
Diğer bir konu da sadece invalid olmuş indexlerin de rebuild edilmesi. Bu konuda herhangi bir komut yok. Ancak veritabanı programlayabilen bir yazılımcı varsa burada sadece invalid objeleri sorgulayıp bir de komut yazdırarak bu değişkenleri atar ve onları derletir bu işlemde daha kısalır.
Ancak tüm objeleri rebuild etmeniz zaman alsa da sisteme bir etkisi yoktur. Sadece alan büyür ve küçülür.
Invalid index'leri aşağıdaki komut ile sorgulayabilirsiniz.
select
index_name
from
all_indexes
where
owner not in ('SYS', 'SYSTEM')
and
status != 'VALID'
and (
status != 'N/A'
or
index_name in (
select
index_name
from
all_ind_partitions
where
status != 'USABLE'
and (
status != 'N/A'
or
index_name in (
select
index_name
from
all_ind_subpartitions
where
status != 'USABLE'
)
)
)
);
Teşekkürler
Yaptığım testlerde bu sorgu işimi görecek gibi duruyor. Çok teşekkür ediyorum.
Belki konuyu gereksiz yere canlandıracağım ama bu kod dizilimi çok işime yarıyor. Bu nedenle tekrar teşekkür etmek istedim.
Teşekkür ederim yardımlarınız için