Dans SQL Server 2008, j'ai ma table parente dans une base de données et la table enfant dans une autre base de données, avec une relation FK gérée par des déclencheurs. Je ne peux pas le changer, je ne peux pas déplacer les deux tables dans une DB et avoir une contrainte FK régulière. Lorsque j'ai restauré les deux bases de données à partir de sauvegardes complètes, j'avais des orphelins dans ma table enfant, car les sauvegardes complètes n'étaient pas prises en même temps. J'ai aussi des journaux de transactions. En cas de reprise après sinistre, puis-je restaurer les deux bases de données exactement au même moment, afin que les deux bases de données soient cohérentes?Restauration simultanée de deux bases de données en même temps
Répondre
La restauration au même instant est possible tant que les bases de données sont en mode de récupération complète et que des sauvegardes de journal standard sont effectuées. See How to: Restore to a Point in Time (Transact-SQL).
Toutefois, la récupération à un moment donné n'assure pas la cohérence transactionnelle db seule, vous devez également avoir utilisé des transactions pour toutes les opérations qui ont franchi logiquement les limites de la base de données. Les déclencheurs ont probablement assuré cela pour les suppressions et les mises à jour car ils s'exécutent dans le contexte de l'opération parent, enveloppant ainsi implicitement l'opération cross db boundary dans une transaction, mais pour les insertions votre application doit généralement envelopper l'insert dans parent et l'insérer dans child dans une seule transaction.
La cohérence des opérations de récupération constitue le principal obstacle à la répartition des applications entre différentes bases de données.
Je ne vois pas la solution complète pour votre problème, mais vous pouvez utiliser des sauvegardes complètes avec des sauvegardes du journal des transactions. En premier lieu, vous restaurez les sauvegardes complètes sur les bases de poths avec l'option NORECOVERY, puis restaurez les sauvegardes du journal des transactions WITH STOPAT = 'xxxxxxxx' sur les deux bases. Vous pouvez donc restaurer les deux bases de données au même moment.
La meilleure façon de le faire est de le réparer au point où vous effectuez la sauvegarde. La plupart des applications multi-bases de données le font:
Avant la sauvegarde, exécutez une commande pour écrire une transaction marquée dans le journal des transactions de chaque base de données impliquée. (COMMENCER TRANSACTION AVEC MARK) Ensuite, faites les sauvegardes. De cette façon, vous pouvez faire plus tard une RESTORE WITH STOPAT MARK pour les obtenir tous au même moment. Ce n'est pas parfait mais plus proche que d'autres méthodes.
Greg, Comment savoir quand marquer? Je dois restaurer après une catastrophe avec une perte de données minimale. Dois-je marquer fréquemment, comme toutes les 5 secondes? –
Les applications multi-bases de données peuvent le faire juste avant de démarrer les sauvegardes. Avoir une étape de travail qui fait cela à chaque base de données. Ensuite, démarrez les sauvegardes. –
- 1. Transfert de données en temps réel entre deux ou plusieurs bases de données Oracle
- 2. Comment se connecter à plusieurs bases de données en même temps
- 3. MySQL erreur de restauration de données de restauration
- 4. Deux publications asynchrones en même temps?
- 5. comment afficher deux dialogues en même temps?
- 6. comment utiliser deux fonction en même temps?
- 7. C: Exécuter deux fonctions en même temps?
- 8. Comment valider deux zone de texte en même temps?
- 9. fusion de deux tables de deux bases de données
- 10. Empêcher l'installation simultanée de deux extensions Firefox en conflit
- 11. Synchroniser deux bases de données SQL Server
- 12. restauration de la base de données Oracle
- 13. ActiveRecord parle à deux bases de données?
- 14. Synchroniser en continu des tables entre deux bases de données
- 15. Comment comparer deux bases de données?
- 16. connexion entre deux bases de données différentes
- 17. Comment saisir deux champs de texte de manière simultanée (jQuery)
- 18. Copie de données uniquement entre deux bases de données
- 19. Est-ce possible de lier deux ensembles de données en même temps dans Crystal Report?
- 20. Différence de données entre deux bases de données
- 21. Comment google doc synchronise deux documents en même temps?
- 22. Traiter deux fichiers en même temps en Python
- 23. ZEND FW: Joindre deux tables de différentes bases de données
- 24. Recherche de correspondances uniques dans deux bases de données distinctes
- 25. Synchronisation de deux bases de données Sql Server 2008 dans la même instance
- 26. Accès - Fusionner deux bases de données de structure identique
- 27. Façon de différencier deux bases de données SQL CE
- 28. Comment sortir deux fichiers ddl en même temps avec l'utilisation de maven hbm2ddl plugin
- 29. Exécution simultanée de deux projets (trunk et branche) dans Eclipse
- 30. Fusion de deux tables provenant de bases de données différentes
Remus, Même si je restaure à une heure précise avec une précision de 3 ms, beaucoup de données peuvent être validées pendant une milliseconde. Je pense qu'il peut encore y avoir des orphelins. –
@SQL c'est à peu près mon point aussi: vous ne pouvez pas avoir une restauration fiable si la base de données est divisée. Les transactions DB croisées permettent de le réduire, mais ne peuvent pas l'appliquer. –
Remus, merci pour la solution! –