2009-03-03 10 views
0

J'ai besoin de synchroniser une base de données SQL Server à Oracle via une passerelle transparente Oracle. La synchronisation est effectuée par lots, j'ai donc besoin d'obtenir le prochain ensemble de données à partir du point où je me suis arrêté.Comment avoir des synchronisations incrémentielles partielles basées sur un GUID?

Le problème que j'ai est que le seul champ que j'ai dans la source, pour m'aider, est un GUID. S'il s'agissait d'un nombre que je pouvais simplement commander, gardez le dernier traité et redémarrez le processus en obtenant les enregistrements qui sont> mon numéro enregistré. Cela ne fonctionnera pas avec un GUID.

Des idées?

Répondre

0

Apparemment, cela fonctionne: SELECT * FROM v_source_supplier_prices OU HEXTORAW (REPLACE (ID, '-', ''))> HEXTORAW (REPLACE ('0022F17B-24B3-43EC-8D81-FFD3149950E7', '-', '')) ORDER BY HEXTORAW (REMPLACER (ID, '-', ''))

ID est le champ GUID sur le système source.

Je ne sais pas à quel prix ...

+0

Quelque chose à ajouter à la "liste de choses à ne pas faire confiance". :) –

0

Vous pouvez trier les chaînes (varchar, varchar2) trop alors pourquoi avez-vous besoin d'un numéro? N'est-il pas plus rapide de convertir les guids en chaînes. Peut-être qu'ils sont déjà stockés en tant que chaînes?

+0

Je pense que le problème est que les nouveaux enregistrements ne peuvent pas être garantis d'être ajoutés "après" un GUID particulier où la dernière synchronisation a terminé. S'il a commandé par GUID, il peut manquer un enregistrement "avant" le GUID "le plus élevé". –

+0

Il est vrai qu'on peut interpréter la question différemment. "si c'est un nombre". Vous pensez que l'OP signifie un nombre qui augmente avec le temps comme une séquence. Pourrait être. – tuinstoel

Questions connexes