3 Temmuz 2008 Perşembe

"System.data.sqlclient.sqlerror: Restore detected an error on page (0:0:) in database "veritabanı_adı" as read from the backup set. (Microsoft.sqlserv

HATA MESAJI:
"System.data.sqlclient.sqlerror: Restore detected an error on page (0:0:) in database "veritabanı_adı" as read from the backup set. (Microsoft.sqlserver.smo)"

AÇIKLAMA:
SQL Server 2005' te bir yedek dosyasını açmaya (Restore) çalıştığınızda bu hata ile karşılaşabilirsiniz.

ÇÖZÜM:
Açmaya çalıştığınız yedek dosyası büyük bir ihtimalle bozuktur. Bu hata mesajının alındığı durumlarda gördüğüm sorun hep buydu. Daha iyi bir yedek dosyası bulup, onu açmanızı tavsiye ederim.

4 yorum:

Adsız dedi ki...

Müşterinin server ında sql den full backup alıp o serverda olmak şartı ile geri aynı servera restore yapabiliyoruz.Fakat aynı backup dosyasını başka bir bilgisayara kopyalayıp restore yapmaya kalkıştığımızda aşağıdaki hatayı veriyor. Dosya arızalı desek ilk yedeğin alındığı kendi serverında da restore yapmaması gerekir. Kendi serverında hatasız restore çalışıyor. Aynı backup yedek dosyasını başka bir sql standart 2005 li bilgisayarda restore etmeye çalıştığımızda maalesef bu hata ile karşılaşıyoruz.Çözüm ???

Ekrem Önsoy dedi ki...

Bu soruna uzaktan ve doğrudan bir cevap vermek çok zor. Çünkü ne müşterinizde nasıl RESTORE yaptığınızı biliyorum, ne veritabanında entegrasyon kontrolü yapma şansım var, ne yedek dosyasının sağlamlığının kontrolünü yapma şansım var, ne doğrudan aldığınız hata mesajını biliyorum ne de yedek dosyasının açılmaya çalışılan SQL Server Instance' ı ile, kaynak makinedeki Instance arasındaki farklılıkları biliyorum. Anlayacağın, bu tarz sorunlara bu kadar uzaktan bir çözüm üretmek zor.

Adsız dedi ki...

SAYIN Ekrem Önsoy Bey

Birçok firmada SQL den menüleri kullanarak SQL yedeklerimizi backup full olarak yapıyoruz. Gerektiğinde de hatasız olarak restore ediyoruz. Sıkıntı yok. Bir müşterimizde SQL standart 2005 ve işletim sistemi Windows 2003 server standart kullanıyor. Bu müşterimizin server inde SQL menüden FULL BACKUP alıp, o serverda olmak şartı ile geri aynı servera sağlam olarak restore yapabiliyoruz. Buraya kadar işler normal. Fakat aynı backup dosyasını, SQL standart 2005 li, veya SQL devoloper 2005 kurulu başka bir bilgisayara kopyalayıp restore yapmaya kalkıştığımızda

System.Data.SqlClient.SqlError: RESTORE detected an error on page (0:0) in database "DENEME" as read from the backup set. (Microsoft.SqlServer.Smo) hatası ile karşılaşıyoruz.

1- Kaynak Dosya Sağlam ( .Ms ve .Log dosyaları) ayrıca müşterim şu anda sağlam olarak kullanmaya devam ediyor.
2-Ana serverda bulunan Sql backup Yedek Dosyalarıda sağlam. Hepsini, yedeğin alındığı kendi serverında hatasız sağlam olarak geri restore yapıyor. Sorun aynı SQL backup yedek dosyasını, başka bir Sql Standart 2005 li bilgisayarda restore etmeye çalıştığımızda maalesef yukarıdaki hata ile karşılaşıyoruz.
3-Bu SQL backup yedek dosyalarını ana serverdan kendi harddiskime kopyalarken dosyalar bozuluyor desem klasik kopyala yapıştır. Ayrıca datayı backup dosyası olarak değilde .Ms ve .Log olarak başka bir bilgisayara kopyalayıp Attach ettiğimde dosya sağlam olarak çalışıyor. Başka müşterilerde aynı SQL FULL backup ve Restore sağlam çalışırken sadece bu müşterinin serverında yukarıdaki hata ile karşılaşıyorum.

Dosyanın uzunlukları ise aşağıda bildirilmiştir.
MikroDB_V12_ DENEME_backup_200809211628.bak 1.590.780 KB uzunluk
MikroDB_V12_ DENEME_WORKDATA_backup_200809211628.bak 2.131 KB uzunluk

Bunca senedir sorunsuz olarak Backup, Restore yapıyorum, gerek SQL menülerden, gerekse komutlardan ilk kez böyle ilginç bir hata ile karşılaşıyorum.
Bu hatanın sebebi ve çözümü hakkında yardımlarınızdan dolayı şimdiden teşekkür ederim.

Ekrem Önsoy dedi ki...

Veritabanının kullanılabiliyor olması demek, sağlam olması demek değildir.

Bahsi geçen veritabanı için DBCC CHECKDB komutunu çalıştırmanı öneririm. Bu komutun sonuçlarına göre konuşmak daha doğru olur.

Not: ".ms" derken sanırım ".mdf" demek istiyorsun.