거대한 테이블 (30 억 개의 행)이 있는데, 불행히도 대부분 만료 된 데이터가 포함되어 있습니다. 만료 된 행을 모두 삭제하고 나머지는 보관하고 싶습니다.로그 파일이 제어 불능 상태가되지 않으면 서 거대한 테이블에서 만료 된 데이터를 삭제하려면 어떻게해야합니까?
나는이 같은 문을 실행할 수 있습니다
는delete from giganticTable where exp_date < getDate()
실행 계획은 어떻게 든 약 400 만 행이 삭제됩니다 것으로 추정하고있다.
실행하면 1 시간 후에 완료되지 않을뿐만 아니라 데이터베이스 트랜잭션 로그 파일도 6GB에서 90GB로 증가합니다. 이 상황이 발생하는 동안 데이터베이스는 대량 로그 복구 모델에 있음을 유의하십시오. 결국이 쿼리를 취소했습니다.이 작업을 수행하는 더 좋은 방법이 있어야합니다.
비슷한 작업을 수행하는 데 필요한 여러 테이블이 있습니다. 그 행들을 절대 복구 할 의사가 전혀 없다면이 행을 삭제하는 가장 빠르고 공간 효율적인 방법은 무엇일까요? 나는 마이크로 소프트 SQL 서버를 사용하고
주 2005
당신이 어떤 문제 때문에 테이블에 많은 작업을 수행 할 때 당신은 정말 로깅을 해제 바보 같은 것을 시도 엉망 싶지 않아
복구 모델 만 변경하면 데이터베이스가 손상되는 사례가 있습니까? – rsbarro
@rsbarro - 복구 모드를 변경하는 것 뿐만이 아니라, 복구 모드가 부적절하게 설정되어있는 경우 큰 프로세스 동안 데이터베이스가 손상되는 것을 보았습니다. 이로 인해 데이터베이스가 유실됩니다. – IAmTimCorey
나는 당신이 무엇을 얻고 있는지 알지만 간단하게 복구 모드를 설정한다고해서 당신이 데이터베이스를 잃어 버리는 것은 아닙니다. 단지 마지막 전체 백업으로 복원 할 수 있음을 의미합니다. 나는 당신의 대답이 복구 모드를 전환하는 것처럼 보일 뿐이므로 개인적으로 발생하지 않는 부패를 야기하기 때문에 묻고있었습니다. – rsbarro