2013-02-25 5 views
1

실수로 잘못된 테이블에서 TRUNCATE 명령을 실행했는데 모든 데이터가 사라졌습니다. 우리는 백업을 가지고 있지만 그것의 2 주 오래된 모든 데이터를 가지고 있지 않습니다.TRUNCATE 명령 실행 취소 방법

어떻게하면이 명령을 롤백하고 가능한 경우 데이터를 다시 가져올 수 있습니까? 이 작업을 수행 할 수있는 타사 도구가 있습니까?

+0

데이터베이스의 복구 모델은 무엇입니까? 'TRUNCATE'명령 이전에 시점 복구를 할 수 없다고 가정하면 원칙적으로 'TRUNCATE'는 데이터를 그대로 남긴 페이지의 할당을 해제하지만 원래 제 3 자 도구는 알지 못하기 때문에 데이터가 복구 될 수 있습니다 그렇게 해. –

+0

데이터베이스가 가득차 모드이고 어떤 이유로 든 로그가 잘리지 않으면 트랜잭션 로그를 지금 백업 한 다음 DB를 잘라내 기 직전 시점으로 복원 할 수 있습니다. – steoleary

답변

2

간단한 대답이다.

truncate 문을 실행하면 데이터는 여전히 MDF 파일에 있지만 SQL Server는이를 여유 공간으로 처리하기 때문에 (기본적으로 SQL Server에 데이터 페이지 할당을 취소한다고 알려짐) 표시되지 않습니다.

데이터를 다시 가져 오는 방법은 할당 취소 된 데이터 페이지를 읽고 읽을 수있는 데이터로 변환하는 것입니다.

중요 : 아직없는 경우 여유 공간이 새 데이터로 덮어 쓰기 때문에 빠른 속도로 작동해야합니다. SQL Server 인스턴스를 중지하고 MDF 및 LDF 파일의 복사본을 만들어 더 많은 시간을 사귈 수 있다면.

ApexSQL Recover을 사용해보세요. 내가 아는 바로는이 종류의 복원을 수행 할 수있는 유일한 도구입니다. SQL을 잘 사용한다면 this과 같은 매우 긴 스크립트를 수정하고 실행할 수 있습니다.

0

거래가 완료되지 않은 한 운이 좋지 않을 까봐 걱정됩니다. 여기 비슷한 게시물이지만 더 많은 설명이 있습니다. 이미 저지른 경우 트랜잭션을 롤백 할 수 있지만 데이터를 다시 얻기 위해 다른 뭔가를 할 수있는 (또는 적어도 일부) -

http://www.sql-server-performance.com/forum/threads/how-to-rollback-truncate-operation.16968/

+0

잠재적 솔루션에 대한 링크는 언제나 환영하지만, 링크 주위에 컨텍스트를 추가하여 동료 사용자가 그것이 무엇인지, 그 이유를 알 수 있도록하십시오. 항상 중요한 링크의 가장 중요한 부분을 인용하십시오. 페이지가 다른 서버로 이동했거나 직접 링크가 변경되었다고 가정 해 봅니다. 이후 사용자는 답변을 통해 이점을 얻을 수 없습니다. [답변 방법] (http://stackoverflow.com/questions/how-to-answer)을 참조하십시오. – Jesse

관련 문제