August 26, 2008
@ 10:35 PM
Bazen aynı database içindeki tablolar ya da farklı database lerdeki tabloları ya da farklı sunuculardaki farklı databaselerdeki tabloları karşılaştırmak isteyebiliriz. Sql 2005'i kurduğunuz da C:\Program Files\Microsoft SQL Server\90\COM dizininde tablediff.exe isimli bir araç ile bu karşılaştırmaları yapabiliyoruz. Aşağıdaki resimde gördüğünüz gibi aynı sunucu üzerinde diffTest ve difftest1 isimli iki farklı database oluşturdum. Her iki database'e de kullanicilar isimli tablo ekledim. Ve her ikisine de farklı veriler girdim.

   

Şimdi geldi tablediff.exe yi kullanmaya. Bu araç ile ilgili detaylı bilgiyi şurdan edinebilirsiniz. Göreceğiniz üzere bir hayli fazla parametre alarak çok kapsamlı işler yapabilen bir araç. Ben sadece çok basit olarak iki tabloyu karşılaştıran ve farkları bana ismi "fark" olan bir tablo şeklinde vermesini istedim. Bunun için komut satırından aracı aşağıdaki gibi kullandım.

C:\Program Files\Microsoft SQL Server\90\COM>tablediff.exe -sourceserver ".\sql2005" -sourcedatabase "difftest" -sourcetable "kullanicilar" -destinationserver "
.\sql2005" -destinationdatabase "difftest1" -destinationtable "kullanicilar" -et "fark"

Bu kullanımda difftest1 database'inde fark isimli bir tablo oluşturuyor.

Birbaşka örnek olarak da, her iki tablodaki farkları giderecek bir sql sorgusu üretmek için yine komut satırından aracı aşağıdaki gibi kullanmak gerekiyor.

C:\Program Files\Microsoft SQL Server\90\COM>tablediff.exe -sourceserver ".\sql2005" -sourcedatabase "difftest" -sourcetable "kullanicilar" -destinationserver "
.\sql2005" -destinationdatabase "difftest1" -destinationtable "kullanicilar" -f "farklari_gider.sql"

Bu işlem sonucunda oluşan dosyanın içeriği aşağıdaki gibi oldu.

-- Host: .\sql2005
-- Database: [difftest1]
-- Table: [dbo].[kullanicilar]
SET IDENTITY_INSERT [dbo].[kullanicilar] ON
UPDATE [dbo].[kullanicilar] SET [ad]='osman1' WHERE [id] = 2
UPDATE [dbo].[kullanicilar] SET [ad]='murat1' WHERE [id] = 3
SET IDENTITY_INSERT [dbo].[kullanicilar] OFF

Bu T-SQL'i çalıştırdığınızda her iki database'deki tabloların içerikleri eşitlenmiş olacaktır. Aracın geniş kullanımını yukarda belirttiğim linkten detaylı inceleyebilirsiniz.