2010-11-16 87 views
7

trong khi thực hiện câu hỏi phỏng vấn máy chủ sql trong cuốn sách của mr. shiv prashad koirala. tôi đã biết rằng, ngay cả sau khi sử dụng lệnh truncate bảng dữ liệu có thể được phục hồi.Cách khôi phục dữ liệu từ bảng cắt bớt

hãy cho tôi biết cách chúng tôi có thể khôi phục dữ liệu khi dữ liệu bị xóa bằng lệnh 'xóa' và cách dữ liệu có thể khôi phục nếu dữ liệu bị xóa bằng lệnh 'cắt bớt'.

những gì tôi biết là khi chúng tôi sử dụng lệnh xóa để xóa hồ sơ, mục nhập của tệp được tạo trong tệp nhật ký nhưng tôi không biết cách khôi phục dữ liệu và khi tôi đọc bảng cắt không đi vào bất kỳ mục nhập nhật ký nào trong cơ sở dữ liệu thì làm thế nào điều đó cũng có thể được phục hồi.

nếu bạn có thể cho tôi bất kỳ liên kết tốt nào để thực hiện điều đó một cách thực tế từng bước, điều đó sẽ giúp ích rất nhiều cho tôi.

tôi đã có SQL Server 2008.

Cảm ơn

Trả lời

5

Nếu bạn sử dụng GIAO DỊCH trong mã của bạn, TRUNCATE có thể được cuộn lại. Nếu không có giao dịch được sử dụng và thao tác TRUNCATE được cam kết, nó không thể được lấy ra từ tệp nhật ký. TRUNCATE là hoạt động DDL và nó không được ghi lại trong tệp nhật ký.

DELETE và TRUNCATE cả hai có thể được cuộn lại khi được bao quanh bởi TRANSACTION nếu phiên hiện tại không bị đóng. Nếu TRUNCATE được viết trong Trình soạn thảo truy vấn được bao quanh bởi TRANSACTION và nếu phiên được đóng, nó không thể được cuộn lại nhưng DELETE có thể được khôi phục.

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

cảm ơn vì một bước rất tốt bằng cách giải thích từng bước –

+0

TRUNCATE được ghi lại và có thể được "khôi phục" bằng cách khôi phục từ cơ sở dữ liệu hoặc sao lưu nhật ký theo cùng cách mà DELETE có thể. – sqlvogel

+0

Nếu cơ sở dữ liệu của bạn đang ở chế độ khôi phục đầy đủ, bạn có thể khôi phục dữ liệu bằng cách cắt ngắn, xóa hoặc bỏ Hoàn thành từng bước Điều khoản tại đây http://code.abhayprince.com/article/How-to-Recover-Data-from- Đã cắt bớt hoặc xóa-Bảng-trong-SQL-Máy chủ-11 –

4

SQL server giữ mục (Trang # & tập tin #) của các hồ sơ cắt ngắn và các hồ sơ, bạn có thể dễ dàng duyệt từ truy vấn dưới đây. Khi bạn nhận được ID trang & ID tệp, bạn có thể đặt ID trong trang DBCC để truy xuất bản ghi đầy đủ.

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

Đưa ra dưới đây là liên kết bài viết giải thích, cách khôi phục bản ghi bị cắt bớt từ máy chủ SQl. http://raresql.com/2012/04/08/how-to-recover-truncated-data-from-sql-server-without-backup/

5

Theo mặc định, không có trường hợp nào trong số này có thể được hoàn nguyên nhưng có trường hợp đặc biệt khi có thể.

Cắt ngắn: khi cắt ngắn được thực thi SQL Server không xóa dữ liệu nhưng chỉ deallocates trang. Điều này có nghĩa là nếu bạn vẫn có thể đọc các trang này (sử dụng công cụ truy vấn hoặc công cụ của bên thứ ba), có khả năng phục hồi dữ liệu. Tuy nhiên, bạn cần hành động nhanh trước khi các trang này bị ghi đè.

Xóa: Nếu cơ sở dữ liệu ở chế độ khôi phục đầy đủ thì tất cả các giao dịch đều được ghi nhật ký giao dịch. Nếu bạn có thể đọc nhật ký giao dịch, bạn có thể trong lý thuyết tìm ra giá trị trước đó của tất cả các hàng bị ảnh hưởng và sau đó khôi phục dữ liệu là gì.

phương pháp phục hồi:

  • Một phương pháp được sử dụng các truy vấn SQL tương tự như đăng ở đây cho truncate hoặc sử dụng các chức năng như fn_dblog dụng đọc nhật ký giao dịch.

  • một khác là sử dụng công cụ của bên thứ ba như ApexSQL Log, SQL Log Rescue, ApexSQL Recover hoặc Quest Toad

Các vấn đề liên quan