Normas de aplicación de la replicación SQL

Existen normas relacionadas con la implementación de la replicación SQL. En un entorno de replicación, las sentencias SQL que no se pueden replicar utilizando la repetición de sentencias se replican por valor o se rechazan con un error de replicación.

Las siguientes reglas se aplican a la implementación de la replicación SQL:
  • Las transacciones de actualización contra datos replicados o datos globales deben realizarse en el nodo primario.
  • Las transacciones de actualización de datos globales como usuarios, grupos, definiciones de seguridad y privilegios globales sólo se permiten en el primario cuando existe una conexión a una base de datos replicada o a la base de datos SYSTEM.
  • La base de datos SYSTEM no se replica. Esto se aplica a los objetos locales, como tablas y vistas. Dado que los objetos globales no forman parte de ninguna base de datos replicada, se replican.
  • Las tablas temporales no se replican. Sin embargo, el uso de tablas temporales en una transacción de actualización (una transacción que accede a una tabla temporal y luego escribe en una tabla replicada no temporal) desencadena la replicación por valor. Es decir, las tablas temporales son como cualquier otro recurso no replicado que se permite y soporta utilizando la replicación por valor.
  • Las transacciones de actualización contra objetos replicados que seleccionan de bases de datos no replicadas, tablas de sistema y tablas virtuales activan la replicación por valor.
  • Si el nodo primario está suspendido, cualquier transacción SQL de actualización contra una base de datos replicada produce un error. Las transacciones deben comenzar y terminar en un lapso de tiempo durante el cual la replicación estuvo continuamente activa.
  • Si desea utilizar una cláusula WHERE en una expresión SQL que depende de que el optimizador elija un orden de ejecución específico, debe reescribir la cláusula para utilizar una sentencia IF/THEN. De lo contrario, el primario y la réplica podrían evaluar la cláusula en una secuencia diferente, dando lugar a un error de división por cero. Por ejemplo, la sentencia que sigue, si se evalúa en el orden inverso, devuelve un error de división por cero:
    ( ID <> 0 and ( XYZ / ID > 10) )
    Para corregir el problema, reescriba la sentencia con un IF/THEN anidado:
    IF ID <> 0 THEN IF ( XYZ / ID > 10 )
  • El uso de sentencias SQL con funciones de agregación, como SUM o AVG, al modificar tipos de doble precisión u otros tipos de coma flotante podría provocar un desajuste de datos entre el primario y la réplica al utilizar la replicación by-SQL. Esto también puede ocurrir con dos consultas en un mismo host, debido a las limitaciones inherentes a los tipos de datos de coma flotante. El procesamiento de valores IEEE-754 de precisión finita requiere consideraciones especiales, como el uso de los operadores menor que y mayor que en lugar de igual. Para garantizar resultados idénticos bit a bit, establezca la variable de sesión REPLICATE_ALWAYS_BY_VALUE en ON para la sesión que está ejecutando transacciones SQL de actualización.
  • Una tabla se convierte en una tabla versionada cuando los usuarios añaden o eliminan columnas de la tabla. En un entorno de replicación, la actualización de filas en una tabla versionada puede provocar la suspensión de la réplica con el siguiente error:Versioned tables do not support DELETE operations that join again to the versioned table. Para evitar este error, ejecute el comando GROOM TABLE con la opción VERSIONS en el nodo primario después de añadir o eliminar columnas, dentro de la misma transacción.
Para obtener una lista de comandos SQL en el entorno de replicación que difieren de los comandos SQL estándar de Netezza®, consulte Diferencias de comandos SQL en el entorno de replicación.