2008-10-04 7 views
1

Ceci est lié à la réponse acceptée pour What’s your #1 way to be careful with a live database? Supposons que vous créez une table temporaire à des fins de sauvegarde et apportez vos modifications à l'original. Les modifications cassent le système et vous voulez restaurer la sauvegarde. Entre-temps, d'autres enregistrements ont également changé dans la table d'origine (c'est un live db). Maintenant, si vous restaurez la sauvegarde, le système sera dans un état incohérent.Maintien de la cohérence lors de l'utilisation de tables de sauvegarde temporaire

Quelle est la meilleure façon de lutter contre cette

Répondre

1

Je ne pense pas que ce soit souhaitable, je tester plus dur avant de mettre la table dans la production, mais en supposant qu'il est arrivé de toute façon, vous auriez deux options:

Créer un 1.- trigger INSERT qui met à jour la table de sauvegarde temporaire avec les lignes insérées dans la nouvelle table, le massage des données pour tenir dans l'ancienne table

ou

Trouver la différence 2.- dans les données comme ça

SELECT * FROM faultyTable 
EXCEPT 
SELECT * FROM backupTable 

Vous devez ajuster les colonnes à sélectionner pour le sous-ensemble commun bien sûr. Et SAUF s'appelle MINUS parfois aussi. Ensuite, vous pouvez insérer la différence dans la table sauvegardée et restaurer la combinaison. Cela devient de plus en plus difficile au fur et à mesure que la table a de plus en plus de relations ... en fonction de la méthode utilisée pour restaurer la table, vous risquez de supprimer les données associées, vous devrez donc également la sélectionner.

1

que je fais habituellement

BEGIN TRANSACTION 

-- SQL CODE 

A la fin, si tout est OK, faire mes SELECTs et ainsi de suite

COMMIT 

autrement

ROLLBACK 
+0

À moins que vous ne validiez, comment testez-vous le système dans un paramètre «en direct» – Midhat

0

Votre base de données peut fournir cette fonctionalité. Par exemple, dans Oracle:

Export (Your options) consistent = y 

Bien sûr, effectuer une sauvegarde cohérente dans un environnement de production en ligne aura une incidence sur les performances du système.

Questions connexes