2009-08-26 10 views
0

J'ai inséré quelques enregistrements dans un de mes table qui sont jusqu'à 5000.Instruction rollback d'insertion

Mais maintenant je me rends compte que ces enregistrements ne devraient pas être insérés dans cette table. Je ne peux pas supprimer les enregistrements un par un. Ou ne peut pas distinguer les enregistrements insérés pour les enregistrements précédents dans la table.

Comment annuler cette instruction d'insertion, afin que ma table revienne à son format d'origine.

(I rouge que ceux-ci est un moyen en utilisant le log. Mais je ne sais pas erectly comment le faire.)

Merci.

+0

Est la base de données en mode de récupération complète, et avez-vous la sauvegarde du journal des transactions? –

Répondre

1

En supposant que vous n'étiez pas dans une transaction lorsque vous avez fait cela, vous allez trouver le processus douloureux. Je ne sais pas ce que la saveur du SGBD qui vous intéresse, mais voici quelques informations sur SQL Server 2005:

Rollback transaction using transaction log

Essentiellement, la meilleure façon de le faire est de restaurer votre base de données à partir d'une sauvegarde antérieure vos inserts .

1

Je suppose que les instructions d'insertion ont été validées dans la base de données, sinon vous pourriez simplement faire un ROLLBACK;

Avez-vous une table d'audit? S'il existe une table d'audit, vous pourrez identifier les lignes insérées pendant un datetime particulier puis les supprimer ...

0

Y a-t-il des caractéristiques des lignes insérées qui les distinguent de toutes les autres? Par exemple, y a-t-il une date insérée ou une colonne d'identité numérique? Si oui, effectuez simplement une suppression en fonction de ces critères.

À part ça, le butterchicken a raison, c'est probablement un peu douloureux. Mais je n'ai jamais reculé en utilisant un journal de transactions comme ça avant.

+0

Non, je ne peux pas distinguer. Ce n'est pas possible. – Waheed

+0

Il est assez facile d'utiliser le gestionnaire de studio de gestion - il suffit de sélectionner l'option de restauration 'point dans le temps'. – wefwfwefwe

+0

Vous ne voulez pas restaurer à un moment donné dans la base de données en cours car il supprimera tous les autres enregistrements ajoutés à d'autres tables depuis ce moment. Vous devez restaurer dans une base de données différente et remplacer la table qui vous intéresse. Si d'autres personnes ont également inséré des trecords dans cette table, vous ne pouvez pas utiliser l'option de restauration à un point dans le temps sans risquer des problèmes d'intégrité des données. – HLGEM

2

Voici quelques idées supplémentaires que vous pouvez essayer.

restaurer une sauvegarde complète dans une autre base de données, puis de comparer les tables utilisant des outils tiers tels que ApexSQL Data Diff ou dbForge ou Red Gate

Si la base de données était en mode de récupération complète essayer de lire journal des transactions. Voici plusieurs messages sur ce sujet:

SQL Server Transaction Log Explorer/Analyzer

Read the log file (*.LDF) in sql server 2008

How to view transaction logs in sql server 2008