Teknoloji Yazılım Araçları

İki veri tabanı arasındaki tablo farkları

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 database
  • pgsql – for PostgreSQL database
  • dblib – for Microsoft SQL Server database
  • oci – 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

Yorumlar

  • 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.

Yazı hakkındaki düşünceleriniz nelerdir?