Longue histoire courte, j'ai essayé de mettre à jour rapidement une seule ligne dans SQL Server en utilisant le studio de gestion et juste tapé UPDATE table SET column='value'
et j'ai oublié la partie WHERE other_column='other_value'
. Je suis allé déjeuner, je suis revenu et il y avait 15 emails non lus qui m'attendaient. Il y a environ une heure, il attendait que le type de base de données revienne pour voir quand la dernière sauvegarde a eu lieu. Il n'y a pas de fonction UNDO magique mais est-ce là?Est-ce que SQL Server dispose d'une fonction d'annulation magique?
Répondre
Oui, il y a - c'est le journal des transactions. Pour récupérer à partir de quelque chose comme ça, tant que vous avez votre base de données dans le modèle de récupération complète, vous feriez simplement une autre sauvegarde du journal des transactions, puis faites une restauration avec l'option STOPAT pour indiquer à la restauration d'arrêter de restaurer au point temps juste avant de commencer votre transaction. Cela rétablira la base de données au point de votre erreur.
Voir ici pour plus d'informations sur l'utilisation de l'option STOPAT - http://msdn.microsoft.com/en-us/library/ms186858(SQL.90).aspx.
Votre script ressemblerait à quelque chose comme ça ...
-- backup the existing log
BACKUP LOG [MyDatabase]
TO DISK = N'\\MyServer\Share\MyDatabase.trn'
-- options left out for brevity
GO
-- restore the database first
RESTORE DATABASE [MyDatabase]
FROM DISK = N'\\MyServer\Share\MyDatabase.bak'
WITH FILE = 1,
NORECOVERY,
NOUNLOAD,
STATS = 10
GO
/* Previous transaction logs in the chain go here... */
/* restore your log that you backed up after the mistake
took place, stopping at your point where the problem happened */
RESTORE LOG [MyDatabase]
FROM DISK = N'\\MyServer\Share\MyDatabase.trn'
WITH FILE = 1,
NORECOVERY,
NOUNLOAD,
STATS = 10,
STOPAT = '2010-03-12 13:00'
GO
Le journal des transactions est votre ami, et combien d'entre nous pensent, "Je détestais quand je faisais ça ..." – dverespey
Nous avons tous fait il - mais seulement le laisser arriver une fois. Des erreurs comme celle-ci sont censées être apprises à partir de :) –
Great post, je vais essayer dans un petit peu –
C'est ce qu'on appelle le journal des transactions. Vous pouvez le renvoyer. Vous avez enregistré le entier en vous connectant à un moment précis, et pas seulement votre mauvaise transaction.
si vous prenez des sauvegardes de bases de données et les sauvegardes du journal des transactions, vous pouvez faire un point dans le temps de restauration au moment avant que vous avez exécuté la déclaration de mise à jour autrement pas , pas vraiment
J'ai peur qu'il n'y en ait pas. C'est pourquoi j'écris toujours le select voir les résultats et ensuite le convertir en mise à jour. A également appris la leçon à la dure lol. Bien sûr, vous pouvez restaurer à partir du journal des transactions.
Que voulez-vous dire? il y a une raison pour laquelle des journaux de transactions et des sauvegardes existent – SQLMenace
J'ai ajouté que monsieur ... Je voulais dire qu'il n'y a aucun moyen magique d'annuler cette opération sans restaurer à partir des sauvegardes. (Il a dit qu'il attend que le gars de DB revienne.) – Raja
How to: Restore to a Point in Time (Transact-SQL)
Le "moment" est le "ohnosecond" avant de choses bollixed ...
- 1. SQL Server AVG fonction bizarrement
- 2. MS SQL Server COLUMNS_UPDATED() Fonction
- 3. Fonction DECODE() dans SQL Server
- 4. ACCESS Jet SQL INT() Fonction -> Fonction SQL Server
- 5. Python, ConfigParser: Qu'est-ce que 'l'interpolation magique'
- 6. Fonction de filtre d'index SQL Server 2005
- 7. Fonction de tri personnalisée - de SQL Server
- 8. fonction de partition dans SQL Server 2005
- 9. Fonction Round() SQL Server Reporting Services
- 10. Sql Server déterministe fonction définie par l'utilisateur
- 11. Fonction d'agrégation personnalisée (concat) dans SQL Server
- 12. Sql Server équivalent d'une fonction d'agrégation COUNTIF
- 13. fonction de pivot dans SQL Server 2008
- 14. Fonction récursive dans SQL Server 2005?
- 15. Quelle est la fonction magique de empty() en PHP?
- 16. Est-ce que streamreader dispose du flux?
- 17. Comment vérifier si l'utilisateur dispose des privilèges d'administrateur système dans SQL Server 2008 R2
- 18. Comment un script SQL Server TSQL peut-il indiquer les autorisations de sécurité dont il dispose?
- 19. Que montre le plan d'exécution SQL Server?
- 20. Que représentent les temps d'exécution SQL Server?
- 21. SQL Server ROW_NUMBER() sur SQL Server 2000?
- 22. applescript et souris magique
- 23. magique accès Ruby
- 24. Windows dispose de sa propre fonction « d'appel autre .exe » (C++)
- 25. MATLAB Comportement de chronométrage du mystère magique
- 26. Modification d'une fonction utilisée en tant que colonne par défaut dans SQL Server
- 27. Deadlocks SQL Server (SQL Server 2000)
- 28. Télécharger SQL SERVER AGENT - Microsoft SQL Server
- 29. Authentification SQL Server dans SQL Server 2008
- 30. Fonction de Dispose appelant Disposer (IsDisposing) un motif en C#?
question connexe: http://stackoverflow.com/questions/168486/whats-your-1 -way-to-be-prudent-with-a-live-database/ –