6 Haziran 2017 Salı

Veritabanlarıyla rus ruleti oynamak

Yedeklemenin önemi ile ilgili (Bağlantı1, Bağlantı2) birçok yazı yazmama karşın maalesef sahada bu konuda birçok kötü pratik görüyorum. Son zamanlarda ilginç bir iş geldi. Önceden de bir projede birlikte çalıştığımız bir şirketten aradılar ve şöyle bir senaryo anlattılar:

- Yazılımcı, sistem yöneticisine Y veritabanının yedeğinin olup olmadığını soruyor,
- Sistem yöneticisi "var" diyor ve X konumuna Y veritabanının dosyalarını kopyalıyor,
- Yazılımcı, Y veritabanının zaten yedeği var diye, Y veritabanının kendisini (ayrıntılarını bilmediğim bir nedenden dolayı) ilgili SQL Server Instance'ından siliyor,
- Aradan 15 günden fazla bir süre geçtikten sonra yazılımcı X konumundaki yedeklerden dosyaları Attach ederek Y veritabanını geri getirmeye çalışıyor; fakat fark ediyor ki veritabanı dosyalarından biri eksik ve bu nedenle veritabanı Attach olmuyor,
- Yazılımcı, sistem yöneticisine bu eksikliği bildiriyor,
- Sistem yöneticisi geriye dönük olarak sadece 15 günlük yedek tuttuklarını iletiyor ve Y veritabanı ilgili SQL Server Instance'ından silineli 15 günden fazla olduğu için artık herhangi bir yerde bu veritabanının herhangi bir yedeğinin olmadığı anlaşılıyor,
- Bahsi geçen Y veritabanı, ilgili şirketin 4-5 senelik arşivi.
- Bu noktada benimle temas kurdular.

Hiçbir ekstra açıklamaya gerek kalmadan sırf yukarıdaki maddelerden, neyi nasıl yapmamanız gerektiğine dair birçok sonuç çıkarmışsınızdır diye tahmin ediyorum.

Bu sefer gerçekten çok şanslılardı ve veritabanını ciddi bir kayıp olmadan kurtarabildik. Ben elimden geleni yaparım, ama kimse bu konularda sadece şansına güvenmesin lütfen, her zaman bu seferki gibi şanslı olmayabilirsiniz.

Ekrem Önsoy
Microsoft SQL Server Danışmanı
www.ekremonsoy.com

3 yorum:

Anonim dedi ki...

Gercekten sanslilarmis Ekrem bey.Tesekkurler

Anonim dedi ki...

Hocam, burada biraz teknik olarak aydınlatmanız mümkün mü.

1 - Aldığı backup'ı restore etmeden mi attach etmeye çalışıyor. Bu nasıl oluyor. Restore ettiyse dosyaların eksik olduğunu o anda anlamaz mı. Backup içerisinde tek dosya mı var yani file bazında mı backup alınmış.

2 - Bu işi nasıl çözdünüz.

Ekrem Önsoy dedi ki...

1- Yedeği BACKUP DATABASE ile değil, veritabanı dosyalarını kopyalayarak alıyorlardı. Yazıda da anlattığım gibi, önce yazılımcılar veritabanının kendisini siliyor, sonra sistemci veritabanı dosyalarını bir yere kopyalıyor, yazılımcılar 15 günden sonra veritabanı dosyalarını Attach etmeye çalışınca eksik dosyayı fark ediyor.

2- Eksik olan dosya Transaction Log dosyasıydı. Veritabanı temiz kapatılmadığı için veritabanı stabil durumda değildi, bu nedenle yeni dosya oluşturulamıyordu. Veritabanını stabil hale getirmek için Hack-Attach yöntemini kullandım. Paul Randal'ın bu konudaki yazılarını Google'dan bulabilirsin.