la réplication transactionnelles sans clé primaire (index unique)
-
19-09-2019 - |
Question
Je viens à travers quelque chose d'inquiétant, je tentais de mettre en œuvre la réplication transactionnelle à partir d'une base de données dont la conception est pas sous notre contrôle. Cette réplication est afin d'effectuer des rapports sans imposer trop le système. À essayer la réplication seulement quelques-uns des tableaux ont traversé.
Sur les tables d'enquête n'ont pas été sélectionnés pour être reproduits parce qu'ils ne sont pas une clé primaire, je pensais que ce ne peut pas être il est même présenté comme une clé primaire si j'utilise ODBC et MS Access, mais pas en studio de gestion. De plus, les requêtes ne sont pas ridiculement lent.
J'ai essayé d'insérer un enregistrement en double et il a échoué en disant au sujet d'un index unique (pas une clé primaire). Semble être les tables ont été mises en œuvre en utilisant un indice unique s'opposer à une clé primaire. Pourquoi je ne sais pas que je pourrais crier.
Y at-il de toute façon d'effectuer la réplication transactionnelle ou une alternative, il doit être en direct (dernière minute ou deux). Le serveur principal db est actuellement SQL 2000 SP3a et le serveur de rapports 2005.
La seule chose que j'ai actuellement pensé à essayer est le réglage de la réplication comme si elle est un autre type de base de données. Je crois que la réplication de dire oracle est possible cette force serait l'utilisation de dire un pilote ODBC comme je suppose que l'accès utilise donc une clé montrant primaire. Je ne sais pas si cela est exact de ma profondeur à ce sujet.
La solution
, il est impossible de créer une transaction la réplication sur les tables sans clé primaire. Vous pouvez utiliser réplication de fusion (une manière), qui ne nécessite pas une clé primaire, et il crée automatiquement une colonne de rowguid
si elle n'existe pas:
réplication de fusion utilise une échelle mondiale colonne d'identifiant unique (GUID) à identifier chaque rangée lors de la fusion processus de réplication. Si une publication table n'a pas uniqueidentifier colonne avec la propriété ROWGUIDCOL et un index unique, la réplication ajoute un. Assurez-vous que tout SELECT et INSERT déclarations référence publiées tables utilisent des listes de colonnes. Si une table est pas publié plus et la réplication ajoute la colonne, la colonne est retiré; si la colonne déjà existe, il n'est pas supprimé.
Malheureusement, vous aurez une pénalité de performance si vous utilisez la réplication de fusion.
Si vous avez besoin d'utiliser la réplication pour rapports seulement, et vous n'avez pas besoin que les données soient exactement les mêmes que sur l'éditeur, alors vous pourriez envisager réplication de capture instantanée aussi