UPDATE ve DELETE Komutlarında LOG Dosyasına Kaydettirmeme

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

UPDATE ve DELETE Komutlarında LOG Dosyasına Kaydettirmeme

Mesaj gönderen Hakan Can »

MS-SQL Server 2000/2005'te UPDATE ve DELETE işlemlerinde eski kayıtlar LOG dosyasına kaydediliyor (Veritabanı Recovery Model SIMPLE dahi olsa).

"TRUNCATE TABLE XXX" komutu ile "DELETE FROM XXX" komutu sonuçta aynı işlemi yapıyor. Ama birincisi kayıtları LOG dosyasına kaydetmiyor ikincisi ise kaydediyor.

Bu işlemi 5-10 milyon kayıtlı bir tablo için yaptığınızda birincisi 0.1 saniye sürerken ikincisi 30 dakika sürebiliyor misal.

Kendilerince haklı gerekçeleri var bunun. Sonuçta veritabanının bozulmasını engellemek vs. deniyor.

UPDATE ve DELETE komutlarında LOG dosyasına kaydettirmemenin bir imkanı var mı?

Yani misal yukarda bahsettiğim DELETE komutunu da 0.1 saniyeye indirmenin bir yolu?

İyi çalışmalar.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: UPDATE ve DELETE Komutlarında LOG Dosyasına Kaydettirmeme

Mesaj gönderen sabanakman »

Delete komutu için önerim mevcut tabloyu silip (silnmemek için isim değiştirme yoluna gidilebilir), aynı yapıda ve isimde diğer bir tablo oluşturman. Yani önce drop table ile silmek ve sonra da create table ile oluşturmak işlemi hızlandırabilir. Mesela
Tablo
---------------------------
ID int (autoinc)
Aciklama char(10)
gibi bir tabloda milyonlarca kayıt olsun.

Kod: Tümünü seç

EXEC sp_rename 'Tablo', 'Tablo_silindi', 'OBJECT'-->tabloyu drop ile silmeden isim değiştirildi

CREATE TABLE dbo.Tablo
	(
	ID int NOT NULL IDENTITY (1, 1) NOT FOR REPLICATION,
	Aciklama char(10) NULL
	)  ON [PRIMARY]
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Re: UPDATE ve DELETE Komutlarında LOG Dosyasına Kaydettirmeme

Mesaj gönderen Hakan Can »

"TRUNCATE TABLE" komutu zaten dediğiniz işlemi çok daha hızlı bir şekilde yapıyor.

Dediğiniz şekilde DROP ve CREATE ilişkisel veritabanlarında zaten çok zor. Zira ilişkisi olan bir sürü tablo vs. varken DROP yapamazsınız.

Benim kastım da zaten LOG dosyasına UPDATE ve DELETE komutlarında değişen/silinen eski kayıtların kaydedilmesini nasıl önleriz idi. Yani DELETE komutu illa dosyanın tamamını değilde şarta bağlı bir kısmını boşaltmak için kullanıldığını düşünün. Zaten tamamı silineceği zaman ben "TRUNCATE TABLE" komutunu kullanıyorum.

Internette epey yerli/yabancı forumda araştırdım.

Cevap bulamadım.

Belki bir yolu vardır diye araştırmaya devam ediyorum.

İyi çalışmalar.
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: UPDATE ve DELETE Komutlarında LOG Dosyasına Kaydettirmeme

Mesaj gönderen adelphiforumz »

Merhabalar
Delphi 2005 için nasıl yapılır tam bilemiyorum fakat bundan birkaç yıl önce 2000 üzerinde
buna benzer birşeyi ben service kısımlarından yaptığımı hatırlıyorum. aklımda kaldığı kadarı ile log işlemlerini takip eden bir
service vardı bunu sql server her restart olduğunda kendisi açıyordu biraz bu tarafta araştırma yaparsan işini görebilir
Unutmadan bu servisler biraz tehlikeliydi çünkü işlemi dosya bazında yap gibi birşey yoktu .
bu servis kapatılınca sql server tüm log sistemini durduruyordu.
umarım aklımda kaldığı kadarı ile yardımcı olabilmişimdir.
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Cevapla