Forum

SQL server recovery...
 
Bildirimler
Hepsini Temizle

SQL server recovery mod hakkında

6 Yazılar
4 Üyeler
0 Likes
4,691 Görüntüleme
(@goktan)
Gönderiler: 9
Active Member
Konu başlatıcı
 

Merhabalar, SQL server için Recovery mode un ne kadar önemli olduğunu buradan öğreniyorum. Bu konuyla ilgili şunları sorabilir miyim:


1..Recovery Mode u Simple dan Full e veya Full den Simple a alabiliyoruz. Her 2 hamleyi de yaparken SQL server, eğer varsa, transaction logdan Database henüz yazılmamış verileri yazıp mı mode u değiştirir, veri kaybı yaşanmaması için ihtiyatlı mıdır SQL server?


2..Full mode da ldf uzantılı dosyanın boyu çok büyüyebiliyor. Recovery mode u Full olarak çalışan bir sistemi Simple a çekersek ldf dosyasının boyutu küçülüyor bayağı. Burda şunu merak ediyorum, sistem Full recovery modda çalışıyorken ,Transaction log dosyasından database e yazılmış olan veriler, Simple moda çekilinde tamamen siliniyor diyebilir miyiz? Bu yüzden mi ldf dosya boyutu küçülüyor?


 

 
Gönderildi : 07/10/2008 01:58

(@mesutsariyar)
Gönderiler: 2515
Co-Founder
 

  • Simple: The simple model describes just that: the simplest and easiest situation to manage. When a database is set to this model, there is no way you can back up only the changes made since the last backup. Instead, only full backups are allowed. One benefit of this model is that the transaction log won't become full from transactions occurring between the full backups. Whenever the database performs a checkpoint, space in the log is reclaimed. Additionally, non-logged operations such as bulk copy are permitted.


  • Full: The full model allows you to create not only complete backups of the database, but also incremental backups of only the changes that have occurred since the last full backup.

    An added benefit is that it's possible to recover the database to a particular point in time. For example, if a user accidentally deletes all accounts in a database at 1 PM, it's possible to restore the database up to 12:59 PM, right before the deletion of the accounts occurred.

    Under this mode, space in the transaction log is only reclaimed when a backup of the transaction log is made. When this occurs, all the changes stored in the transaction log are written to the backup and the space is freed up. Therefore, databases in this mode need to have enough space available for the transaction log to store all the transactions that occur between each backup. Additionally, non-logged operations are not allowed.


  • Bulk-Logged: The bulk-logged model lies between the other two models. On the one hand, incremental backups of the database are possible. The transaction log is treated the same way in this model as in the full model. However, bulk copy operations are only minimally logged. Instead of logging each insert into the table, SQL Server only logs the minimum necessary to recover the data if the backup is needed. However, because of this, if a bulk copy operation occurs, point-in-time recovery (described in the previous paragraph) is not possible. Recovery can only stop at the end of a transaction log.

  • http://www.devx.com/getHelpOn/10MinuteSolution/16532/1954

     
    Gönderildi : 07/10/2008 11:53

    (@goktan)
    Gönderiler: 9
    Active Member
    Konu başlatıcı
     

    Hocam teşekkür ederim, ingilizcem cok iyi degil ama birseyler anladıgımı zannediyorum, ingilizce dogrumu anladım acaba?


    Konuyla ilgili 1-2 şey daha sorabilirmiyim


    Birincisi, recovery moddan bagımsız olarak Transaction log a yazılan veriler, database aktarılırken belli bir süre bekletilirmi , yoksa hemen yazılıyormu ?


    Biraz ilginç bir soru olabilir ama , bir anda bir user data girsin fakat transaction logdan database aktarılmamıs ise data,  farklı bir user bu yeni girilen data yı SQL server a baglanınca goremezmi?


    2.  Simple modda iken , transaction logdaki veri database e yazıldıktan sonra artık transaction logdan hemen siliniyor mu?


    3.Yazıda gecen checkpoint, transaction logdan database en son yazılan veriyi tutan bilgi mi oluyor sanırım? Hani AD de bunun için bir dosya var, onun yaptığı işi mi goruyor ? AD deki gibi bir dosyası olmadıgına gore logların icindemi duruyor acaba checkpoint

     
    Gönderildi : 09/10/2008 22:41

    (@mesutsariyar)
    Gönderiler: 2515
    Co-Founder
     


    Birincisi, recovery moddan bagımsız olarak Transaction log a yazılan veriler, database aktarılırken belli bir süre bekletilirmi , yoksa hemen yazılıyormu ?



    İlk önce transaction log a yazılıyor, her database de belirli kontrol noktaları var, bu kontrol noktalarına gelindiği zaman ve kontrol işlemi yapılırken kayıt database e işleniyor.



    Biraz ilginç bir soru olabilir ama , bir anda bir user data girsin fakat transaction logdan database aktarılmamıs ise data,  farklı bir user bu yeni girilen data yı SQL server a baglanınca goremezmi?



    Bir client tan yeni bir kayıt girin ve diğer client tan başka bir arkadaşınız siz kaydettiğiniz anda kayıtı çağırsın, sonuç olarak kayıt görülür.


    Şöyle ifade edeyim, eğer siz "kaydet" butonuna bastıysanız ve size mesaj "kaydedildi" demiş ise kayıdı o anda görebilirsiniz. Burada bahsi geçen zaman dilimleri saniyenin yüzde biri kadar bir zaman dilimidir diye düşünüyorum.



    3.Yazıda gecen checkpoint, transaction logdan database en son yazılan veriyi tutan bilgi mi oluyor sanırım? Hani AD de bunun için bir dosya var, onun yaptığı işi mi goruyor ? AD deki gibi bir dosyası olmadıgına gore logların icindemi duruyor acaba checkpoint



    Transaction log burada tampon bölge görevi görüyor, hani hatalı veya eksik kaydın yazılmasını engelliyor. Checkpoint bir finish çizgisi gibidir, finish çizgisine gelenler sağlık kontrolünden geçirilir ve ipi göğüslerler(kaydedilirler)

     
    Gönderildi : 10/10/2008 00:24

    (@turgut)
    Gönderiler: 22
    Eminent Member
     

    Bu log dosyası meselsi benim de kafamı kurcalamıştır hep?


    Ben de soruyu başlatan arkadaşın sorusuna benzer olarak birşey merak ediyorum.


    1.Bir user sql server database i kullanan bir uygulama uzerinden bir kayıt girdi(örneğin bi öğrecinin anne baba vb bilgilerini girdi ve kaydet dedi programda)


    Bu aşamadan sonra bu bilgiler önce transaction log dosyasına yazılıyor dendi. Yani transaction log dosyasında programdan az once girilen butun veriler var mı? Anne adı baba adı vb öğrenci bilgileri? Bundan başka bu verinin giriliş tarihi vb bilgiler de var mı?


    2.Transaction log dosyası sanırım .ldf uzantılı olan dosya(yanlışsam düzeltin lütfen).


    Şimdi bu dosyaya program aracılığıyla girilen anne adı, baba adı bilgileri girildikten sonra transaction loga bilgi yazıldı, ama henüz database'e yazılmadı. Bu esnada başka bir program kullanıcısı, az önce girilen öğrenci bilgilerini çağırıp görebilir mi?


    Görebilmesi için Database'e yazılmış olması gerekiyor mu?Log dosyası yardımcı olabiliyor mu böyle bir senaryoda? En çok merak ettiğim de log dosyasından database' e ne kadar süre sonra kayıtlar yazılır?


    3.Biraz genel olacak ama transaction log dosyası kavramı burada soru konusu olduğu için buraya yazıyorum sorumu.


    Transaction Log dosyası Active Directory ve Exchange'de de var.  Çalışma mantığı acısından dusunursek yine aynı mantıkla önce log dosyasına sonra da database'e mi yazılır A.D.  ve Exchange'de de bilgiler? Exchange de Full backup alınca log dosyaları siliniyordu, A.D.deki transaction log dosyası hiç sıfırlanır mı ya da hangi durumda içindeki datalar silinir, temizlenir bu dosyanın?

     
    Gönderildi : 15/08/2010 01:17

    (@turgaysahtiyan)
    Gönderiler: 344
    Reputable Member
     

    Merhaba,

    İlk önce genel mantığıyla logged bir operasyonun nasıl gerçekleştiğini konuşalım.

    Örneğin bir kayıdı update etmek istiyoruz. Update edilecek olan kayıt data file dan çekilir ve buffer cache alınır. update yapıldığı anda bu update buffer cache de gerçekleştirilir. Ve Checkpoint konulana kadar buffer cache den okunur. Checkpoint konulduğunda ise bu kayıt ile alakalı bilgi önce transaction log dosyasına daha sonrada data file a yazılır. Transaction log un buradaki görevi herhangi bir rollback durumunda rollback edilecek kayıdın bilgilerinin tutulmasıdır.

    Checkpoint elle tetiklenebileceği gibi SQL server bunu otomatikte gönderebilir. Otomatik gönderim sıklılığının oldukça fazla parametresi (recovery interval, recovery model vs.)  var burda bu konuya girmiyorum.

    Şimdi transaction lı bir örnek üzerinden daha detaylı anlatmaya çalışalım. Aşağıdaki örnek te A user ı bir kaydın name ini Ahmet ten Turgay a çeviriyor.

    Begin tran -- adım 1

    update table set name='Turgay'  where name = 'Ahmet' --adım 2

    checkpoint -- adım 3

    commit tran -- adım 4

    1.adım da bir transaction başlatıyoruz. 2. Adımda kayıdı update ediyoruz. Daha checkpoint gelmediği için bu kayıt buffer cache de update oldu ve eğer sorgulanırsa turgay bilgisi gelecek ama buffer cache den gelecek. Bu arada transaction daha bitmediği için başka bir user bu kayıdı ancak nolock hint iyle okuyabilir ve transaction bitmediği için bu kayıt dirty read dir.

    3. adımda checkpoint ile beraber bu update işlemi buffer cache den data file a yazılır. Aynı zamanda  rollback yapabilme ihtiyacı sebebiyle transaction log dosyasınada tarih bilgisi ile beraber bir kayıt atılır. TLog a yazılan kayıtlarda tarih bilgisi varmı demişsiniz. Evet vardır. Ve bu tarih vasıtasıyla TLog backup ları kullanılarak istenilen bir tarihe database i restore etmek mümkündür. Bu da başlı başına bir konu olduğu için burada detayına girmiyorum.

    4. adımda commit yada rollback yapılır. Commit edilirse bu datanın mdf de ki kayıdına commit flag ı konulur. Rollback edilirse eğer bu kayıt mdf den silinir.

    Eğer commit edilirse artık başka bir user bunu nolock hintsiz çekebilir ve bu kayıt dirty read değildir.

     

    Son olarak Transaction log dosyasının temizlenmesinden bahsedelim. Bu işlem recovery model ile oldukça bağlantılıdır. Simple recovery model de commit yada rollback edilmiş transaction lar log dosyasından otomatik silinir. Full recovery model de ise Transaction Log backup alınana kadar bütün transaction lar Log dosyasında kalır. Bu backup sayesinde commit yada rollback edilmiş transaction lar dosyadan silinir.

    Umarım açıklayıcı bir yazı olmuştur. Soru işareti kaldıysa sorabilirsiniz. 

     
    Gönderildi : 16/08/2010 19:45

    Paylaş: