마스터 데이터베이스 파일(MDF)은 MS SQL Server의 주요 데이터베이스 파일로서 모든 데이터를 저장하는데, 뷰, 테이블, 저장 프로시저, 외래 키 및 기본 키를 포함합니다. 때때로 MDF 파일을 열 때 SQL Server 데이터베이스가 열리지 않고 다음과 같은 오류가 발생할 수 있습니다:
- SQL Server 오류 5171: MDF가 주 데이터베이스 파일이 아님
- 파일 xxxxx.mdf를 열 수 없음. 운영 체제 오류 5: (액세스가 거부됨)”
- 이벤트 ID 824: SQL Server가 논리 일관성 기반 I/O 오류를 감지함
- Msg 8114, 레벨 16, 상태 5, 라인 2: 데이터 형식 varchar를 숫자로 변환하는 오류
이러한 오류는 일반적으로 MDF 파일에 손상이 있는 경우 발생합니다. 이 기사에서는 MDF 파일 손상의 가능한 이유를 설명하고 손상된 MDF 파일을 수리하고 문제를 해결하는 방법을 보여줄 것입니다.
MDF 파일 손상의 원인
SQL Server 데이터베이스(MDF) 파일에 손상을 일으킬 수 있는 다양한 이유가 있습니다. 일반적인 몇 가지 이유는 다음과 같습니다:
MS SQL Server 또는 시스템 충돌
MS SQL Server 또는 시스템은 운영 체제, 하드웨어 또는 소프트웨어 문제로 인해 충돌할 수 있습니다. MDF 파일 작업 중 서버 또는 시스템이 충돌하는 경우 파일이 손상되거나 손상될 수 있습니다.
갑작스러운 시스템 종료
SQL 서버가 실행 중일 때 갑작스러운 전원 장애나 시스템 강제 종료는 시스템에 저장된 MDF 파일을 손상시킬 수 있습니다.
악성 소프트웨어 또는 바이러스 공격
악성 소프트웨어나 바이러스도 MDF 파일을 손상시키고 액세스할 수 없게 만들 수 있습니다. 일반적으로 안티바이러스 또는 안티악성 소프트웨어 보호 소프트웨어가 시스템에 없을 때 발생합니다.
저장 드라이브 문제
저장 드라이브의 손상된 섹터나 파일 시스템 오류는 SQL 데이터베이스 파일을 손상시킬 수 있습니다. 드라이브가 손상된 경우 MDF 파일에도 손상을 일으킬 수 있습니다.
MDF 파일 손상으로 ‘데이터베이스를 열 수 없음’ 문제 해결 방법
MDF 파일이 손상된 경우 아래 메서드를 따라 손상된 MDF 파일을 복구하여 SQL 서버의 ‘데이터베이스를 열 수 없음’ 문제를 해결할 수 있습니다.
메서드 1: 백업에서 MDF 파일 복원
MDF 파일의 백업을 만들었다면 백업에서 파일을 복원할 수 있습니다. 그러나 복원하기 전에 백업이 완전하고 읽을 수 있는지 확인해야 합니다. 이를 위해 RESTORE VERIFY ONLY 명령을 사용할 수 있습니다. 이 명령이 성공 메시지를 표시하면 백업을 복원할 수 있습니다. 이를 위해 아래 Transact SQL 명령을 사용하세요:
BACKUP DATABASE [AdventureWorks2019] TO DISK = N’C:\backups\AdventureWorks2019.bak’ WITH NOFORMAT, NOINIT, NAME = N’AdventureWorks2019-Full Database Backup’, SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
대신 SQL Server Management Studio (SSMS)를 사용하여 백업을 복원할 수 있습니다.
방법 2: DBCC CHECKDB 명령어 사용
백업이 최신 상태가 아니거나 백업 파일을 복원하는 동안 문제가 발생하는 경우 손상된 MDF 파일을 복구하기 위해 DBCC CHECKDB 명령어를 사용할 수 있습니다. 데이터베이스 파일을 복구하기 전에 관리자 권한이 있는지 확인해야 합니다. 복구하기 전에 아래 명령어를 사용하여 데이터베이스를 단일 사용자 모드로 설정하세요:
ALTER DATABASE Dbtesting SET SINGLE_USER
데이터베이스를 SINGLE_USER
모드로 설정할 수 없는 경우, AUTO_UPDATE_STATISTICS_ASYNC 옵션이 OFF
로 설정되어 있는지 확인하세요.
다음으로 아래 명령어를 사용하여 데이터베이스 (MDF) 파일을 복구할 때 DBCC CHECKDB
명령어를 실행하세요:
DBCC CHECKDB (N ’Dbtesting’, REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS, NO_INFOMSGS
GO
데이터베이스가 복구되면 아래 명령어를 사용하여 다시 MULTI_USER
모드로 설정하세요:
ALTER DATABASE Dbtesting SET MULTI_USER
참고: DBCC CHECKDB
명령을 사용하여 MDF 파일을 복구할 수 있습니다. 그러나 파일을 복구하는 동안 페이지나 행을 할당 해제할 수 있으며, 이는 데이터 손실로 이어질 수 있습니다.
방법 3: 전문 SQL 복구 도구 사용
REPAIR_ALLOW_DATA_LOSS
옵션을 사용하여 DBCC CHECKDB
명령을 사용하여 SQL 데이터베이스를 복구하면 데이터 손실이 발생할 수 있습니다. 데이터 손실을 피하려면 Stellar Repair for MS SQL과 같은 강력한 MS SQL 복구 소프트웨어를 사용할 수 있습니다. 이 소프트웨어는 손상된 MDF 파일을 복구하고 기본 키, 테이블, 트리거, 뷰 등과 같은 모든 파일 객체를 복원할 수 있으며, 원본 구조를 변경하지 않습니다. 복구된 파일 데이터를 새 MDF 파일 및 CSV, HTML, XLS 등 다양한 형식으로 저장합니다. 이 소프트웨어는 Windows 및 Linux 시스템에서 생성된 SQL 데이터베이스 (MDF 및 NDF) 파일을 지원합니다.
맺음말
MS SQL Server에서 ‘데이터베이스를 열 수 없음’ 문제가 발생할 수 있는데, 이는 MDF 파일의 손상으로 인한 것입니다. 이 문제를 해결하는 가장 쉬운 방법은 최신 백업에서 MDF 파일을 복원하는 것입니다. 백업 파일이 오래되었거나 작동하지 않는 경우 손상된 MDF 파일을 복구하기 위해 DBCC CHECKDB
명령을 사용할 수 있습니다. DBCC CHECKDB
명령이 데이터베이스를 복구하지 못하는 경우 Stellar Repair for MS SQL과 같은 강력한 SQL 복구 도구를 사용할 수 있습니다. 이 도구는 손상된 MDF 파일을 복구하고 모든 데이터를 완전한 무결성을 유지하면서 새 MDF 파일로 복원할 수 있습니다. Stellar Repair for MS SQL의 무료 버전을 설치하여 손상된 MDF 파일을 스캔하고 복구 가능한 데이터를 미리 볼 수 있습니다.
Source:
https://dzone.com/articles/resolve-sql-server-database-cannot-be-opened-mdf-issue