2011-03-17 4 views
1

J'ai deux bases de données identiques sur deux serveurs différents: un serveur principal et un serveur de sauvegarde. Les utilisateurs sont actuellement dans les deux serveurs. Nous avons une colonne OrderId dans tblOrder dans les deux db en tant que clé primaire auto-incrémentée. Maintenant quand je publie le orderid à notre serveur d'amazon il montre parfois une erreur parce que le orderid sur les deux bases de données sont le même nombre et un orderid en double n'est pas accepté par le système.Obtenir l'ID max en comparant deux bases de données différentes

Je veux obtenir le maximum de commande du serveur et donner le nouveau code à la base de données en cours. Je vais enlever la graine d'incrémentation automatique de lui, de sorte que sur la commande d'insertion j'insérerai le orderid manuellement.

+0

Est-ce SQL-Server ou Oracle? – CloudyMarble

+0

remercie les gars pour une si bonne idée. Je vais certainement l'implémenter. :-D –

+0

La solution ici consiste à sortir vos utilisateurs de production de votre base de données de sauvegarde. –

Répondre

4

Solutions:

  1. Comme déjà mentionné, vous pouvez modifier l'incrément de chaque champ d'identité à 2, et avoir un serveur avec une graine de 1 et la En supposant que vous ne prévoyez pas gérer plus de 1 milliard de commandes sur chaque serveur, il suffit de définir la graine sur le deuxième serveur à 1 000 000 000. Pas besoin de changer l'incrément.

  2. Utilisez un uniqueidentifier (GUID) comme clé principale plutôt qu'un nombre entier. Pour SQL Server 2005 et versions ultérieures, vous pouvez définir une contrainte par défaut sur NEWSEQUENTIALID() pour empêcher les insertions de créer en permanence des divisions de page.

+0

Je suis d'accord avec votre opinion, mais notre serveur fait quotidiennement une transaction pour environ 5.000.000 par jour. Cela fonctionnera bien. Mais ce n'est pas une solution permanente. Mais je vais mettre en place votre point 3, c'est très utile en effet. Merci :-D pour le partage. –

1

Dans MS-SQL, vous pouvez spécifier un champ Seed et un élément Increment pour un numéro automatique. font les graines différentes et mettre increment = 2

+0

Il peut être utile de mentionner la différence entre les deux graines doit être étrange :) –

Questions connexes