Pergunta

Em um cluster Oracle (mais do que uma máquina de co-operar para servir um banco de dados) será a função "sysdate" retornar sempre uma resposta consistente? Mesmo se o relógio do sistema operacional dos servidores relata valores inconsistentes?

Foi útil?

Solução

Eu fortemente suspeitar que SYSDATE é OS ligada também. Seja muito atento da razão por que você precisa usá-lo. Se tem alguma lógica que implementa incremental rastreamento de eventos (por exemplo, você está fazendo as exportações incrementais) e você deve garantir que não haja itens deixados de fora, bem como a não duplicação, a base de monitoramento em IDs seqüenciais em vez de SYSDATE.

Na verdade, isso é verdade mesmo para sistemas não-cluster, como SYSDATE pode, por vezes mudança (economia de tempo, erros sysadmin ...).

Outras dicas

SYSDATE é nó OS relacionados; se fosse garantida correta em todo o cluster, em seguida, os nós teria que sincronizar cada vez que você chamou SYSDATE. Em um ambiente em cluster, seqüências ordenadas são caros; melhor evitar, se possível. Uma seqüência ordenada irá garantir-lhe singularidade e ordem -. No entanto, você ainda pode obter lacunas se o processamento falhar depois de selecionar a partir da sequência e antes de cometer a transação

Usamos algumas soluções:

  1. Em geral, as sequências são definidas para não ordenada com grande cache tamanhos (25.000) para reduzir, inter aglomerado comunicação.
  2. Use NTP ao tempo-sync os nós (eles ainda podem ser incorretas, + / - nanossegundos, para que não pode contar com isso)
  3. Para registos estilo auditoria, usamos SYSTIMESTAMP (Timestamp (6)) como uma única identificador - e viver com o fato que é possível (embora extremamente improvável) que os logs poderia aparecer fora de ordem (isto é também possível com o normal processamento, dependendo de quando Compromete ocorrer)
  4. Quando um ordenado sequência é necessário, e não pode ser lacunas - utilizar uma sequência ordenada (Tentar evitar em um cluster meio ambiente como "cache" não ajuda)

  5. Quando uma seqüência ordenada é necessário - mas não pode haver lacunas - temos nossa mesa próprias seqüências, bloquear o registro, obter o número e em seguida, manter o registro bloqueado até os commits usuário; isso fará com que todo mundo tentando obter o mesmo seqüência de esperar até que o usuário do transação é totalmente comprometida - Evite fazer isso, se possível.

Use NTP de tempo de sincronização em todos os seus servidores (Oracle e de outra forma) e garantir que isso não aconteça. relógios do sistema inconsistentes são uma receita para o desastre.

eu acho que sysdate iria retornar resultados inconsistentes no cenário que você descreve.

Passei um (pouco) tempo procurando uma resposta para isso, mas não conseguiu encontrar um, mas, dado que sysdate está apenas retornando a data / hora do sistema operacional, eu dmitriy suspeito está correto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top