복구 보류 중인 상태 확인하기
SSMS 의 개체 탐색기에서도 바로 확인할 수 있지만, sys.databases 테이블에서도 데이터베이스의 상태를 확인할 수 있습니다.
복구 보류 중인 상태 원인
1. 데이터베이스가 정상적으로 종료되지 않았습니다.
데이터베이스가 종료되고 로그파일이 삭제될 때 COMMIT 되지 않은 활성화된 트랜잭션이 있을 수도 있습니다.
2. 로그 파일을 다른 경로로 이동하려고 했지만 이 과정에서 로그 파일이 손상되었습니다.
3. 메모리 공간 부족 또는 디스크 저장 공간으로 인해서 데이터베이스 복구를 시작할 수 없습니다.
복구 보류 중인 상태 해결하기
해결책은 2가지가 있습니다.
해결책 1
Northwind 데이터베이스를 복구하는 경우, 다음의 쿼리를 실행해 주세요.
ALTER DATABASE Northwind SET EMERGENCY;
GO
ALTER DATABASE Northwind SET SINGLE_USER;
GO
DBCC CHECKDB (Northwind, REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS;
GO
ALTER DATABASE Northwind SET MULTI_USER;
GO
1. Northwind 데이터베이스를 응급 모드로 변경합니다.
- 응급 모드는, READ_ONLY 이며 로깅을 비활성화 하고 시스템 관리자에게만 액세스 권한이 부여됩니다.
2. Northwind 데이터베이스를 단일 사용자 모드로 변경합니다.
3. Northwind 데이터베이스를 복구합니다. 이 때 데이터 손실이 일어날 수 있습니다.
- Microsoft 에서는 해당 옵션은 최후의 수단으로만 사용하며, 이 옵션에 대해 경고하고 있습니다.
The REPAIR_ALLOW_DATA_LOSS option is a supported feature but it may not always be the best option for bringing a database to a physically consistent state. If successful, the REPAIR_ALLOW_DATA_LOSS option may result in some data loss. In fact, it may result in more data lost than if a user were to restore the database from the last known good backup.
Microsoft always recommends a user restore from the last known good backup as the primary method to recover from errors reported by DBCC CHECKDB. The REPAIR_ALLOW_DATA_LOSS option is not an alternative for restoring from a known good backup. It is an emergency "last resort" option recommended for use only if restoring from a backup is not possible.
4. Northwind 데이터베이스를 복수 사용자 모드로 변경합니다.
해결책 2
pubs 데이터베이스를 복구 하는 경우, 다음의 쿼리를 실행해 주세요.
ALTER DATABASE pubs SET EMERGENCY;
GO
ALTER DATABASE pubs SET MULTI_USER;
GO
EXEC sp_detach_db 'pubs'
GO
EXEC sp_attach_single_file_db @DBName='pubs', @physname=N'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\pubs.mdf'
-- @physname 은 pubs 데이터베이스의 데이터파일
GO
1. pubs 데이터베이스를 응급모드로 변경합니다.
2. pubs 데이터베이스를 복수 사용자 모드로 설정합니다.
3. pubs 데이터베이스를 SQL Server 에서 제거합니다.
4. pubs 데이터베이스를 SQL Server 에 등록합니다.
이 작업을 하기 전 pubs 데이터베이스에 올바른 백업본이 있는지 먼저 확인합니다.
이러한 이유는 위의 작업이 잘못되었을 경우를 대비한 pubs 데이터베이스 백업본으로 복구를 진행해야 할 수도 있기 때문입니다.