4D v16

SYNCHRONIZE

Página Inicial

 
4D v16
SYNCHRONIZE

SYNCHRONIZE  


 

 

SYNCHRONIZE
[LOCAL] TABLE ref_tabela (ref_coluna_1,...,ref_coluna_N)
WITH
[REMOTE] TABLE ref_tabela (ref_coluna_1,...,ref_coluna_N)
FOR REMOTE [STAMP] {número_inteiro | ref_linguagem_4d},
LOCAL [STAMP] {número_inteiro | ref_linguagem_4d}
{REMOTE OVER LOCAL | LOCAL OVER REMOTE}
LATEST REMOTE [STAMP] ref_linguagem_4d,
LATEST LOCAL [STAMP] ref_linguagem_4d;

O comando SYNCHRONIZE permite sincronizar duas tabelas localizadas em dois servidores 4D SQL diferentes. Toda mudança realizada em uma das tabelas também é realizada no outro. O servidor 4D SQL que executa o comando se chama servidor local e o outro servidor se chama servidor remoto.

O comando SYNCHRONIZE é uma combinação de duas chamadas internas ao comando REPLICATE. A primeira chamada replica os dados desde o servidor remoto ao servidor local e a segunda realiza a operação inversa: replicação dos dados do servidor local ao servidor remoto. As tabelas a sincronizar devem estar configuradas para a replicação

  • Devem ter uma chave primária,
  • A opção "Ativar replicação" deve estar selecionada na janela Inspetor de cada tabela.

Para maior informação, consulte a descrição do comando REPLICATE.

O comando SYNCHRONIZE aceita quatro marcadores (stamps) como "parâmetros": dois marcadores em entrada e dois marcadores em saída (última modificação). Os marcadores de entrada se utilizam para indicar o momento da última sincronização em cada servidor. Os marcadores de saída devolvem o valor dos marcadores de modificação em cada servidor justo depois da última modificação. Graças a este princípio, quando o comando SYNCHRONIZE se chama regularmente, é possível usar os marcadores de saída da última sincronização como marcadores de entrada para a seguinte. 

Nota: Os marcadores de entrada e de saída se expressam como valores numéricos (stamps) e não de marcadores de tempo (timestamps). Para obter mais informação sobre estes marcadores, consulte a descrição do comando REPLICATE

Em caso de erro, o marcador de saída do servidor em questão contém o marcador do registro a origem do erro. Se o erro deve ser a uma causa diferente a sincronização (problemas de rede por exemplo), o marcador conterá 0.
Há dois códigos de erro diferentes, um para indicar um erro de sincronização no site local e outro para um erro de sincronização no site remoto.
Quando ocorre um erro, o estado dos dados dependerá da transação no servidor local. No servidor remoto, a sincronização se realiza sempre dentro de uma transação, de forma que os dados não possam ser alterados pela operação. No entanto, no servidor local, o processo de sincronização fica sob o controle do desenvolvedor. É realizado fora de qualquer transação se a preferência Transações Auto-commit não está ativada, (caso contrário, um contexto de transação é criado automaticamente). O desenvolvedor pode optar por iniciar uma transação e é responsabilidade do desenvolvedor validar ou cancelar esta transação depois da sincronização dos dados. 

Pode "forçar" o endereço de sincronização utilizando as cláusulas REMOTE OVER LOCAL e LOCAL OVER REMOTE, dependendo das características de sua aplicação. Para maior informação sobre os mecanismos de implementação, consulte a descrição do comando REPLICATE.
  
Nota: As operações realizadas pelo comando SYNCHRONIZE não levam em consideração restrições de integridade dos dados. Isto significa, por exemplo, que as regras que regem as chaves externas, singularidade, etc. não são verificadas. Se os dados recebidos podem afetar a integridade de dados, deve verificar os dados depois da operação de sincronização. A forma mais simples é bloquear, via a linguagem 4D ou SQL, os registros que devem ser modificados.

Nas variáveis 4d_linguagem_ref das cláusulas LATEST REMOTE STAMP e LATEST LOCAL STAMP, 4D devolve os valores dos últimos marcadores das tabelas remota e local. Esta informação lhe permite automatizar a gestão do procedimento de sincronização. Estes valores correspondem ao valor dos marcadores até o final da operação de replicação: se os utiliza em uma instrução REPLICATE ou SYNCHRONIZE posterior, não os necessita incrementar; se incrementam automaticamente antes de ser devolvidos pelo comando REPLICATE.

Exemplo  

Para entender os mecanismos envolvidos na operação de sincronização, vamos a examinar as diferentes possibilidades relativas a atualização de um registro existente nas duas bases sincronizadas.

O método de sincronização é da seguinte forma:

 C_LONGINT(vRemoteStamp)
 C_LONGINT(vLocalStamp)
 C_LONGINT(vLatestRemoteStamp)
 C_LONGINT(vLatestLocalStamp)
 
 vRemoteStamp:=X... // ver valores no array a continuação
 vLocalStamp:=X... // ver valores no array a continuação
 vLatestRemoteStamp:=X... // valor devolvido em um anterior LATEST REMOTE STAMP
 vLatestLocalStamp:=X... // valor devolvido em um 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 no array a continuação
        LATEST REMOTE STAMP :vLatestRemoteStamp,
        LATEST LOCAL STAMP :vLatestLocalStamp;
 End SQL

Os dados iniciais são:

  • O marcador do registro na base LOCAL tem um valor de 30 e o da base REMOTA tem um valor de 4000
  • Os valores do campo MeuCampo são os seguintes:
    LOCALREMOTE
    Antigo valorNovo valorAntigo valorNovo valor
    AAABBBAAACCC
  • Utilizamos os valores devolvidos pelas cláusulas anteriores LATEST LOCAL STAMP e LATEST REMOTE STAMP para sincronizar unicamente os valores que foram modificados desde a última sincronização.

Estas são as sincronizações realizadas pelo comando SYNCHRONIZE em função dos valores passados nos parâmetros LOCAL STAMP e REMOTE STAMP como também a opção de prioridade utilizada: ROL (para REMOTE OVER LOCAL) ou LOR (para LOCAL OVER REMOTE):

LOCAL STAMPREMOTE STAMPPrioridadeLOCAL depois de sincREMOTA depois de sincSincronização LOCAL - REMOTA
203000ROLCCCCCC<---->
203000LORBBBBBB<---->
313000ROLCCCCCC<--
313000LORCCCCCC<--
204001ROLBBBBBB-->
204001LORBBBBBB-->
314001ROLBBBCCCSem sincronização
314001LORBBBCCCSem sincronização
403000ROLCCCCCC<--
403000LORCCCCCC<--
205000ROLBBBBBB-->
205000LORBBBBBB-->
405000ROLBBBCCCSem sincronização
405000LORBBBCCCSem sincronização



Ver também 

REPLICATE

 
PROPRIEDADES 

Produto: 4D
Tema: Comandos SQL

 
HISTÓRIA 

 
ARTICLE USAGE

Manual de SQL ( 4D v16)