SQL Server Database Logu Temizleme

Az önce veritabanımda çalışmalar yapıyordum ki veritabanı logunu 1.5 GB olduğunu farkettim. Şöyle pratik bir yol varmış bu logdan kurtulmak için.

backup log [Database_Adi] with truncate_only
dbcc shrinkfile(Database_Log_Dosyasi_Adi) 

İşlemin sonuçlarını bana sormayın, önce yedeğinizi alın sonra test edin ama tüm datalar commit edildiyse sorun çıkmaması gerekiyor.

Yorumlarda sağolsun Ada olayını detayını bildirdi, şu şekilde daha iyiymiş, Direk onun açıklamasını yazıyorum:

BACKUP LOG'u NO_LOG veya TRUNCATE_ONLY seçenekleri ile kullanmak log'un inactive olan kisimlarini keser; ama bu pek önerilmez; çünkü database kurtarma islemlerini artik log'lardan yapamazsiniz, en son aldiginiz database backup'i recovery edebilirsiniz.
Bunun yerine
DBCC SHRINKDATABASE (db, NOTRUNCATE)
DBCC SHRINKDATABASE (db, TRUNCATEONLY)
ile önce dolu alanlardan bos alanlara verileri tasiyip daha sonra da dosya sonundaki bosluklari isletim sistemine verebilirsiniz.

yufi - 21.12.2009

peki mysql database yedegini almak için hangi yolu izlememiz gerekir?

Solaris - 06.04.2008

Merhaba,
MySql veritabani üzerinde bulunan bir tabloyu nasil onarabilirim? "Repair" yapmak sorunumu anlik olarak çözüyor. Fakat yabanci bir forumda israrla "REPAIR" yap deniliyor. Ingilizcem yeterli olmadigi için tam olarak anlasamiyorum ama tabloyu onarmamin sorunu çözecegini söylüyor. MyAdmin üzerinden ne gibi bir onarim yapilabilir. Dedigim gibi menüde bulunan "Tabloyu Onar" seçenegi sorunumu sadece anlik olarak çözüyor.

TEAkolik - 05.04.2008

Konu : SQL Veritabani büyüklügü
Sorun : Database transaction Log dosyalari çok büyüdü. (Bilgisayarci dilinde buna DB sismesi deriz )

Çalistigim sirkette Önceden LKS kullanmaktaydik. Gerçi Yeni programina geçis konusunda ERP projemizi henüz bitirmedik hala bu süreçte LKS devam ediyor. Yeni programa geçtigimiz zaman böyle seylerle açikcasi karsilasmak istemiyorum:) Neyse konuyu fazla dagitmadan devam edeyim. LKS kullanirken daha önceden bu tip bir sorunla karsilastigimi hatirliyorum. En son olarak sirketimizin 5 yillik LKS sürecindeki LKSDB_TEA database dosyasinin büyüklügü suan itibaren 2.24 GB 'i buldu. Simdi bir veritabani için orta ölçekli sirketlerde 2 GB gerçektende büyük bir rakam diyebilirim. Bir muhasebe programi için 2GB bence sikinti çikartir ki önceki tecrübelerimde bunu çok yasadim.

Öncelikle Bir (Veri tabani Transaction Log) SQL Database'si neden 1GB 'in üzerine çikar ?

Transaction Logs (Islem Günlükleri)

SQL her bir transavtion log için birden fazla sanal dosya hafizada tutar Aslinda bu dosyalarin yani islem günlügünün sayisini ve boyutunu SQL Server dinamik olarak belirler. SQL Server Databasenize uyguladiginiz Delete, insert gibi komutlarinizi DB güvenligi için bir dosyaya yazar ve RECOVERY yani kurtarma dedigimiz islev için saklar. Tabiki yapisi geregi SQL Server bu kayitlari minimum sayida ve en az boyutta tutar. Fakat her olusan dosya hafizada yer kaplar ve ne kadar fazla sayida olursa o kadar büyüme saglanir. Log dosyasi olusturdugumuzda ise otomatik büyüme ayari varsayilan olarak gelir. Herbir database log dosyasi bir database için kullanilir.

Transaction loglar ile veritabaninizda gerçeklesen olaylar tutulur.

NOTLAR :

Unrestricted file growth: Büyümeyi sinirlandirmamak için kullandigimiz ayar. Bir büyüklük degeri belirtilmez ise, dosyalar disk dolana kadar büyür. Sisme gerçeklesir.
SERVER ( Ana makina ) Faktörü

Genelde Databaseler ( Veritabani ) SQL Server kurulu Anamakinalardadir. Ana makina yani Server'ler Veritabani kullanicilari için en önemli faktörlerden birisidir. LKS gibi bir programda bir kullanici islem yaptigi zaman Server 'e sürekli SQL sorgulari atilir bilgi yazilir veyahut kayit düzenleme gibi komutlar islenir. Bu sirada gönderilen komutlar direkt olarak bu LOG dosyalarina yazilir. Bu süreç sonunda kullanima ve kullanicilarin islemlerine bagli olarak Server 'de asiri Sisme dedigimiz olay meydana gelir.

Asiri sisme yani Database Log dosyalarinin büyümesi sonucunda Ana makinamizda LAG ( Bekleme süresi ) artmaya baslar ve sisteminizde yavaslama söz konusu olmaya baslar. Iyi bir Network 'e bile sahip olsaniz yinede LOG dosyalarinin sismesi ile Programiniz yavaslamaya baslayabilir.

Server 'de log dosyalari fiziksel olarak sabit diskte fiziksel olarak kalir. Birden falza parça halinde olabilirler. Eger log kayitlari ara sira silinmezse yani SQL Server'inize bakim yapilmazsa mantiksal log dosyasi fiziksel disk boyutu bitene kadar büyür. Kisacasi harddiskinizde ne kadar bos yer varsa o kadar büyür taki diskte yer kalmayana kadar. Yeni mantiksal log dosyasi kayitlari için eskilerinin silinmesi gerekliligi ortaya çikar.

Log dosyalari nasil silinir ? SQL de ne yapmam gerekir ?

Bunu bir örnekle açiklayalim. Varsayalim ki LKS kullaniyorsunuz ve Database 1GB 'in üzerine çikti.

ILK Önce DATABASE'nin bir yedegini aliniz. Daha sonra asagidaki komutlari SQL Query 'e ister VTyönetten istersenizde SQL den Run yaparak yazip F5 ile komutu çalistiralim.

DB 'yi baska bir yere yedek alalim ki bu islem sirasinda bisi olursa DATABASE'ye orjinal haline geri dönmek mümkün olabilsin.

DBCC SHRINKDATABASE (LKSDB_TEA,10)
DBCC SHRINKFILE (LKSDB_TEA_log, 10)

Üstteki komutlari uyguladiktan sonra sisteminizde SQL database içerisindeki bu log dosyalarini düzenlemeye baslar.

Veritabaniniz 1 GB 'in üzerindeyse biraz fazla beklemeniz gerekebilir. Çünkü ne kadar fazla yer kapliyorsa o kadar fazla islem yapmamiz gerekecektir.

Ferruh Mavituna - 04.04.2008

Aciklama icin tesekkurler, yaziyi da guncelledim ki daha sonradan bulanlarin bir isine yarasin.

Ada - 04.04.2008

BACKUP LOG'u NO_LOG veya TRUNCATE_ONLY seçenekleri ile kullanmak log'un inactive olan kisimlarini keser; ama bu pek önerilmez; çünkü database kurtarma islemlerini artik log'lardan yapamazsiniz, en son aldiginiz database backup'i recovery edebilirsiniz.
Bunun yerine
DBCC SHRINKDATABASE (db, NOTRUNCATE)
DBCC SHRINKDATABASE (db, TRUNCATEONLY)
ile önce dolu alanlardan bos alanlara verileri tasiyip daha sonra da dosya sonundaki bosluklari isletim sistemine verebilirsiniz.

Yorum Yazın


Tüm yorumlar onaydan geçmektedir, bu işlem en uzun 30 dk. sürecektir. E-mail adresleri yeni yorumları bildirme harici hiç bir başka amaçla kullanılmamaktadır ve sitede gözükmemektedir.



Captcha Kodu