İçeriğe geç →

Etiket: database

SQL Server veritabanını Suspect & Emergency modundan kurtarmak

Elektrik kesintisi veya donanım arızalarından kaynaklanan bazı problemler ister istemez çalışan sistemlere zarar verebiliyor. Sadece bilgisayar dosyaları ve işletim sistemi dosyaları değil, veritabanı üzerindeki MDF ve LDF dosyaları da nasibini alıyor.

Bu iki dosyanın birbirleriyle uyumsuz olmaları çeşitli uyarılar ve hatalar döndürüyor veya masterdb üzerinde bozulmalar yaşanabiliyor. Harddisk üzerine veri okuma yazma işlemlerini gerçekleştirememesi de bu sebeplerden birisidir. Bu gibi durumlarda veritabanınız SUSPECT moduna geçebiliyor.

Çözüm:

  1. Sql Management Studio’yu çalıştırın ve master db seçiliyken new query’e basın.
  2. Veritabanı üzerinde el ile ayarlar yapmanız için durum bilgisini sıfırlamanız gerekiyor. >>> EXEC sp_resetstatus ‘DATABASEADI_2017’
  3. Şimdi veritabanı dosyalarını emergency moduna çekelim. >>> alter database DATABASEADI_2017 set emergency
  4. Veri bozukluklarını tespit edelim. (bu işlem 15gb boyutundaki db için 5~10dk civarında sürüyor) >>> dbcc checkdb (‘DATABASEADI_2017’)
  5. Veritabanı üzerinde düzenlemeleri aktif edebilmemiz için emergency modundan çıkartıp bir tek bizim erişeceğimiz hale getiriyoruz. >>> ALTER DATABASE DATABASEADI_2017 SET SINGLE_USER WITH ROLLBACK IMMEDIATE
  6. Şimdi yarım oluşan veya oluşamayan log ve veri dosyalarını kaldırıyoruz. >>> DBCC CHECKDB (‘DATABASEADI_2017’, REPAIR_ALLOW_DATA_LOSS)
  7. Artık normal moda döndürebilir ve kullanıcıların erişimine açabiliriz. >>> ALTER DATABASE DATABASEADI_2017 SET MULTI_USER

FDQuery Recordcount 50 adet getirme problemi

SQLite ile proje geliştirenlerin başına gelme ihtimali yaygın olan bir problemi ve hızlı çözümünü sizlerle paylaşmak istiyorum.

Soru: SQLite projelerimde 800 satır sonuç var. Ancak Fdquery nesnesinin RecordCount değeri 50 olarak dönüyor. Bunu nasıl çözerim?

Bilgi Notu: FireDAC Query nesnesinin varsayılan gösterim boyutu 50 adettir. 50 veya daha aşağıda değer çekmek ve göstermek için kullanılır. Eğer çekmek istediğiniz veri miktarı 50 adetten fazlaysa aşağıdaki cevabı takip edin.

Cevap: FDQuery’nin Fetch (getirme) ayarlarını değiştirmelisiniz. FdQuery.FetchOptions ayarlarını aşağıdaki şekilde ayarlarsanız sorununuz çözülecektir.

Yöntem-1

FDQuery.FetchOptions içinde;

  1. RecordCountMode özelliğini cmTotal olarak belirleyin.
  2. (Windows için) CursorKind özelliğini ckDefault veya ckForwardOnly olarak belirleyin.
  3. Mode özelliğini fmOnDemand olarak belirleyin.
  4. RowsetSize özelliğini 1000 olarak belirleyin.
  5. Unidirectional özelliğini True olarak belirleyin.
  6. (Opsiyonel) Items özelliğinin içinden fiMeta‘yı çıkarın. Dataset düzenlemelerinde ihtiyaç duymazsınız.

Yöntem-2

Doldurulmuş FDQuery nesnesinin FetchAll metodunu tetikleyin. Sonuç olarak size getireceği tüm recordları gösterecek ve RecordCount özelliğinde getirdiği miktarı listeleyecektir.