Bir işlem “taahhütlü” ise, kesin olarak kaydedilir mi?


12

Bir işlem ise işlenen başarıyla Sonra% 100 emin veritabanına VE günlük dosyalarına yazılır edildiğini olabilir? Verilerin kaydedildiğinden emin olabilir miyim?

Bugün günlük dosyalarımız sürücünün sınırına ulaşmıştı ve birçok hata aldık. Ayrıca, diğer bazı hizmetler çöktü. Diski artırdık ve sunucuyu yeniden başlattık.

Başlatma sırasında, sunucu bir "veritabanı kurtarma" yaptı - her şeyin tekrar yolunda olduğundan emin olabilir miyim?


2
Kaç işlem gerçekleştirildiğini ve kaç işlemin geri alındığını görmek için kurtarma işlemi tamamlandıktan sonra hata günlüğünü kontrol edebilirsiniz. Bunun sihirli bir cevabı yoktur - bir disk çökerse, o zaman her şey işlemlerin durumuna bağlıdır.
Aaron Bertrand

1
@AaronBertrand Ama eğer bir işlem "taahhütlü" durumdaysa (yani taahhüt başarılı olmuşsa), iyileşme sırasında hala kaybolması nasıl mümkün olabilir?
SQL Polisi

3
@Giosco: Yapamaz. "kararlı", veritabanının günlük dosyasında olduğu anlamına gelir. Bundan sonra kaybetmenin tek yolu, 1) günlük dosyasını veri dosyasına da kaydedilmeden önce kaybetmek veya 2) hem günlük dosyasını hem de veri dosyasını kaybetmek veya 3) insan hatasını kaybetmektir. (3) 'ün genellikle mümkün olduğunu unutmayın.
RBarryYoung

2
@Giosco, tam sürüş sırasındaki tüm işlemlerinizin başarılı bir şekilde gerçekleştirildiğini nasıl biliyorsunuz?
Aaron Bertrand

2
Saklı yordam <> işlem - saklı yordamınız birden çok açık işlem olabilir veya yalnızca örtük, deneme / yakalama mantığı olabilir, C # katmanında, vb. İşlem işleme olabilir. Yine, istisna yok = başarılı taahhüt Battaniye ifadesi olarak biraz fazla tehlikeli olabilir.
Aaron Bertrand

Yanıtlar:


16

Bir istemci uygulaması bir COMMIT yayınladıysa ve bir başarı kodu aldıysa, işlemin motor tarafından dayanıklı olması garanti edilir. Bir işlemde yapılan tüm değişikliklerin, bir kilitlenmeden sonra bile görünür olacağı garanti edilir. Ayrıca, kurtarma işlemi, bir çökme durumunda yapılmayan işlemlerin geri alınacağını da garanti eder.

Daha fazla ayrıntı için ARIES belgesini okumanızı tavsiye ederim .

Önceden yazma günlük kaydı ve kurtarma, temel depolama donanımında arızalar (bozulma) olup olmadığını garanti edemez. Ve herhangi bir mühendislik ürünü kusur içerebilir.

Uygulamanızın, diğer tüm uygulamalar gibi, çökmeler (hatalar) durumunda doğru davranması için dikkatlice yazılması gerekir. Sihir yok.


Bir istemci uygulaması bir COMMIT yayınladıysa, ancak istemci tarafındaki zaman aşımına kadar DB'den yanıt alınmadıysa. Bu taahhüt ne olacak? başarı veya başarısızlık? Nasıl kontrol edilir?
Gab 是 好人
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.