605: Attempt to fetch logical page belongs to a different allocation unit (가져오려는 논리 페이지가 다른 allocation unit에 속함)
SQL Server의미
페이지를 읽는 중 SQL Server가 예상한 객체/allocation unit이 아닌 다른 객체에 속한 페이지를 발견했다. 심각한 물리적/논리적 데이터베이스 손상을 강하게 시사한다.
원인
스토리지/디스크 장애, 컨트롤러나 드라이버 버그, 갑작스러운 정전 시 쓰기 캐시 손상, 파일 시스템 손상으로 페이지 연결이 깨진 경우다. 'transient 605'는 가끔 일시적인 I/O 문제에서 비롯될 수 있지만, 지속되는 경우는 실제 손상이다.
해결 방법
즉시 DBCC CHECKDB ('mydb') WITH NO_INFOMSGS, ALL_ERRORMSGS를 실행해 손상 범위를 파악한다. 가능하면 정상으로 확인된 백업에서 복원한다(데이터 손실을 최소화하는 PITR 권장). 스토리지/하드웨어를 테스트하고 PAGE_VERIFY CHECKSUM 설정을 확인한다. REPAIR 옵션은 데이터 손실을 일으킬 수 있으므로 백업 후 최후의 수단으로만 사용하며, 중요한 환경에서는 Microsoft 지원에 문의한다.
같은 데이터베이스의 다른 항목
- 3906Failed to update database because the database is read-only (데이터베이스가 읽기 전용이어서 갱신 실패)
- 15023User already exists in the current database (현재 데이터베이스에 사용자가 이미 존재)
- 18452Login failed. The login is from an untrusted domain and cannot be used with Windows authentication (로그인 실패. 신뢰할 수 없는 도메인의 로그인은 Windows 인증에 사용할 수 없음)
- 4922ALTER TABLE ALTER COLUMN failed because one or more objects access this column (하나 이상의 객체가 이 컬럼에 접근하므로 ALTER TABLE ALTER COLUMN 실패)
- 7202Could not find server 'name' in sys.servers (sys.servers에서 서버를 찾을 수 없음)
- 40501The service is currently busy. Retry the request after 10 seconds (서비스가 현재 바쁨. 10초 후 재시도)
- 8645A time out occurred while waiting for memory resources to execute the query (쿼리 실행을 위한 메모리 리소스를 기다리는 중 타임아웃 발생)