DBAtlas · Atlas de operaciones de bases de datos

Verificación posterior a la migración (número de filas/checksum)

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;

La comprobación más rápida es comparar COUNT(*) por tabla en ambos lados. Para encontrar diferencias reales de contenido a nivel de fila, use el paquete DBMS_COMPARISON: compara las tablas de origen y destino fila a fila a través de un database link y puede informar/converger las diferencias. Para checksums, se puede obtener un digest de columnas con ORA_HASH o 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;

El primer paso es comparar count(*) en cada tabla. Para verificar el contenido, aplique md5 a la representación de texto de cada fila, concaténelas en orden y vuelva a calcular el hash; así se obtiene un checksum independiente del orden en ambos lados. Para grandes volúmenes, calcule el digest solo sobre las columnas mutables/clave; ordenar por PK es importante para la repetibilidad.

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)

En MySQL, CHECKSUM TABLE da un único checksum del contenido de la tabla; ejecútelo en origen y destino y compare (el engine/versión debe ser el mismo). Use COUNT(*) para el número de filas. En producción en vivo y para la consistencia de la replicación, el estándar del sector es pt-table-checksum de Percona Toolkit; compara por chunks, en línea y con bajo impacto.

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;

En SQL Server, la herramienta oficial de línea de comandos que encuentra diferencias a nivel de fila es tablediff (informa qué filas se añadieron/cambiaron y, con la opción -f, escribe un script de corrección). Para una comprobación global rápida, CHECKSUM_AGG(BINARY_CHECKSUM(*)) da un único digest de la tabla; compare ambos lados junto con COUNT_BIG(*) (independiente del orden de las filas).

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.

La primera comprobación es comparar el número de documentos en ambos lados con countDocuments() (estimatedDocumentCount es rápido pero se basa en metadatos; use countDocuments para un recuento exacto). Para verificar el contenido, el comando dbHash genera un digest md5 a nivel de colección/base de datos; compare los hashes de ambos entornos. Revise los índices por separado con 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 {})

En Redis, la verificación básica es comparar el número total de claves con DBSIZE; INFO keyspace muestra la distribución por base de datos. Redis no tiene un checksum de tabla integrado; si se necesita una verificación exacta del contenido, obtenga la serialización DUMP por clave y compare ambos lados (tenga en cuenta las diferencias de TTL). También se puede usar la herramienta 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

En Elasticsearch, la verificación básica es comparar el número de documentos en ambos clústeres con GET <index>/_count (docs.count de _cat/indices también da un resumen rápido). Base la comparación en _count: docs.count de _cat/indices cuenta a nivel de Lucene (incluidos los subdocumentos nested; p. ej., un documento con dos elementos nested cuenta como 3), por lo que puede diferir de _count. Para verificar el contenido, compare tomando una muestra de documentos sobre el mismo conjunto de _id o mediante un campo hash.

Abrir en DBAtlas →