¿Qué tan grandes son los datos y qué tan rápidos son los enlaces entre las bases de datos y entre sí (y usted)? Hay varias ideas:
Si los datos son lo suficientemente pequeños como para que esto sea práctico, ejecute SELECT * FROM <table> ORDER BY <pk>
en cada base de datos, guarde los resultados en una pestaña o archivo delimitado por comas (no alineado con el espacio, ya que aumenta el tamaño del archivo resultante masivamente) y compare el resultado resultante con su tipo de diferencia preferido utilidad como winmerge. De esa manera, está comparando absolutamente todos los datos.
Si las bases de datos pueden verse entre sí (lo más probable es que puedan operar como socios de replicación) y el enlace entre ellas es de ancho de banda lo suficientemente alto y latencia lo suficientemente baja, puede usar la funcionalidad del servidor vinculado (consulte http://msdn.microsoft .com / en-us / library / ms190479.aspx y documentación relacionada) para comparar y comparar el contenido de las tablas en un par de sentencias SQL (enumerando las filas <table>
que no tienen filas idénticas <linked_server>.<db>..<table>
y viceversa) tal como compararía el contenido de dos tablas locales. Potencialmente, esta es una opción relativamente lenta, pero podría ser un control bastante potente para automatizar.
Si necesita usar sumas de verificación porque desea reducir en gran medida la cantidad de datos que deben transferirse, use en HASHBYTES
lugar de la CHECKSUM
familia de funciones, ya que puede usar hashes de mejor calidad para que esté más seguro de que saldrán iguales. Esto es más intensivo en la CPU, pero para grandes cantidades de datos estará vinculado a E / S y no a la CPU de todos modos, por lo que tendrá muchos ciclos libres (y para pequeñas cantidades simplemente no importará).
Como punto intermedio entre comparar todos los datos carácter por carácter y comparar una sola suma de verificación que cubre todos los datos, puede exportar SELECT <pk>, HASHBYTES('SHA1', <all-other-fields-concatenated>) ORDER BY <pk>
desde cada base de datos y comparar esos resultados para ver si son idénticos (o SELECT HASHBYTES('SHA1', <all-other-fields-concatenated>) ORDER BY <pk>
para reducir la cantidad de datos fluir, pero tener el PK en la salida significará que puede identificar las filas que difieren, si las hay, con menos consultas adicionales). Por supuesto, esta última opción no tiene sentido si los datos en la fila promedio son más pequeños que el hash resultante, en cuyo caso la opción "comparar todo " será más eficiente.