2010-12-08 7 views
0

Notre société utilise Sybase et nous prévoyons de mettre en place un système Mobilink (système de réplication de données). Nous devons donc passer de l'utilisation de colonnes auto-incrémentées à des colonnes autoincrémentielles globales.Modifier la colonne auto-incrémentée en colonne auto-incrémentée globale

Ma question est quelles étapes dois-je prendre pour que cela fonctionne correctement. Il existe déjà des milliers de lignes de données qui utilisent la valeur par défaut d'auto-incrémentation standard. Je pense que je dois créer une nouvelle colonne avec un autoincrément global par défaut, le remplir avec des données (nombre (*)), passer le PK, abandonner les anciens FK, supprimer l'ancienne colonne, renommer la nouvelle colonne à l'ancienne, puis réappliquer les FK.

Existe-t-il un moyen plus simple d'accomplir ce dont j'ai besoin ici?

merci!

Répondre

1

C'est généralement la façon de procéder. Mais il y a des déclarations spécifiques que vous faites qui me préoccupent. Aussi la séquence. Je ne suis pas certain de votre niveau d'expérience, les termes que vous utilisez peuvent être inexacts ou non.

Pour chaque table ...

... le commutateur PK lui

Et les valeurs FK dans les tableaux de l'enfant? Ou voulez-vous dire que vous allez les changer aussi?

... tomber l'ancien FK de

Ok, c'est la contrainte.

... supprimez l'ancienne colonne, renommez la nouvelle colonne en ancienne, puis réappliquez les FK.

Qu'entendez-vous exactement par là? Ajouter la contrainte FK dans? Cela ne changera pas les données existantes, il s'appliquera à toutes nouvelles lignes ajoutées.

J'espère que vous voyez ce que je veux dire par la séquence de vos tâches est suspecte. Avant de déposer le old_PK_column dans le parent, vous devez:

  1. Ajouter les contraintes FK a chuté dans chaque table enfant.

  2. Pour chaque table enfant: UPDATE toutes les valeurs FK à la nouvelle colonne_PK.

  3. Ensuite, supprimez old_PK_column.

+0

vos commentaires à la fin (le 1,2,3) sont ce que je disais dans une autre terminologie. Merci! vous donnera une coche :) – numone

+0

encore un peu nouveau sur le site, fait. :) – numone

+0

@numone. Merci! D'autres questions, s'il vous plaît poster. – PerformanceDBA

1

vous êtes juste changer les valeurs façon de PK sont générées, il suffit de:

ALTER TABLE <table> 
    modify <column> default global autoincrement (1000000); 

utiliser une taille de partition de 1,000,0000

assurez-vous également définir la identificateur de base de données globale dans chaque base de données, par exemple:

SET OPTION PUBLIC.global_database_id = 10; 

La prochaine PK qui sera générée est 10 000 001

Questions connexes