태그 보관물: sql-server-2014

sql-server-2014

전체 백업에서 SQL Server DB를 복원 할 수없고 로그 처리가 실패하며 데이터베이스가 ‘복원’상태입니다. ‘database name’데이터베이스의 로그를 처리하는 중에 오류가 발생했습니다.

내 PC의 로컬 SQL Server Developer Edition 12.0.2000.8에서 개발 목적으로 데이터베이스를 설정하려고합니다. 전체 데이터베이스 백업과 네트워크를 통해 나에게 전송 된 별도의 트랜잭션 로그 전용 백업 파일이 있습니다.

전체 백업에서 복원하려고 할 때 일정 시간이 지나면 (약 1 시간, 데이터베이스 크기는 ~ 270GB) 오류가 발생합니다.

System.Data.SqlClient.SqlError : ‘database name’데이터베이스의 로그를 처리하는 중에 오류가 발생했습니다. 가능하면 백업에서 복원하십시오. 백업을 사용할 수 없으면 로그를 다시 작성해야 할 수도 있습니다. (Microsoft.SqlServer.SmoExtended)

이 후 db는 ‘Restoring ..’상태입니다.

내가 좋아하는 뭔가 (에서 그것을 가지고 실행하고 싶었 질문에)

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;

데이터베이스가 ‘Restoring ..’상태이므로 당연히 복구 프로세스를 다시 시작하면 동일한 오류 메시지가 발생하여 삭제 및 복원해도 도움이되지 않습니다.

DB를 설치하고 작동시키는 방법은 무엇입니까? 거래 일관성은 중요하지 않습니다.

SSMS 자동 생성 복원 스크립트 :

  USE [master]
  RESTORE DATABASE [database_name] FROM  DISK = N'D:\database_name.bak' WITH  FILE = 1,
  MOVE N'database_name' TO N'D:\MSSQL\MSSQL12.MSSQLSERVER\MSSQL\DATA\database_name.mdf',
  MOVE N'database_name_index' TO N'D:\MSSQL\MSSQL12.MSSQLSERVER\MSSQL\DATA\database_name_index.ndf',
  MOVE N'database_name_log' TO N'D:\MSSQL\MSSQL12.MSSQLSERVER\MSSQL\DATA\database_name_log.ldf',
  NOUNLOAD,
  STATS = 5

  GO

@Craig Efrein이 제안한 쿼리 결과

데이터베이스가 종료되었거나 데이터베이스에 체크 포인트가 없거나 데이터베이스가 읽기 전용 일 때 열린 트랜잭션 / 사용자가 있었기 때문에 로그를 다시 작성할 수 없습니다. 이 오류는 하드웨어 또는 환경 오류로 인해 트랜잭션 로그 파일이 수동으로 삭제되거나 손실 된 경우 발생할 수 있습니다.



답변

의견에서 채팅으로 이동했으며 OP에서이 메모를 보냈습니다.

방금 GUI를 통해 첨부하려고했습니다. .mdf 파일을 선택했을 때 SSMS는 데이터베이스가 3 개의 파일 (데이터, 인덱스, 로그)로 구성되어 있음을 확인했지만 어떻게 든 WITH MOVE를 복원하더라도 파일 경로에 대한 데이터베이스 세부 정보가 잘못되었다고합니다! 방금 이전 로그 / 데이터 / 인덱스 파일을 가리키고 데이터베이스가 온라인 상태입니다.


답변

단일 사용자 모드로 변경하고 복원하십시오.

예 :
첫 번째 복원은 NORECOVERY 옵션을 사용하므로 추가 복원을 수행 할 수 있습니다. 두 번째 명령은 트랜잭션 로그를 복원 한 다음 최종 사용자가 사용할 수 있도록 데이터베이스를 온라인 상태로 만듭니다.

RESTORE DATABASE AdventureWorks FROM DISK = 'C:\AdventureWorks.BAK'
WITH NORECOVERY
GO
RESTORE LOG AdventureWorks FROM DISK = 'C:\AdventureWorks.TRN'
WITH RECOVERY
GO

답변