7 Eylül 2018 Cuma

SQL Server Partial Backup Nedir

SQL Server' da 2005 ile gelen bu özellik büyük veritabanı sistemlerinde backup alma süresini kısaltmak için kullanılmaktadır. En kısa ifade ile bunu kullanmadaki amacınız SQL Server içerisinde read only data dosyanız varsa ve bu file'in backup işlemine dahil olmasını istemiyorsanız kullanabileceğiniz bir özellik.

Çalışma mantığı açısından aynı full backup gibi çalışırken tek farkı full backup bütün daya dosylarını bak dosyasına dahil ederken Partial Backup read only dışında kalan bütün dosyları bak dosyası içine yazar.

Sytanx'ı aşağıdaki gibidir:

BACKUP DATABASE AdventureWorks READ_WRITE_FILEGROUPS
TO DISK = N'f:\AdventureWorks.bak' WITH COMPRESSION




4 Eylül 2018 Salı

OLE DB provider "SQLNCLI11" for linked server "" returned message "Query timeout expired". HATASI

OLE DB provider "SQLNCLI11" for linked server "" returned message "Query timeout expired" hatasını alıyorsanız SQL Server tarafından kullanılan linked server'in query timeout süresi çalışan işlem için yeterli olmadığı anlamına gelmektedir.

Bu sorunu aşmak için 2 farklı yol mevcut bir tanesi işlemin çalıştığı sunucu üzerinde insatance seviyesinde timeout süresini uzatabilir yada kullanılan linked server'ın query timeout değerini değiştirebilirsiniz.

Instance seviyesinde süreyi uzatmak için:

sp_configure 'remote query timeout',100 -- saniye cinsinden
go
reconfigure


Linked Server üzerinden değiştirmek için ise kullanılan linked Server'a sağ tıklayarak properties'ne geldikten sonra açılan pencerede sol tarafta Server Options geldikten sonra query timeout değerini yeterli olacak bir değere getirdikten sonra bu hatayı aşmış olacaksınız.


5 Haziran 2017 Pazartesi

Sistem Databas'leri olmadan SQL Server'ı Başlatma ve Sistem Db'lerini Kurtarma



SQL Server'ın çalışır durumda olması için sistem db dosyalarının zarar görmemiş, çalışır durumda olması gerekir. Peki bu dosyaları bir şekilde kaybettiysek ne olur? Bu durumda SQL Server database engine başlatamazsınız. SQL Server'ı çalışırı duruma getirebilmek için sistem db dosyalarını Rebuil etme olarak bilinen bir yöntemi kullanarak sistem db dosyalarını yeniden oluşturacağız. Bunun için SQL Server Setup'ına ihtiyacımız var. (Doğru versiyonu kullandığınızdan emin olun.)

Adımlar:

  • CMD'yi yönetici olarak çalıştırın.
  • Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=instance_Adı /SQLSYSADMINACCOUNTS=kullanıcıAdi /SAPWD= sifre
    • Yukarıdaki kodu setup'un içinde bulunduğu disk dizinine gelerek yapıştırın. Instance'ın adı ve domanin'de admin yetkisine sahip kullanıcı bilgilerini yazın ve bekleyin.
İşlem tamamlandıktan sonra tanımlı olan klasör içerisinde tüm sistem db dosyaları tanımlanmış olacaktır. Fakat dikkat edilmesi gereken nokta SQL kullanıcıları, job gibi sistem db'leri içerisinde saklanan meta dataların bu durumda hepsini kaybetmiş olacaksınız. Sistemi çalışır duruma geldikten sonra back-up'lardan tekrardan bunları da kurtarabilir yada benzer olduğunu düşündüğünüz farklı bir database varsa servisleri durdurarak file'ları kopyalayabilirsiniz. Konu ile ilgili yakında küçük bir demo da paylaşacağım. Faydalı olması dileğiyle.




23 Mayıs 2017 Salı

SQL SERVER'da Login failed for user '' Hatası



Login failed for user '' hatasının alıyorsanız aşağıda bahsedilen maddeleri adım adım kontrol ederseniz sorunu çözmüş olacaksınız.


  1. Girmeye çalıştığınız login üzerine gelip sağ tıklayarak Propertis'i tıkladıktan sonra açılan pencerenin sol bölümündeki listeden Status'u tıklayarak buradan GRANT ve DISABLED seçeneklerinin işaretli olduğundan emin olun.
  2. SQL Server Instance'a sağ tıklayarak buradan properties'e gelerek sol taraftan security'i seçin.Bu ekran da Sql server and windows authentication mode'un seçilidiği olduğundan emin olun. Fakat bu işlemin aktif olması için SQL Server servislerini restartlamanız gerekmektedir. Bunun içinde Instance'a tekrardan sağ tıklayarak restart diyebilirsiniz.
  3. Bağlanmaya çalıştığınız Login bilgilerinin doğruluğunu kontrol edin gerekirse şifresini değiştirerek tekrardan deneyin.
Umarım faydalı olmuştur. 









18 Mayıs 2017 Perşembe

Exception deserializing the package SSIS Hatası


SSIS de paketi çalıştırdığınız da Exception deserializing the package hatası alıyorsanız. Denemeniz gereken ilk yöntem paket'in ismini değiştirmek. Paket isimlerinde ( [ ] ) köşeli parantez kullanmaktan kaçının. Bundan dolayı paket derlenirken hata alınmaktadır. Sadece harfler ve Türkçe karakter kullanmaya özen gösterin. Eğer sorununuz devam etmesi durumunda aşağıdaki adımları izleyin.
  1. Data Tools dan çıkın.
  2. TaskManagerden kontrol ederek tamamen kapandığından emin olun. Eğer DTSDebugHost isimli çalışan işlemler görüyorsanız bunları da sonlandırın.
  3. Projenizin klasörüne gelerek buradan ISPAC dosyasını bularak silin.
  4. Ardından Data tool'u açın ve proje'ye sağ tıklayarak rebuil'i seçin ve tekrardan projenin build edilmesini bekleyin. 
   Bu adımlardan sonra sorun ortadan kalkacaktır. Umarım faydalı olmuştur.

27 Nisan 2017 Perşembe

SQL Server da Tabloların Şemasını Değiştirme



SQL Server da nadirde olsa tabloların şemasının değiştirme durumu ile karşılaşılabiliniyor. Bunun aslında çok basit bir T-SQL kodu bulunmakta.

Alter Schema HedefSema Transfer KaynakSema.TabloAd;

Eğer bir şema içerisindeki bütün tabloları farklı bir şemaya aktarmak istiyorsanız SQL Server'ın system Sp'leri içinde bulunan Sp_MsForEachTable bütün kullanıcı tabloların içinde dönerek işlem yapmanızı sağlar. Bu kodun kullanımı ise aşağıdaki gibidir.

exec SP_MsForEachTable  'Alter Schema HedefSchema Transfer ?'

SP_MsForEachTable Sp'nin kullanımı sonucunda db de bulunan bütün kullanıcı tabloların şemaları transfer Hedef olarak belirlediğiniz şemaya aktarılacaktır.




26 Nisan 2017 Çarşamba

A SELECT statement that assigns a value to a variable must not be combined with data-retrieval operations Hatası

A SELECT statement that assigns a value to a variable must not be combined with data-retrieval operations hatası T-sql de bir değişkene aynı anda birden fazla değer atanmaya çalışıldığı zaman alınır. Bundan emin olmak için sorguyu top 1 olarak çalıştırmayı deneyin hata almıyorsanız değişkene atama yaparken ki işlemi kontrol ediniz.

Örnek Kullanım:

Select top 1 @degisken=kolon 
from TabloAd
Where Id=@Id





25 Nisan 2017 Salı

The query processor ran out of internal resources and could not produce a query plan with WHERE in and several thousand values Hatası



Where  statement da kullandığınız IN ifadesi içerisine limitinin dışında değer girmenizden dolayı SQL Server dan 
"The query processor ran out of internal resources and could not produce a query plan. This is a rare event and only expected for extremely complex queries or queries that reference a very large number of tables or partitions. Please simplify the query. If you believe you have received this message in error, contact Customer Support Services for more information." 
hatasını almaktasınız. Hem bu hatayı almamak hemde daha iyi bir performans için bu noktada temp tablo yada subquery kullanarak hem hatadan kurtulabilir hemde daha iyi bir performans elde edebilirsiniz. Konu ile ilgili bu sayfada yorum kısmında Microsoft durumu açıklayıcı bir anlatımda da bulunmuş. Umarım faydalı olur.

24 Nisan 2017 Pazartesi

Transaction, Rollback, Commit Kullanımı

   SQL Server'da bir sorgu çalıştırdığımız zaman default olarak SQL Server hemen sonuç
döndürür.

   Eğer çalıştırılacak sorgunun başına begin transaction (yada begin tran) ifadesi kullanırsak otomatik olarak transaction explict uygulanır ve tablo üzerinde lock konulur. Bu lock transaction commit yada rollback olana kadar tablo üzerinde kalır.

   Örneğin kritik update ve  delete işlemlerinde begin tran ifadesi kullanılarak yapılan işlemin doğruluğundan emin olduktan sonra eğer bir sıkıntı yoksa commit yazarak çalıştırırsanız işlem yaptığınız en son şekilde kalacaktır. Fakat işlemi yaptıktan sonra bir problem olduğunu fark ettiniz ve geri dönmek istiyorsanız ROLLBACK yazarak bunu çalıştırırsanız veriler önceki haline gelecektir. Ama unutmayın kontrol yaparken aynı session üzerinden sadece verilere ulaşabilirsiniz. Farklı bir session üzerinden datalara ulaşmak istediğinizde tablo üzerinde lock olduğundan dolayı verilere gelmeyecektir.

  Ayrıca session üzerinde açıkta olan transaction var mı ? Varsa bunun sayısını görebilmek için
SELECT @@TRANCOUNT ifadesi ile görebilirsiniz.

 

SQL Sever Login ve Şifrelerini Farklı Server'a Taşıma


   Eğer mevcutta olan Server'ı farklı bir server'a taşıyacaksanız sadece DB'lerin full-backup ve retore işlemi ile kurtulmanız mümkün değil. Çünkü server kullanıcıları aldığnızı full-backup' a dahil edilmiyor. Herhangi bir login'e sağ tıklayarak create script dediğiniz zamansa güvenlik amaçlı SQL Server mevcut loginin şifresini rastgele olarak yeniden oluşturmaktadır. Yani mevcut şifre ile taşımanız mümkün değil. Tabi bu söylediklerim Windows Authentication için geçerli değil. Sisteminizdeki SQL Server Loginler için geçerli.

   Neyse ki mevcut şifreleri koruyarak taşıma işlemini yapabilmeniz için Microsoft'un yayınlamış olduğu bir Stored Procedure var. Bu Sp sayesinde mevcuttaki SQL Server login'leri mevcut şifreleri ile taşıyabilirsiniz.Bu Stored Procedure kullanıcıların scriptlerini oluştururken şifreleri güvenlik amaçlı hashlemektedir. Bu sayede server'ı taşıdıktan sonra kullanıcılar aynı şifreleri ile login olabilmektedirler.

Scriptin en güncel halini buradan indirip Db'de oluşturabilirsiniz.

Aynı zamanda SQL Server 2005 ile 2012 arasındaki versiyonları destekleyen halini buradan temin edebilirsiniz.


Daha sonra istediğiniz login'nin create scriptini  aşağıdaki örnek kullanım şekliyle elde etmeniz mümkün.

EXEC dbo.sp_help_revlogin @login_name = 'Kullanici'