Sincronización

IBM® Netezza® Replication Services utiliza dos enfoques para mantener la sincronización: La replicación de sentencias SQL (replicación by-SQL) y la replicación de valores de cambio (replicación by-value). El método que se utiliza se basa en si la transacción SQL contiene un valor determinista.

Una sentencia SQL es determinista en un conjunto de replicación si devuelve el mismo resultado cuando se ejecuta en cualquier nodo de replicación del conjunto. Esta definición es diferente de la de una declaración en un único nodo NPS. Por ejemplo, una función que devuelve un ID de objeto es determinista en un único nodo NPS, pero es no determinista en un entorno de replicación, porque diferentes nodos de replicación podrían asignar diferentes IDs para el mismo objeto.

Replicación By-SQL

Con la replicación by-SQL, cuando se ejecutan transacciones SQL en el lado primario, la misma replicación by-SQL se transporta al lado réplica y se ejecuta allí. Para ello, el primario registra las sentencias SQL Data Manipulation Language (DML) y Data Definition Language (DDL) que actualizan sus bases de datos replicadas y las escribe en el registro de replicación. El registro también captura datos de tablas externas que se utilizan para modificar tablas. A continuación, Netezza Replication Services copia el registro a través de la red a todos los nodos de réplica del conjunto de replicación. Cuando la réplica replica el registro, replica y aplica las sentencias de forma by-SQL.

Replicación por valor

Sin embargo, hay algunos casos en los que una replicación by-SQL contiene un valor no determinista (una sentencia SQL que puede producir diferentes resultados cuando se ejecuta en diferentes hosts). Por ejemplo, debido al tiempo de cruce de red, diferencias de zona horaria o latencia, una sentencia SQL que llame a la función now() devolvería resultados diferentes si se ejecuta en el primario y luego se reproduce en la réplica. En tales situaciones, la captura y reproducción de la sentencia SQL por sí sola no podría dar lugar a bases de datos sincronizadas. Para manejar operaciones SQL no deterministas, el primario procesa la transacción por valor en lugar de por SQL. Es decir, al detectar valores no deterministas, el primario captura el conjunto de resultados de las sentencias SQL y lo envía a la réplica. Cuando la réplica reproduce el registro, aplica el efecto neto (el DDL y la fila antes y después de la captura de imagen) de la sentencia SQL en el primario.

La hora actual y la fecha son ejemplos de funciones no deterministas que se soportan a través de la replicación by-value. Cuando se ejecutan las funciones de fecha y hora actuales, el registro de replicación captura el valor primario y lo replica por valor a la réplica. El efecto de la replicación by-value es que las réplicas tienen valores idénticos a los del primario, en lugar de evaluar la hora y la fecha en que la réplica ejecutó la consulta.

Requisitos para la sincronización inicial de bases de datos en un entorno replicado

Para garantizar un contenido idéntico antes de iniciar la replicación, Netezza Replication Services utiliza el siguiente enfoque para inicializar un conjunto de replicación:
  1. Para que todos los datos globales sean idénticos en todos los nodos replicados, haga una copia de seguridad de los datos en las réplicas y restáurelos en el primario. Esto garantiza que no existan objetos globales duplicados y que el primario tenga una copia de cada objeto global de su catálogo. Para obtener más información, consulte Preparación del primario para nuevas réplicas.
  2. En el nodo primario, realice una colección de copias de seguridad de cada base de datos replicada y utilícelas para restaurar la base de datos en todos los nodos réplica. Este paso garantiza que cada nodo tenga valores idénticos para todas las bases de datos replicadas.

Partiendo de contenidos de base de datos idénticos, la replicación by-SQL mantiene las réplicas idénticas a la primaria. Por ejemplo, una cláusula WHERE de actualización siempre selecciona filas en las réplicas que son idénticas a las filas que se seleccionan en el primario. En los casos en los que se permiten resultados no deterministas, como para la función DATE/TIME, la replicación by-value mantiene sincronizadas las bases de datos.