트랜잭션 로그 재 구축


20

트랜잭션 로그 파일이 삭제 된 (최대 6TB) 매우 큰 데이터베이스가 있습니다 (SQL Server가 종료 된 동안).

  1. 데이터베이스 분리 및 다시 연결 과
  2. 트랜잭션 로그 파일 삭제

... 지금까지 아무것도 효과가 없었습니다.

현재 실행 중입니다 :

ALTER DATABASE <dbname> REBUILD 
LOG ON (NAME=<dbname>,FILENAME='<logfilepath>')

...하지만 데이터베이스 크기가 주어지면 완료하는 데 며칠이 걸릴 수 있습니다.

질문

  • 위의 명령과 다음 명령 사이에 차이점이 있습니까?

    DBCC CHECKDB ('<dbname>', REPAIR_ALLOW_DATA_LOSS)
  • REPAIR_ALLOW_DATA_LOSS대신 실행해야합니까 ?

데이터는 다른 소스에서 파생되므로 데이터베이스를 다시 작성할 수 있지만 모든 데이터를 다시 삽입하는 것보다 데이터베이스를 복구하는 것이 훨씬 빠를 것입니다.


최신 정보

점수를 유지하는 사람들의 경우 :이 ALTER DATABASE/REBUILD LOG명령은 약 36 시간 후에 완료되어 다음과 같이보고되었습니다.

경고 : 데이터베이스 'dbname'에 대한 로그가 다시 작성되었습니다. 트랜잭션 일관성이 유실되었습니다. RESTORE 체인이 손상되어 서버에 더 이상 이전 로그 파일에 대한 컨텍스트가 없으므로 해당 파일이 무엇인지 알아야합니다.
물리적 일관성을 확인하려면 DBCC CHECKDB를 실행해야합니다. 데이터베이스가 dbo 전용 모드로 설정되었습니다. 데이터베이스를 사용할 수있게되면 데이터베이스 옵션을 재설정하고 추가 로그 파일을 삭제해야합니다.

우리는 DBCC CHECKDB(약 13 시간 소요) 성공했습니다. 데이터베이스 백업의 중요성과 프로젝트 관리자에게 서버에 대한 액세스 권한 부여를 배웠다고 가정 해 봅시다.

답변:


20

의심 데이터베이스를 분리하지 마십시오. 어쨌든 데이터베이스를 분리 한 후 어떻게 연결 했습니까? 옵션 CREATE DATABASE과 함께 사용 FOR ATTACH_REBUILD_LOG했습니까?

이 명령은 트릭을 수행해야합니다.

ALTER DATABASE recovery_test_2 SET EMERGENCY;   
ALTER DATABASE recovery_test_2 SET SINGLE_USER;  

DBCC CHECKDB (recovery_test_2, REPAIR_ALLOW_DATA_LOSS) 
WITH NO_INFOMSGS, ALL_ERRORMSGS;

나는이 상황에 대한 게시물을 썼다 :

SQL 2005/2008 데이터베이스 복구 절차 – 로그 파일 삭제 (부품 3)

다음의 차이점에 대해 물었습니다.

  • DBCC CHECKDB ('<dbname>', REPAIR_ALLOW_DATA_LOSS)
  • ALTER DATABASE <dbname> REBUILD LOG ON (NAME=<dbname>,FILENAME='<logfilepath>')

문제는 로그 파일을 다시 빌드하기 위해 둘 다 실행할 수 있지만 CHECKDB로그를 다시 빌드하고 데이터베이스에서 무결성 오류를 확인하는 것입니다.

또한 로그 파일이 손실 될 때 활성 트랜잭션 (디스크에 기록되지 않은)이 있으면 두 번째 (데이터베이스 변경)가 작동하지 않습니다. 시작 또는 연결시 SQL Server는 존재하지 않는 로그 파일에서 복구 (롤백 및 롤 포워드)를 수행하려고합니다. 디스크가 충돌하거나 서버가 예기치 않게 종료되고 데이터베이스가 완전히 종료되지 않은 경우에 발생합니다. 나는 그것이 당신의 경우가 아니라고 생각합니다.

  1. DBCC CHECKDB (DBNAME, REPAIR_ALLOW_DATA_LOSS)데이터베이스를 비상 상태로 실행하면 데이터베이스에 불일치 오류가 있는지 확인하고 먼저 로그 파일을 사용하여 불일치에서 복구하려고합니다. 이것이 없으면 트랜잭션 로그가 다시 작성됩니다.

  2. ALTER DATABASE REBUILD LOG ON...문서화되지 않은 절차이며 DBCC CHECKDB오류를 수정 하려면 후속 조치가 필요 합니다.


12

그렇습니다. 두 가지 진술은 각각 매우 다른 일을합니다.

파일이 삭제 된 데이터베이스의 상태에 따라 다음을 사용하여 데이터베이스 를 연결하고 로그를 다시 작성하여 시작 및 실행할 있습니다.

EXEC sp_attach_single_file_db 'dbname here', 'file path and name here'

제품 설명서에서 sp_attach_single_file_db (Transact-SQL) 를 참조하십시오 .

또한 Paul S. Randal 의이 블로그 게시물을 참조하십시오 .

긴급 모드 수리 : 가장 마지막 수단

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.