Проверка после миграции (число строк/контрольная сумма)
Oracle
-- Compare row counts on source and target
SELECT 'customer' table_name, COUNT(*) row_count FROM customer;
-- To find content differences at object level, DBMS_COMPARISON (via db link)
BEGIN DBMS_COMPARISON.CREATE_COMPARISON(
comparison_name => 'COMPARE_CUSTOMER',
schema_name => 'SHOP', object_name => 'CUSTOMER',
dblink_name => 'TARGET_DB'); END;
/
-- SELECT DBMS_COMPARISON.COMPARE('COMPARE_CUSTOMER', scan_info) FROM dual;Самая быстрая проверка — сравнить COUNT(*) по каждой таблице на обеих сторонах. Чтобы найти реальные различия содержимого на уровне строк, используйте пакет DBMS_COMPARISON: он построчно сравнивает исходную и целевую таблицы через database link и может показать/устранить различия. Для контрольных сумм дайджест столбцов можно снять через ORA_HASH или STANDARD_HASH.
PostgreSQL
-- Row count
SELECT count(*) FROM customer;
-- Ordered digest (checksum) of the whole table content — compare on both sides
SELECT md5(string_agg(t.row_md5, '' ORDER BY t.row_md5)) AS digest
FROM (SELECT md5(customer::text) AS row_md5 FROM customer) t;Первый шаг — сравнить count(*) по каждой таблице. Для проверки содержимого вычислите md5 текстового представления каждой строки, соедините их в отсортированном порядке и снова захэшируйте; это даёт контрольную сумму, не зависящую от порядка, для сравнения двух сторон. Для больших данных берите дайджест только по изменяемым/ключевым столбцам; для воспроизводимости важна сортировка по PK.
MySQL
-- Built-in table checksum (run on both servers and compare)
CHECKSUM TABLE customer;
-- Row count
SELECT COUNT(*) FROM customer;
-- Preferred tool for live/large environments (compares row chunks online):
-- pt-table-checksum h=source,D=shop (Percona Toolkit)В MySQL CHECKSUM TABLE даёт одну контрольную сумму содержимого таблицы; выполните его на источнике и цели и сравните (движок/версия должны совпадать). Для числа строк используйте COUNT(*). В живом продакшене и для согласованности репликации отраслевой стандарт — pt-table-checksum из Percona Toolkit; он сравнивает по чанкам, онлайн и с малым влиянием.
SQL Server
-- Full row-level comparison (official tool that produces differences)
tablediff -sourceserver S1 -sourcedatabase shop -sourcetable customer \
-destinationserver S2 -destinationdatabase shop -destinationtable customer
-- Quick aggregate checksum (single query, compare on both sides):
SELECT COUNT_BIG(*) row_count, CHECKSUM_AGG(BINARY_CHECKSUM(*)) digest FROM dbo.customer;В SQL Server официальная утилита командной строки для поиска различий на уровне строк — tablediff (сообщает, какие строки добавлены/изменены, а с необязательным -f пишет скрипт исправления). Для быстрой общей проверки CHECKSUM_AGG(BINARY_CHECKSUM(*)) даёт один дайджест таблицы; сравнивайте обе стороны вместе с COUNT_BIG(*) (не зависит от порядка строк).
MongoDB
// Compare document counts (on source and target)
db.customer.countDocuments({});
// For a content checksum, dbHash (md5 digest at collection/DB level):
db.runCommand({ dbHash: 1, collections: ["customer"] });
// -> compare the md5 field across both environments.Первая проверка — сравнить число документов на обеих сторонах через countDocuments() (estimatedDocumentCount быстр, но опирается на метаданные; для точного подсчёта используйте countDocuments). Для проверки содержимого команда dbHash создаёт md5-дайджест на уровне коллекции/базы; сравните хэши двух сред. Индексы проверяйте отдельно через getIndexes().
Redis
# Compare key counts (on source and target)
redis-cli DBSIZE
# For a memory/data summary and key distribution:
redis-cli INFO keyspace # db0:keys=... information
# For full content verification: DUMP each key and compare with the target
# (e.g. redis-cli --scan | xargs -I{} redis-cli DUMP {})В Redis базовая проверка — сравнение общего числа ключей через DBSIZE; распределение по базам показывает INFO keyspace. Встроенной контрольной суммы таблиц в Redis нет; если нужна точная проверка содержимого, снимите сериализацию DUMP по каждому ключу и сравните обе стороны (учитывайте различия TTL). Можно также использовать инструмент riot compare.
Elasticsearch
# Compare document counts (on source and target clusters)
GET customer/_count
# Details: for health/segment/storage comparison
GET _cat/indices/customer?v&h=index,docs.count,store.size
# Content by sampling: compare GET customer/_doc/<id> for the same _idsВ Elasticsearch базовая проверка — сравнение числа документов в обоих кластерах через GET <index>/_count (_cat/indices docs.count тоже даёт быструю сводку). Опирайтесь на _count: _cat/indices docs.count считает на уровне Lucene (включая вложенные nested-поддокументы, напр. один документ с двумя nested-элементами считается как 3), поэтому может отличаться от _count. Для проверки содержимого сравнивайте выборку документов по одному набору _id или через поле хэша.