9
votes

Comment récupérer des données de la table tronquée

En allant si la question de l'entretien SQL Server dans le livre de MR. Shiv Prashad Koirala. J'ai appris à savoir que, même après avoir utilisé la commande TRUNCate Table, les données peuvent être récupérées.

S'il vous plaît dites-moi comment pouvons-nous récupérer des données lorsque les données sont supprimées à l'aide de la commande 'Supprimer' et comment les données peuvent être récupérez si les données sont supprimées à l'aide de "tronquacer".

Ce que je sais, c'est que lorsque nous utilisons la commande Supprimer pour supprimer des enregistrements, l'entrée de celle-ci est effectuée dans le fichier journal, mais je ne sais pas comment récupérer les données de et comme je lis que la table tronquée n'entre aucune entrée de journal dans base de données alors comment peut-elle aussi être récupérée?

Si vous pouvez me donner un bon lien pour le faire pratiquement pas à pas que cela ne sera une bonne aide pour moi.

J'ai reçu SQL Server 2008.

merci


0 commentaires

4 Réponses :


6
votes

Si vous utilisez des transactions dans votre code, TronCate peut être renvoyé. S'il n'y a pas de transaction n'est utilisé et que la tronquée fonctionne est commise, il ne peut pas être récupéré à partir du fichier journal. Tronquez est une opération DDL et il n'est pas connecté Fichier journal.

Supprimer et tronquer les deux peuvent être renvoyés lorsqu'il est entouré de transaction si la session en cours n'est pas fermée. Si le tronquage est écrit dans l'éditeur de requêtes entouré d'une transaction et si la session est fermée, elle ne peut pas être renvoyée, mais supprimer peut être rétabli. P>

USE tempdb
GO
-- Create Test Table
CREATE TABLE TruncateTest (ID INT)
INSERT INTO TruncateTest (ID)
SELECT 1
UNION ALL
SELECT 2
UNION ALL
SELECT 3
GO
-- Check the data before truncate
SELECT * FROM TruncateTest
GO
-- Begin Transaction
BEGIN TRAN
-- Truncate Table
TRUNCATE TABLE TruncateTest
GO
-- Check the data after truncate
SELECT * FROM TruncateTest
GO
-- Rollback Transaction
ROLLBACK TRAN
GO
-- Check the data after Rollback
SELECT * FROM TruncateTest
GO
-- Clean up
DROP TABLE TruncateTest
GO


4 commentaires

Truncate est enregistré et peut être "Rouled Retour" en restauré à partir de la base de données ou des sauvegardes de connexion de la même manière que la suppression de la boîte.


Si votre base de données est en mode de récupération complète, vous pouvez récupérer des données soit par l'article de l'étape complète tronquée, supprimée ou supprimée à l'étape terminée, c'est ici code.abhayprince.com/article/...


@nvogel, Cet article est un exemple à une telle restauration ou avez-vous eu autre chose en tête?


Si des données tronquées peuvent être récupérées à partir de la base de données ou des sauvegardes de journal, pourquoi est-ce une réponse acceptée? - Cette réponse se lit comme suit: "S'il n'y a pas de transaction n'est utilisé et que la tronquée fonctionne est commise, il ne peut pas être récupéré à partir du fichier journal."



4
votes

SQL Server conserve l'entrée (page # et numéro de fichier) des enregistrements tronqués et de ces enregistrements, vous pouvez facilement parcourir de la requête ci-dessous. Une fois que vous avez obtenu l'ID de page et l'ID de fichier, vous pouvez le mettre dans la page DBCC pour retirer l'enregistrement complet.

SELECT LTRIM(RTRIM(Replace([Description],'Deallocated',''))) AS [PAGE ID]
,[Slot ID],[AllocUnitId]
FROM    sys.fn_dblog(NULL, NULL)  
WHERE    
AllocUnitId IN 
(Select [Allocation_unit_id] from sys.allocation_units allocunits
INNER JOIN sys.partitions partitions ON (allocunits.type IN (1, 3)  
AND partitions.hobt_id = allocunits.container_id) OR (allocunits.type = 2 
AND partitions.partition_id = allocunits.container_id)  
Where object_id=object_ID('' + 'dbo.Student' + ''))
AND Operation IN ('LOP_MODIFY_ROW') AND [Context] IN ('LCX_PFS') 
AND Description Like '%Deallocated%'


0 commentaires

5
votes

Par défaut, aucun de ces deux ne peut être retourné mais il y a des cas particuliers lorsque cela est possible.

tronquage : lorsque TronCate est exécuté SQL Server ne supprime pas les données, mais uniquement des pages de traitement. Cela signifie que si vous pouvez toujours lire ces pages (à l'aide de la requête ou de l'outil tiers), il est possible de récupérer des données. Cependant, vous devez agir rapidement avant que ces pages soient écrasées.

Supprimer : Si la base de données est en mode de récupération complète, toutes les transactions sont enregistrées dans le journal des transactions. Si vous pouvez lire le journal des transactions, vous pouvez en théorie de déterminer quelles étaient les valeurs précédentes de toutes les lignes affectées, puis récupérez les données.

Méthodes de récupération:


0 commentaires

0
votes

Si votre base de données est en mode de récupération complète, vous pouvez récupérer des données soit par tronquée, supprimée ou supprimée. L'article complet étape par étape est ici HTTPS: / /Codingfry.blogspot.com/2018/09/how-to-recover-data-de-trunated.html


0 commentaires