4D v16

SYNCHRONIZE

Inicio

 
4D v16
SYNCHRONIZE

SYNCHRONIZE  


 

 

SYNCHRONIZE
[LOCAL] TABLE ref_tabla (ref_columna_1,...,ref_columna_N)
WITH
[REMOTE] TABLE ref_tabla (ref_columna_1,...,ref_columna_N)
FOR REMOTE [STAMP] {número_entero | ref_lenguaje_4d},
LOCAL [STAMP] {número_entero | ref_lenguaje_4d}
{REMOTE OVER LOCAL | LOCAL OVER REMOTE}
LATEST REMOTE [STAMP] ref_lenguaje_4d,
LATEST LOCAL [STAMP] ref_lenguaje_4d;

El comando SYNCHRONIZE permite sincronizar dos tablas ubicadas en dos servidores 4D SQL diferentes. Todo cambio realizado en una de las tablas también se efectúa en el otro. El servidor 4D SQL que ejecuta el comando se llama servidor local y el otro servidor se llama servidor remoto.

El comando SYNCHRONIZE es una combinación de dos llamadas internas al comando REPLICATE. La primera llamada replica los datos desde el servidor remoto al servidor local y la segunda efectúa la operación inversa: replicación de los datos del servidor local al servidor remoto. Las tablas a sincronizar deben estar configuradas para la replicación

  • Deben tener una llave primaria,
  • La opción "Activar replicación" debe estar seleccionada en la ventana Inspector de cada tabla.

Para mayor información, consulte la descripción del comando REPLICATE.

El comando SYNCHRONIZE acepta cuatro marcadores (stamps) como "parámetros": dos marcadores en entrada y dos marcadores en salida (última modificación). Los marcadores de entrada se utilizan para indicar el momento de la última sincronización en cada servidor. Los marcadores de salida devuelven el valor de los marcadores de modificación en cada servidor justo después de la última modificación. Gracias a este principio, cuando el comando SYNCHRONIZE se llama regularmente, es posible usar los marcadores de salida de la última sincronización como marcadores de entrada para la siguiente. 

Nota: los marcadores de entrada y de salida se expresan como valores numéricos (stamps) y no de marcadores de tiempo (timestamps). Para obtener más información sobre estos marcadores, consulte la descripción del comando REPLICATE

En caso de error, el marcador de salida del servidor en cuestión contiene el marcador del registro al origen del error. Si el error se debe a una causa distinta a la sincronización (problemas de red por ejemplo), el marcador contendrá 0.
Hay dos códigos de error diferentes, uno para indicar un error de sincronización en el sitio local y otro para un error de sincronización en el sitio remoto.
Cuando ocurre un error, el estado de los datos dependerá de la de la transacción en el servidor local. En el servidor remoto, la sincronización se realiza siempre dentro de una transacción, de manera que los datos no puedan ser alterados por la operación. Sin embargo, en el servidor local, el proceso de sincronización queda bajo el control del desarrollador. Se efectúa fuera de cualquier transacción si la preferencia Transacciones Auto-commit no está activada, (de lo contrario, un contexto de transacción se crea automáticamente). El desarrollador puede optar por iniciar una transacción y es responsabilidad del desarrollador validar o cancelar esta transacción después de la sincronización de los datos. 

Puede "forzar" la dirección de sincronización utilizando las cláusulas REMOTE OVER LOCAL y LOCAL OVER REMOTE, dependiendo de las características de su aplicación. Para mayor información sobre los mecanismos de implementación, consulte la descripción del comando REPLICATE.
  
Nota: las operaciones efectuadas por el comando SYNCHRONIZE no tienen en cuenta restricciones de integridad de los datos. Esto significa, por ejemplo, que las reglas que rigen las llaves foráneas, unicidad, etc. no son verificadas. Si los datos recibidos pueden afectar la integridad de datos, debe verificar los datos después de la operación de sincronización. La manera más simple es bloquear, vía el lenguaje 4D o SQL, los registros que deben modificarse.

En las variables 4d_language_ref de las cláusulas LATEST REMOTE STAMP y LATEST LOCAL STAMP, 4D devuelve los valores de los últimos marcadores de las tablas remota y local. Esta información le permite automatizar la gestión del procedimiento de sincronización. Estos valores corresponden al valor de los marcadores hasta el final de la operación de replicación: si los utiliza en una instrucción REPLICATE o SYNCHRONIZE posterior, no necesita incrementarlos; se incrementan automáticamente antes de ser devueltos por el comando REPLICATE.

Ejemplo  

Para entender los mecanismos involucrados en la operación de sincronización, vamos a examinar las diferentes posibilidades relativas a la actualización de un registro existente en las dos bases sincronizadas.

El método de sincronización es de la siguiente forma:

 C_LONGINT(vRemoteStamp)
 C_LONGINT(vLocalStamp)
 C_LONGINT(vLatestRemoteStamp)
 C_LONGINT(vLatestLocalStamp)
 
 vRemoteStamp:=X... // ver valores en el array a continuación
 vLocalStamp:=X... // ver valores en el array a continuación
 vLatestRemoteStamp:=X... // valor devuelto en un anterior LATEST REMOTE STAMP
 vLatestLocalStamp:=X... // valor devuelto en un anterior LATEST LOCAL STAMP
 
 Begin SQL
    SYNCHRONIZE
        LOCAL MYTABLE (MyField)
        WITH
        REMOTE MYTABLE (MyField)
        FOR REMOTE STAMP :vRemoteStamp,
        LOCAL STAMP :vLocalStamp
        LOCAL OVER REMOTE  // or REMOTE OVER LOCAL, ver en el array a continuación
        LATEST REMOTE STAMP :vLatestRemoteStamp,
        LATEST LOCAL STAMP :vLatestLocalStamp;
 End SQL

Los datos iniciales son:

  • El marcador del registro en la base LOCAL tiene un valor de 30 y el de la base REMOTA tiene un valor de 4000
  • Los valores del campo MiCampo son los siguientes:
    LOCALREMOTE
    Antiguo valorNuevo valorAntiguo valorNuevo valor
    AAABBBAAACCC
  • Utilizamos los valores devueltos por las cláusulas anteriores LATEST LOCAL STAMP y LATEST REMOTE STAMP para sincronizar únicamente los valores que fueron modificados desde la última sincronización.

Estas son las sincronizaciones efectuadas por el comando SYNCHRONIZE en función de los valores pasados en los parámetros LOCAL STAMP y REMOTE STAMP como también la opción de prioridad utilizada: ROL (para REMOTE OVER LOCAL) o LOR (para LOCAL OVER REMOTE):

LOCAL STAMPREMOTE STAMPPrioridadLOCAL después de sincREMOTA después de sincSincronización LOCAL - REMOTA
203000ROLCCCCCC<---->
203000LORBBBBBB<---->
313000ROLCCCCCC<--
313000LORCCCCCC<--
204001ROLBBBBBB-->
204001LORBBBBBB-->
314001ROLBBBCCCSin sincronización
314001LORBBBCCCSin sincronización
403000ROLCCCCCC<--
403000LORCCCCCC<--
205000ROLBBBBBB-->
205000LORBBBBBB-->
405000ROLBBBCCCSin sincronización
405000LORBBBCCCSin sincronización



Ver también 

REPLICATE

 
PROPIEDADES 

Producto: 4D
Tema: Comandos SQL

 
HISTORIA 

 
ARTICLE USAGE

Manual de SQL ( 4D v16)