문제

내 테이블 중 하나에 5000까지의 일부 레코드를 삽입했습니다.

그러나 이제이 레코드 가이 표에 삽입되어서는 안된다는 것을 알고 있습니다. 레코드를 하나씩 삭제할 수 없습니다. 또는 테이블의 이전 레코드에 대한 삽입 된 레코드를 구별 할 수 없습니다.

내 테이블이 원래 양식으로 돌아 오도록이 삽입 문장을 롤백하는 방법은 무엇입니까?

(나는 이것들이 로그를 사용하는 방법이라고 빨간색입니다. 그러나 나는 그것을 어떻게하는지 잘 모르겠습니다.)

감사.

도움이 되었습니까?

해결책

당신 이이 일을했을 때 거래 내부에 있지 않다고 가정하면, 당신은 그 과정이 고통 스러울 것입니다. 관심있는 DBM의 풍미가 확실하지 않지만 SQL Server 2005에 대한 정보는 다음과 같습니다.

트랜잭션 로그를 사용한 롤백 트랜잭션

본질적으로,이를 수행하는 가장 쉬운 방법은 삽입물을 선행하는 백업에서 DB를 복원하는 것입니다.

다른 팁

다음은 시도 할 수있는 몇 가지 추가 아이디어입니다.

다른 데이터베이스에서 전체 백업을 복원 한 다음 다음과 같은 일부 타사 도구를 사용하여 테이블을 비교하십시오. ApexSQL 데이터 Diff 또는 DBFORGE 또는 레드 게이트

데이터베이스가 전체 복구 모드 인 경우 트랜잭션 로그를 읽으십시오. 이 주제에 대한 여러 게시물은 다음과 같습니다.

SQL Server Transaction Log Explorer/Analyzer

SQL Server 2008에서 로그 파일 (*.ldf) 읽기

SQL Server 2008에서 트랜잭션 로그를 보는 방법

삽입문이 데이터베이스에 최선을 다하고 있다고 생각합니다. 그렇지 않으면 단순히 롤백을 할 수 있습니다.

감사 테이블이 있습니까? 감사 테이블이 있으면 특정 데이터 시간 동안 삽입 된 행을 식별 한 다음 삭제할 수 있습니다 ...

삽입 된 행의 기능이 다른 모든 것과 구별 될 수 있습니까? 예를 들어 삽입 날짜 또는 숫자 ID 열이 있습니까? 그렇다면 해당 기준에 따라 삭제를 수행하십시오.

그 외에는 Butterchicken이 옳습니다. 아마 약간 고통 스러울 것입니다. 그러나 나는 이전과 같은 트랜잭션 로그를 사용하여 다시 롤백하지 않았습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top