Question

Dans un cluster Oracle (plusieurs ordinateurs coopérant pour desservir une base de données), le paramètre "sysdate" fonction renvoie toujours une réponse cohérente? Même si l’horloge du système d’exploitation des serveurs affiche des valeurs incohérentes?

Était-ce utile?

La solution

Je soupçonne fortement que SYSDATE est également lié au système d'exploitation. Soyez très vigilant quant à la raison pour laquelle vous devez l’utiliser. Si vous avez une logique quelconque qui implémente le suivi incrémentiel des événements (par exemple, vous effectuez des exportations incrémentielles) et que vous devez vous assurer qu'aucun élément ne soit omis ni aucune duplication, basez le suivi sur des ID séquentiels plutôt que sur SYSDATE.

En fait, cela est vrai même pour les systèmes sans cluster, car SYSDATE peut parfois changer (gain de temps, erreurs sysadmin ...).

Autres conseils

SYSDATE est lié au système d'exploitation du noeud; si la garantie était correcte sur le cluster, les nœuds devraient se synchroniser à chaque fois que vous appelez SYSDATE. Dans un environnement en cluster, les séquences ordonnées sont coûteuses; mieux éviter si possible. Une séquence ordonnée vous garantira unicité et un ordre. Toutefois, vous pouvez toujours obtenir des lacunes si le traitement échoue après la sélection dans la séquence et avant la validation de la transaction.

Nous utilisons quelques solutions de contournement:

  1. En général, les séquences sont définies sur non ordonné avec une grande taille de cache (25 000) pour réduire inter cluster communication.
  2. Utiliser NTP pour synchroniser le temps les nœuds (ils peuvent encore être incorrect, + / - nanosecondes, de sorte que vous ne peut pas compter sur cela)
  3. Pour les journaux de style d'audit, nous utilisons systimestamp. (horodatage (6)) comme unique identifiant - et vivre avec le fait qu'il est possible (bien que très peu probable) que les journaux pourrait apparaître hors d'usage (c'est également possible avec normal traitement, selon quand Les commits se produisent)
  4. Où un commandé séquence est nécessaire, et il peut être des lacunes - utiliser une séquence ordonnée (essayez d'éviter dans un cluster environnement en tant que " cache " n'aide pas)

  5. Où une séquence ordonnée est nécessaire - mais il ne peut y avoir d’espace vide - nous avons notre propre tableau de séquences, verrouillons l’enregistrement, obtenons le nombre et puis garder le dossier verrouillé jusqu'à ce que l'utilisateur s'engage; cela causera tout le monde essaie d'obtenir le même séquence d'attendre jusqu'à ce que l'utilisateur la transaction est totalement engagée - évitez autant que possible.

Utilisez NTP pour synchroniser l'heure sur tous vos serveurs (Oracle et autres) et vous assurer que cela ne se produise pas. Des horloges système incohérentes sont la recette du désastre.

Je devrais deviner que sysdate renverrait des résultats incohérents dans le scénario que vous décrivez.

J'ai passé (un peu) de temps à chercher une réponse à cette question, mais je n'ai pas pu en trouver une, mais, étant donné que sysdate renvoie simplement la date et l'heure du système d'exploitation, je soupçonne que dmitriy est correct.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top