DBAtlas · Veritabanı operasyon atlası

Taşıma sonrası doğrulama (satır sayısı/checksum)

Oracle

-- Kaynak ve hedefte satır sayılarını karşılaştır
SELECT 'musteri' tablo, COUNT(*) adet FROM musteri;

-- İçerik farkını nesne düzeyinde bulmak için DBMS_COMPARISON (db link ile)
BEGIN DBMS_COMPARISON.CREATE_COMPARISON(
  comparison_name => 'KARSILASTIR_MUSTERI',
  schema_name => 'MAGAZA', object_name => 'MUSTERI',
  dblink_name => 'HEDEF_DB'); END;
/
-- SELECT DBMS_COMPARISON.COMPARE('KARSILASTIR_MUSTERI', scan_info) FROM dual;

En hızlı kontrol her iki tarafta tablo bazında COUNT(*) karşılaştırmaktır. Satır düzeyinde gerçek içerik farkını bulmak için DBMS_COMPARISON paketi kullanılır: database link üzerinden kaynak ve hedef tabloyu satır satır karşılaştırır ve farkları raporlar/yakınsatabilir. Sağlama için ORA_HASH veya STANDARD_HASH ile kolon özeti alınabilir.

PostgreSQL

-- Satır sayısı
SELECT count(*) FROM musteri;

-- Tüm tablo içeriğinin sıralı özeti (sağlama) — iki tarafta karşılaştır
SELECT md5(string_agg(t.satir, '' ORDER BY t.satir)) AS ozet
FROM (SELECT md5(musteri::text) AS satir FROM musteri) t;

İlk adım her tabloda count(*) karşılaştırmaktır. İçerik doğrulaması için satırların metin gösterimlerini md5'leyip sıralı olarak birleştirip tekrar özetlemek, iki taraf arasında satır-bağımsız bir sağlama sağlar. Büyük veride yalnızca değişebilir/anahtar kolonlar seçilerek özet alınır; PK'ye göre sıralama tekrarlanabilirlik için önemlidir.

MySQL

-- Tablonun yerleşik sağlaması (iki sunucuda çalıştırıp karşılaştır)
CHECKSUM TABLE musteri;

-- Satır sayısı
SELECT COUNT(*) FROM musteri;

-- Canlı/büyük ortamda tercih edilen araç (satır bloklarını online karşılaştırır):
-- pt-table-checksum h=kaynak,D=magaza  (Percona Toolkit)

MySQL'de CHECKSUM TABLE tablo içeriğinin tek bir sağlamasını verir; kaynak ve hedefte çalıştırılıp karşılaştırılır (motor/sürüm aynı olmalı). Satır sayısı için COUNT(*). Canlı üretimde ve replikasyon tutarlılığında endüstri standardı Percona Toolkit'in pt-table-checksum aracıdır; blok blok, online ve düşük etkiyle karşılaştırır.

SQL Server

-- Satır düzeyi tam karşılaştırma (fark üreten resmi araç)
tablediff -sourceserver S1 -sourcedatabase magaza -sourcetable musteri \
  -destinationserver S2 -destinationdatabase magaza -destinationtable musteri

-- Hızlı toplu sağlama (tek sorguyla, iki tarafta karşılaştır):
SELECT COUNT_BIG(*) adet, CHECKSUM_AGG(BINARY_CHECKSUM(*)) ozet FROM dbo.musteri;

SQL Server'da satır düzeyinde farkı bulan resmi komut satırı aracı tablediff'tir (hangi satırların eklendiğini/değiştiğini üretir, opsiyonel -f ile onarım betiği yazar). Hızlı bütünsel kontrol için CHECKSUM_AGG(BINARY_CHECKSUM(*)) tek bir tablo özeti verir; COUNT_BIG(*) ile birlikte iki taraf karşılaştırılır (satır sırasından bağımsızdır).

MongoDB

// Belge sayısını karşılaştır (kaynak ve hedefte)
db.musteri.countDocuments({});

// İçerik sağlaması için dbHash (koleksiyon/DB düzeyinde md5 özeti):
db.runCommand({ dbHash: 1, collections: ["musteri"] });
// -> md5 alanı iki ortamda karşılaştırılır.

İlk kontrol her iki tarafta countDocuments() ile belge sayısını karşılaştırmaktır (estimatedDocumentCount hızlıdır ama metadata'ya dayanır, kesin sayım için countDocuments). İçerik doğrulaması için dbHash komutu koleksiyon/veritabanı düzeyinde bir md5 özeti üretir; iki ortamın hash'leri karşılaştırılır. Index'ler ayrıca getIndexes() ile denetlenir.

Redis

# Anahtar sayısını karşılaştır (kaynak ve hedefte)
redis-cli DBSIZE

# Bellek/veri özeti ve anahtar tipi dağılımı için:
redis-cli INFO keyspace     # db0:keys=... bilgisi
# Tam içerik doğrulaması için: her anahtarda DUMP alıp hedefle karşılaştır
# (ör. redis-cli --scan | xargs -I{} redis-cli DUMP {})

Redis'te temel doğrulama DBSIZE ile toplam anahtar sayısını karşılaştırmaktır; veritabanı bazında dağılım INFO keyspace ile görülür. Redis'te yerleşik tablo-checksum yoktur; birebir içerik doğrulaması gerekiyorsa anahtar başına DUMP serileştirmesi alınıp iki taraf karşılaştırılır (TTL farkları göz önünde tutulmalı). riot compare aracı da kullanılabilir.

Elasticsearch

# Belge sayısını karşılaştır (kaynak ve hedef kümede)
GET musteri/_count

# Ayrıntı: sağlık/segment/depolama karşılaştırması için
GET _cat/indices/musteri?v&h=index,docs.count,store.size
# Örnekleme ile içerik: aynı _id'lerde GET musteri/_doc/<id> karşılaştır

Elasticsearch'te temel doğrulama her iki kümede GET <index>/_count ile belge sayısını karşılaştırmaktır (_cat/indices docs.count da hızlı özet verir). Karşılaştırmada _count esas alınmalı: _cat/indices docs.count Lucene düzeyinde sayar (nested alt belgeler dahil, ör. iki nested öğeli tek belge 3 sayılır); bu yüzden _count'tan farklı olabilir. İçerik doğrulaması için aynı _id kümesinde belgeler örneklenerek veya bir hash alanı üzerinden karşılaştırılır.

DBAtlas'ta aç →