삭제 된 레코드를 다시 가져 오려면 어떻게합니까? 측의 백업

원격 SQL Server 2008 테이블에서 약 2,000,000 개의 레코드를 실수로 삭제했습니다. 서버에서 서버 측의 백업 파일에 대한 액세스 권한을 부여하지 않았습니다.

이 기록들을 되 찾을 방법이 있습니까?



답변

데이터베이스가 전체 복구 모드입니까?

  • 그렇다면 트랜잭션 로그 백업을 수행하고 있습니까?

    • 그렇다면 Quest LiteSpeed, Red Gate SQL Backup 또는 Idera SQLSafe와 같은 백업 유틸리티가 있습니까?
      • 그렇다면 이러한 유틸리티는 백업 파일 (전체 및 트랜잭션 로그 포함)에서 객체를 삭제 취소 할 수 있지만 사용 방법을 설명하는 것은 여기서 할 수있는 범위를 벗어납니다. 지침은 공급 업체에 문의하십시오.
      • 그렇지 않은 경우 전체 백업 및 트랜잭션 로그를 다른 이름의 데이터베이스로 복원하십시오. (기존 데이터베이스를 덮어 쓰지 마십시오.) 삭제하기 전에 객체의 최신 사본을 얻을 수 있지만 restore 명령의 stopat 부분을 사용하여 지정해야합니다. 명령 복원을 중지 할시기 삭제가 발생하기 전에 중지해야합니다.
    • 그렇지 않다면 Quest LiteSpeed ​​또는 Apex SQL Log와 같은 로그 리더 유틸리티의 사본을 받으십시오. 이 유틸리티는 데이터베이스 서버에 연결하고 로그 파일을 검사하며 트랜잭션 실행을 취소 할 수 있습니다. 데모 버전이 작동하는지 확실하지 않지만 유료 버전은 확실히 작동합니다.
  • 없는 경우 (전체 복구 모드가 아닌 경우) 마지막 전체 백업을 다른 이름의 데이터베이스로 복원하십시오. (이미 가지고있는 데이터베이스를 덮어 쓰지 마십시오.) 백업 시점에 온라인 상태였던 레코드를 복원 할 수 있지만 이후 모든 변경 사항을 잃게됩니다.


답변

SQL Server는 삭제 된 각 레코드에 대한 로그를 유지합니다. fn_dblogSQL Server 기능을 통해 이러한 로그를 쿼리 할 수 ​​있습니다 .

SELECT [RowLog Contents 0] 
FROM   sys.fn_dblog(NULL, NULL) 
WHERE  
       AllocUnitName = 'dbo.TableName'        
   AND Context IN ( 'LCX_MARK_AS_GHOST', 'LCX_HEAP' )        
   AND Operation in ( 'LOP_DELETE_ROWS' )   
;

그러나이 로그는 16 진 형식이므로이 16 진 형식을 실제 데이터로 변환해야합니다.

아래 기사는 위에서 정의한 방식으로 삭제 된 레코드를 복구하는 데 도움이됩니다.

http://raresql.com/2011/10/22/how-to-recover-deleted-data-from-sql-sever/


답변

안타깝게도 더 많은 정보가 없으면 도움을 드릴 수 없습니다. 그러나 귀하의 질문에 따르면 귀하의 데이터베이스에서 2 백만 개의 레코드가 삭제 된 것으로 나타났습니다. 데이터베이스에 전체 로깅이없고 특정 도구를 구입하지 않으면이 정보를 복구 할 수 없습니다.

자신의 생각과 레코드를 되돌릴 수 없다고 생각하는 이유를 설명하고 데이터베이스의 구성을 설명 할 수 있다면 좀 더 도움이 될 수 있습니다.

몇 가지 일반적인 조언 : 2 백만 개의 레코드를 삭제했다고 생각하면 아마 약간 당황했을 것입니다. 따라서 5 분 휴식을 취하고 진정한 다음 문제를 다시 방문해야합니다. 또한 합리적인 경우 (2am에 누군가를 깨우지 말고) 해결책을 찾고 있다면 상사에게 즉시 알려야합니다. 열렬히 회복하고 잠재적으로 문제를 악화시키고 세부 사항을 숨기는 것보다 일어난 일을 인정하는 것이 좋습니다. 상사가 어떤 식 으로든 도울 수 있다는 것을 알고 있으면 문제를 해결하는 데 도움이됩니다. 내가 말했듯이, 몇 가지 일반적인 조언.