2010-11-16 2 views
7

при переходе по серверу на вопрос о сервере в книге г-на. shiv prashad koirala. я узнал, что даже после использования команды truncate table данные могут быть восстановлены.Как восстановить данные из усеченной таблицы

скажите, пожалуйста, как мы можем восстановить данные при удалении данных с помощью команды «удалить» и как восстановить данные, если данные будут удалены с помощью команды «truncate».

Что я знаю, так это то, что когда мы используем команду delete для удаления записей, запись из нее производится в файле журнала, но я не знаю, как восстановить данные, и когда я прочитаю, что таблица обрезания не входит в какую-либо запись в журнале в базе данных, то как это можно восстановить.

если вы можете дать мне любую хорошую ссылку, чтобы сделать это практически шаг за шагом, чем это будет большой помощью для меня.

я получил SQL Server 2008.

Благодарности

ответ

5

Если вы используете транзакции в коде, TRUNCATE можно откатить. Если транзакция не используется, и операция TRUNCATE зафиксирована, ее невозможно извлечь из файла журнала. TRUNCATE - это операция DDL и не регистрируется в файле журнала.

DELETE и TRUNCATE оба могут быть отброшены назад, когда они окружены TRANSACTION, если текущий сеанс не закрыт. Если TRUNCATE написан в редакторе запросов, окруженном транзакцией, и если сеанс закрыт, его нельзя отменить, но DELETE можно отбросить назад.

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 
+0

спасибо за такое очень хорошее пошаговое объяснение –

+0

TRUNCATE зарегистрирован и может быть «откат» путем восстановления из базы данных или резервных копий журнала таким же образом, что и DELETE. – sqlvogel

+0

Если ваша база данных находится в полном режиме восстановления, вы можете восстановить данные либо усеченными, либо удаленными, либо удаленными Завершите шаг за шагом. Статья находится здесь http://code.abhayprince.com/article/How-to-Recover-Data-from- Усеченный-Удаляется или-брошено-Таблица-в-SQL-сервер 11 –

4

SQL сервер хранит запись (Page # & файл #) из усеченных записей и эти записи, вы можете легко просматривать, используя запрос. Как только вы получите идентификатор страницы &, вы можете поместить его на СТРАНИЦУ DBCC, чтобы получить полную запись.

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%' 

Ниже приведена ссылка статьи, в которой объясняется, как восстановить усеченные записи с сервера SQl. http://raresql.com/2012/04/08/how-to-recover-truncated-data-from-sql-server-without-backup/

5

По умолчанию ни один из этих двух не может быть отменен, но есть особые случаи, когда это возможно.

Truncate: при выполнении truncate SQL Server не удаляет данные, а только освобождает страницы. Это означает, что если вы все еще можете читать эти страницы (используя запрос или сторонний инструмент), есть возможность восстановить данные. Однако вам нужно действовать быстро, прежде чем эти страницы будут перезаписаны.

Удалить: Если база данных находится в полном режиме восстановления, все транзакции регистрируются в журнале транзакций. Если вы можете прочитать журнал транзакций, вы можете теоретически выяснить, каковы были предыдущие значения всех затронутых строк, а затем восстановить данные.

метода восстановления:

  • Один метод с помощью запросов SQL, подобных тому, публикуемых здесь срезанных или используя такие функции, как fn_dblog для чтения журнала транзакций.

  • Еще одна заключается в использовании сторонних утилит, таких как ApexSQL Log, SQL Log Rescue, ApexSQL Recover или Quest Toad

Смежные вопросы