잘못된 데이터로 테이블을 업데이트 한 SQL 2008의 테이블에서 업데이트 문을 만들었습니다.테이블에서 이전 데이터를 복구하는 방법
DB에 대한 백업이 없습니다.
업데이트 된 중요한 날짜입니다.
어쨌든 내가 테이블에서 이전 데이터를 복구 할 수 있습니까?
감사
SNA
잘못된 데이터로 테이블을 업데이트 한 SQL 2008의 테이블에서 업데이트 문을 만들었습니다.테이블에서 이전 데이터를 복구하는 방법
DB에 대한 백업이 없습니다.
업데이트 된 중요한 날짜입니다.
어쨌든 내가 테이블에서 이전 데이터를 복구 할 수 있습니까?
감사
SNA
기본적으로 어떠한 상업용 로그 리더를 사용하고 미세한 치아 빗으로 통과하려고하지 않으려면. 데이터베이스의 백업은 '업데이트 이력서, 타운 마켓'시나리오 일 수는 없지만 가혹한 일은해서는 안됩니다.
where 절을 잊어 버리거나 모든 사람의 * 이력서를 업데이트 할 수 있습니다 : O –
Andrew는 기본적으로이를 호출했습니다. 단지 필자가 필사적으로 생각할 수있는 몇 가지 아이디어를 추가하고자합니다.
편집 :
일부 댓글은 즉 언급하는 것은/당신의 업데이트가 테스트를 실행하기 전에 문을 삭제하는 것이 좋습니다. 이것이 습관이되기 위해서는 쉬운 방법이 있다면 도움이됩니다. 나는 보통 이런 식으로 내 DELETE
문을 작성합니다
--delete --select *
from [User]
where UserID=27
, 당신의 쿼리를 테스트 이후 select
에서 모든 것을 강조하기 위해 선택을 실행합니다. 필터 기준에 만족하면 삭제를 실행하려면 delete
부터 모든 항목을 강조 표시하십시오. delete
앞에있는 두 개의 대시는 쿼리가 실수로 실행되면 잘못된 구문으로 인해 충돌이 발생합니다.
UPDATE
문과 비슷한 구문을 사용할 수 있지만 상당히 깨끗하지는 않습니다. 항상
+1에있는 - comment 태그 사용. 이것은 내 dna에 내장되어 있습니다. – NotMe
하나가 개별 테이블/행을 복원 할 수
특히 레드 게이트의 개체 수준과 마음의 평화를 복원 거기, 사용하지 않을 것 경우에도 주요 UPDATE 문 전에 백업을 지금 백업 파일
을 부여행운을 빌어, 다른 곳에서 이전 사본 (DEV/QA)을 찾는 것이 좋습니다 ...
모든 답변 주셔서 감사합니다.
실제로 문제는 우연히 --- 업데이트 구문에서 where 조건을 선택하지 못했습니다 .--- 휴식!
빠른 5 분 작업이었습니다. 하나의 고객 데이터를 테스트하기 위해 날짜를 변경하는 것처럼 - 백업을 생각하지 않았습니다.
물론 당신은 사실입니다. 이것은 수업입니다.
이제 앞으로 "내 업데이트 문을 하나의 트랜잭션으로 작성"할 것입니다. 또는 "내 업데이트 문을 테스트하십시오"
다시 한번 감사드립니다. 유일한 답은 "아니오"이므로 질문을 무시하고 시간을 보내셔도됩니다.
감사
SNA
+1. 실수를 인정하고 공과를 배우기 위해서. 또한 여기 DB는 몇 가지 제약이 있습니다. 오라클의 경우 FLASHBACK 옵션을 사용할 수 있습니다. – Guru
SQL 서버는 모든 transation.So 백업없이뿐만 아니라 로그에서 수정 된 데이터를 복구 할 수 있습니다에 대한 기록 유지합니다.
Select [PAGE ID],[Slot ID],[AllocUnitId],[Transaction ID]
,[RowLog Contents 0], [RowLog Contents 1],[RowLog Contents 3],[RowLog Contents 4]
,[Log Record]
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','LOP_MODIFY_COLUMNS')
And [Context] IN ('LCX_HEAP','LCX_CLUSTERED')
다음은 단계별로 설명하는 artcile입니다. http://raresql.com/2012/02/01/how-to-recover-modified-records-from-sql-server-part-1/
이므 란
늦은 하나 바라건대 유용한 ...
데이터베이스가 모든 트랜잭션이 트랜잭션 로그에 기록하고 검색 할 수있는 전체 복구 모드에있는 경우. 문제는 이것이 트랜잭션 로그의 주요 목적이 아니기 때문에 기본적으로 지원되지 않는다는 것입니다.
옵션은 다음과 같습니다
에 시도 (저렴 덜 옵션이 목적 주요 초점은 SQL 서버 관리에 대한) user1059637처럼 지적하십시오. 이 방법의 문제점은 트랜잭션 로그 백업을 읽을 수없고 지루하다는 점입니다.
귀하의 데이터가 시간과 비용면에서 귀하에게 얼마나 가치가 있는지를 설명합니다.
이것은 당신을위한 교훈입니다. 항상 광범위한 내용을 변경하기 전에 업데이트 문을 테스트하고 항상 백업을 가져옵니다. – Welbog
@Welbog : 아마도 광범위한 변화가 아니기 때문일 것입니다.) –
@David Hedlund : 수업 1 단계를 참조하십시오. 항상 업데이트 문을 테스트하십시오. – Welbog