Bugün ki yazımda iki farklı veri tabanındaki farklı tabloları nasıl tespit edebiliriz bunu yazacağım.
Öncelikle böyle birşeye neden ihtiyaç duyulur ondan bahsetmek istiyorum. Bir veri tabanınız var ve farklı bir veri tabanı açıp tablolarınızı oraya import ettiniz fakat tablo sayısına bakıyorsunuz oda ne farklılık var biri eksik biri fazla tek tek tablo isimlerinden bulmak oldukça zor işte bu noktada TSQL komutu yazarak iki veri tabanı arasındaki tablo farklarını görebiliriz.
Alpha diye bir ana veri tabanımız olsun Beta diye ikinci bir veri tabanımız olsun. Alpha da 97 tablo olduğunu varsayalım Beta veri tabanına import yaptınız 80 tablo kayıt geldi aradaki 17 tablonuz yani alınmayan tablolar hangileri şu şekilde görebilirsiniz.
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='BASE TABLE';
Bu sql sorgusu ile mysqlde tanımlı tüm tablolar, tipleri, versiyonları tablo kayıtları vs hepsini görebilirsiniz. Fakat bu sql komutu bizim sorunumuza çözüm değil sub query yazarak TABLE_SCHEMA kısmında arama yapıyoruz şöyle;
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='BASE TABLE'
and TABLE_SCHEMA='ALPHA'
and TABLE_NAME not in
(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='BASE TABLE'
and TABLE_SCHEMA='BETA');
Bunun benzerini MsSQL,Oracle vb veri tabanlarında kullanabilirsiniz.
Gördüğünüz gibi ALPHA veri tabanında tablo adı BETA da olmayanları göster dediğimizde aradaki farklı tabloları görmüş oluyoruz.
İki veri tabanını kıyaslamanın farklı bir yönetimi olarak script ile de görüntülenebilecek şekilde github’ta bulunan repomdan bakabilirsiniz.
https://github.com/erkanrua/compareTwoDatabase
.environment
dosyasını açtığınız da aşağıdaki parametreleri göreceksiniz.
[ Main settings ]
; Possible DATABASE_DRIVER: 'mysql', 'pgsql', 'dblib', 'oci'.
; Please use 'dblib' for Microsoft SQL Server
DATABASE_DRIVER = mysql
DATABASE_ENCODING = utf8
SAMPLE_DATA_LENGTH = 100
[ Primary connection params ]
DATABASE_HOST = localhost
DATABASE_PORT = 3306
DATABASE_NAME = compalex_dev
DATABASE_USER = root
DATABASE_PASSWORD =
DATABASE_DESCRIPTION = Developer database
[ Secondary connection params ]
DATABASE_HOST_SECONDARY = localhost
DATABASE_PORT_SECONDARY = 3306
DATABASE_NAME_SECONDARY = compalex_prod
DATABASE_USER_SECONDARY = root
DATABASE_PASSWORD_SECONDARY =
DATABASE_DESCRIPTION_SECONDARY = Production database
DATABASE_DRIVER
– database driver, possible value
mysql
– for MySQL databasepgsql
– for PostgreSQL databasedblib
– for Microsoft SQL Server databaseoci
– for Oracle database
Bu şekilde tüm veri tabanlarında karşılaştırma yapıp kaynak/hedef veri tabanları arasındaki farkı tespit edebilirsiniz.
İnsanlar, yazılımın ürün olmadığını, ürün üretmek için kullanıldığını anlayacaklar.
Linus Torvalds
Yazı için çok teşekkürler beni büyük dertten kurtardı. Farklı tabloları bulduk peki tablo sayısı aynı fakat tablo içindeki sütunlar farklı ise iki veritabanında bunu nasıl bulabiliriz.
Örneğin: okul tablosunda okul_no var ama diğer veri tabanında okul tablosu var ama okul_no sütunu yok. birinde olan diğerinde olmayan sütunları nasıl bulabiliriz hocam?
Teşekkürler.
Merhaba Emre,
Yorumun için öncelikle teşekkür derim. SELECT * FROM INFORMATION_SCHEMA.COLUMNS tablosundan COLUMN_NAME sütununa bakabilirsin. Bunun dışında github’ta bulunan repository’mi indirerek kolon farklılıklarını görsel olarakta görebilirsin.
https://github.com/erkanrua/compareTwoDatabase
Kolaylıklar dilerim.