Aylık arşivler: Şubat 2012

Transactional Replication – Subscriber Database Adını Değiştirme

Farklı lokasyonlarda bulunan şubelerle merkez arasında transactional replication kullanıyoruz. Tüm şubeler merkezdeki ana SQL Server üzerinde bulunan kendi kodlarıyla ilişkili veritabanına aktarılmaktadır. Gün geldi, merkezdeki veritabanlarının isimlerinde değişiklik yapmak istedik. Merkezdeki abone görevindeki veritabanın adını değiştirdiğimizde Distributor tarafında The process could not access database ‘Veritabanı Adı’ on server ‘MerkezSunucu Adı’. hatası almaya başladık. Yeniden başlangıç senkronizasyonunu yapmadan replikasyonun kaldığı yerden devam edebilmesi için ya “Replication » Local Publication” menüsünden eski subscription database kaydını silip “New Subscriptions” bölümünden yeni abonelik oluşturulur veya Job ve sistem tabloları üzerinde aşağıdaki değişiklikleri yapmak gerekir.
Okumaya devam et

Stored Procedure – Tek Parametreyle Tek veya Tüm Kayıtları Seçme

Dışarıdan parametre alan bir Stored Procedure içerisinde parametreye göre bazen sadece o değere eşit olan kaydı bazen de tüm kayıtları getirmesini isteyebiliriz. Bu tür durumlarda tablodan seçim yapmadan önce parametrenin boş ve dolu olduğuna bakarız. Eğer dolu ise WHERE bölümüne kolon filtresi ekleriz boş ise herhangi bir kısıtlama eklemeyiz ki tüm tablo listelensin. Bu amaçla genellikel prosedür üzerinde seçmeli parametre tanımlanır.

CREATE PROCEDURE GetKategori(@KategoriId int=NULL)
AS
IF @KategoriId IS NULL
	SELECT * FROM Kategori
ELSE
	SELECT * FROM Kategori WHERE KategoriId=@KategoriId

Okumaya devam et

Tablodaki Satır Değişmiş mi ? (CHECKSUM ve timestamp)

SQL Server’da uygulamamız için kritik olan tablodaki bazı veya tüm alanların değişip değişmediğini öğrenmemiz gerektiğinde bunun için ya log, history gibi arşiv tabloları oluşturulur veya o satır değiştiği zaman o satır için tanımlı versiyon numarasını değiştiririz. Tarihçe tablolarını oluşturmamız hem değişiklik olup olmadığını hem de verilerin eski ve yeni değerlerini görmemize imkan tanır. Ancak değişiklik olup olmadığını anlamak için tarihçe tablosu ile ana tabloyu JOIN edip kolon seviyesinde fark olup olmadığına bakmamız gerekir. Bu da uğraştırıcı bir durum olduğu için sadece bu amaç için tarihçe tablosu oluşturmak mantıklı olmayabilir. SQL Server’in sunduğu CHECKSUM() fonksiyonu ve timestamp veri türü bu aşamada kolaylık sağmaktadır. Kontrol sayısı olarak türkçeleştirebileceğimiz CHECKSUM() fonksiyonu parametre olarak aldığı değer için bir hash değeri döndürür. Bu değer normal bir veri olabileceği gibi bir kolon veya kolonlar listesi de olabilir.
Okumaya devam et