MSSQLSERVER_17204

적용 대상:SQL Server

세부 사항

attribute
제품 이름 SQL Server
이벤트 ID 17204
이벤트 원본 MSSQLSERVER
구성 요소 SQLEngine
심볼 이름 DBLKIO_DEVOPENFAILED
메시지 텍스트 %ls: 파일 번호 %d에 대한 파일 %ls을(를) 열 수 없습니다. OS 오류: %ls.

설명

SQL Server가 지정된 OS 오류로 인해 지정된 파일을 열지 못했습니다.

SQL Server가 데이터베이스 및/또는 트랜잭션 로그 파일을 열 수 없는 경우 Windows 애플리케이션 이벤트 또는 SQL Server 오류 로그에 오류 17204가 표시될 수 있습니다. 다음은 이 오류의 예입니다.

Error: 17204, Severity: 16, State: 1.
FCB::Open failed: Could not open file c:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\data\MyDB_Prm.mdf for file number 1.  OS error: 5(Access is denied.).

SQL Server 인스턴스 시작 프로세스 또는 데이터베이스를 시작하려고 시도하는 데이터베이스 작업(예: ALTER DATABASE)에서 이러한 오류가 표시 될 수 있습니다. 일부 시나리오에서는 17204 및 17207 오류가 모두 표시될 수 있으며, 그 중 하나만 표시되는 경우도 있습니다.

사용자 데이터베이스에 이러한 오류가 발생하면 해당 데이터베이스는 RECOVERY_PENDING 상태로 유지되고 애플리케이션은 데이터베이스에 액세스할 수 없습니다. 시스템 데이터베이스에서 이러한 오류가 발생하면 SQL Server 인스턴스가 시작되지 않으며 이 SQL Server 인스턴스에 연결할 수 없습니다. 시스템 데이터베이스가 실패하면 SQL Server 장애 조치(failover) 클러스터 리소스가 오프라인 상태가 될 수도 있습니다.

원인

SQL Server 데이터베이스를 사용하려면 먼저 데이터베이스를 시작해야 합니다. 데이터베이스 시작 프로세스에는 다음이 포함됩니다.

  1. 데이터베이스 및 데이터베이스 파일을 나타내는 다양한 데이터 구조 초기화
  2. 데이터베이스에 속한 모든 파일 열기
  3. 데이터베이스에서 복구 실행

SQL Server는 CreateFile Windows API 함수를 사용하여 데이터베이스에 속한 파일을 엽니다.

메시지 17204(및 17207)는 SQL Server가 시작 프로세스 중에 데이터베이스 파일을 열려고 시도하는 동안 오류가 발생했음을 나타냅니다.

이러한 오류 메시지에는 다음 정보가 포함됩니다.

  1. 파일을 열려는 SQL Server 함수의 이름입니다. 이러한 오류 메시지에서 일반적으로 관찰하는 함수 이름은 다음 중 하나입니다.

    • FCB::Open - SQL Server에서 파일을 열려고 할 때 오류가 발생했습니다.
    • FileMgr::StartPrimaryDataFiles - 기본 데이터 파일 또는 기본 파일 그룹에 속하는 파일
    • FileMgr::StartSecondaryDataFiles - 보조 파일 그룹에 속하는 파일
    • FileMgr::StartLogFiles - 트랜잭션 로그 파일
    • STREAMFCB::Startup - SQL FileStream 컨테이너
    • FCB::RemoveAlternateStreams
  2. 함수 내에서 이 오류 메시지를 생성할 수 있는 여러 위치를 구분하는 상태 정보

  3. 파일의 전체 실제 경로

  4. 파일에 해당하는 파일 ID

  5. 운영 체제 오류 코드 및 오류 설명. 경우에 따라 오류 코드만 표시됩니다.

이러한 오류 메시지에 출력된 운영 체제 오류 정보는 오류 17204로 이어지는 근본 원인입니다. 이러한 오류 메시지의 일반적인 원인은 권한 문제 또는 잘못된 파일 경로입니다.

사용자 작업

  1. 오류 17204를 해결하려면 관련 운영 체제 오류 코드를 이해하고 해당 오류를 진단해야 합니다. 운영 체제 오류 조건이 해결되면 데이터베이스(예: ALTER DATABASE SET ONLINE 사용) 또는 SQL Server 인스턴스를 다시 시작하여 영향을 받는 데이터베이스를 온라인 상태로 만들 수 있습니다. 운영 체제 오류를 해결할 수 없는 경우도 있습니다. 그런 다음 특정 수정 작업을 수행해야 합니다. 이 섹션에서는 이러한 작업에 대해 설명합니다.

  2. 17204 오류 메시지에 오류 설명이 아닌 오류 코드만 포함된 경우 운영 체제 셸의 명령인 net helpmsg <오류 코드를 사용하여 오류 코드를> 해결해 볼 수 있습니다. 오류 코드로 8자리 상태 코드가 반환되는 경우 HRESULT를 Win32 오류 코드로 변환하는 방법은 무엇인가요?와 같은 정보 소스를 참조하여 이러한 상태 코드가 어떤 OS 오류인지 확인합니다.

  3. 운영 체제 오류 = 5가 Access is Denied 발생하는 경우 다음 방법을 고려합니다.

    • Windows 탐색기에서 파일의 속성을 확인하여 파일 집합의 사용 권한을 확인합니다. SQL Server는 Windows 그룹을 사용하여 다양한 파일 리소스에 대한 Access Control을 프로비전합니다. [SQLServerMSSQLUser$ComputerName$MSSQLSERVER 또는 SQLServerMSSQLUser$ComputerName$InstanceName과 같은 이름을 가진] 적절한 그룹에 오류 메시지에 언급된 데이터베이스 파일에 필요한 권한이 있는지 확인합니다. 자세한 내용은 데이터베이스 엔진 액세스에 대한 파일 시스템 권한 구성을 검토하세요. Windows 그룹에 SQL Server 서비스 시작 계정 또는 서비스 SID가 실제로 포함되어 있는지 확인합니다.

    • SQL Server 서비스가 현재 실행 중인 사용자 계정을 검토합니다. Windows 작업 관리자를 사용하여 이 정보를 가져올 수 있습니다. 실행 파일 "sqlservr.exe"의 "사용자 이름" 값을 찾습니다. 또한 최근에 SQL Server 서비스 계정을 변경한 경우 이 작업을 수행하는 지원되는 방법은 SQL Server Configuration Manager 유틸리티를 통해 수행된다는 것을 알고 있습니다. 이에 대한 자세한 내용은 SQL Server 구성 관리자에서 확인할 수 있습니다.

    • 작업 유형(서버 시작 시 데이터베이스 열기, 데이터베이스 연결, 데이터베이스 복원 등)에 따라 가장과 데이터베이스 파일 액세스에 사용되는 계정이 다를 수 있습니다. 데이터 및 로그 파일 보안 항목을 검토하여 어떤 작업이 어떤 사용 권한과 어떤 계정을 설정하는지 이해합니다. Windows SysInternals 프로세스 모니터와 같은 도구를 사용하여 파일 액세스가 SQL Server 인스턴스 서비스 시작 계정(또는 서비스 SID) 또는 가장된 계정의 보안 컨텍스트에서 일어나는지 확인합니다.

      SQL Server가 ALTER DATABASE 또는 CREATE DATABASE 작업을 실행하는 사용자의 자격 증명을 가장하는 경우 프로세스 모니터 도구(예제)에서 다음 정보를 확인할 수 있습니다.

      Date & Time:      3/27/2010 8:26:08 PM
      Event Class:        File System
      Operation:          CreateFile
      Result:                ACCESS DENIED
      Path:                  C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\attach_test.mdf
      TID:                   4288
      Duration:             0.0000366
      Desired Access:Generic Read/Write
      Disposition:        Open
      Options:            Synchronous IO Non-Alert, Non-Directory File, Open No Recall
      Attributes:          N
      ShareMode:       Read
      AllocationSize:   n/a
      Impersonating: DomainName\UserName
      
  4. OS 오류가 발생하면 The system cannot find the file specified = 3:

    • 오류 메시지에서 전체 경로 검토
    • Windows 탐색기에서 디스크 드라이브와 폴더 경로가 표시되고 액세스할 수 있는지 확인합니다.
    • Windows 이벤트 로그를 검토하여 이 디스크 드라이브에 문제가 있는지 확인합니다.
    • 경로가 올바르지 않고 이 데이터베이스가 시스템에 이미 존재한다면 데이터베이스 파일 이동 항목에서 설명하는 방법을 사용하여 데이터베이스 파일 경로를 변경할 수 있습니다. 특히 17204 또는 17207이 발생하고 지정된 디스크 드라이브를 사용할 수 없는 재해 복구 시나리오를 진행 중인 시스템 데이터베이스 파일의 경우 이 절차를 사용해야 할 수 있습니다. 이 항목에서는 다양한 시스템 데이터베이스[master, model, tempdb, msdb 및 mssqlsystemresource.mdf]의 현재 위치를 식별하는 방법도 설명합니다.
    • 데이터베이스 파일이 누락되어 이 오류가 표시되면 유효한 백업에서 데이터베이스를 복원해야 합니다.
      • 오류와 연결된 데이터베이스 파일이 보조 파일 그룹에 속하는 경우 필요에 따라 해당 파일 그룹을 오프라인으로 표시하고 데이터베이스를 온라인 상태로 전환한 다음 해당 파일 그룹의 복원만 수행할 수 있습니다. 자세한 내용은 ALTER DATABASE 파일 및 파일 그룹 옵션(Transact-SQL) 항목의 OFFLINE 섹션을 참조하세요.
      • 오류를 생성한 파일이 트랜잭션 로그 파일인 경우 항목 CREATE DATABASE(Transact-SQL)의 "FOR ATTACH" 및 "FOR ATTACH_REBUILD_LOG" 섹션 아래의 정보를 검토하여 누락된 트랜잭션 로그 파일을 다시 만드는 방법을 이해합니다.
    • SQL Server가 이러한 위치에 있는 데이터베이스 파일에 액세스하기 전에 디스크 또는 네트워크 위치(예: iSCSI 드라이브)를 사용할 수 있는지 확인합니다. 필요한 경우 클러스터 관리자 또는 서비스 제어 관리자에서 필요한 종속성을 만듭니다.
  5. 운영 체제 오류가 발생하는 경우 The process cannot access the file because it is being used by another process = 32:

    • 프로세스 탐색기 또는 Windows Sysinternals의 핸들과 같은 도구를 사용하여 다른 프로세스 또는 서비스가 이 데이터베이스 파일에 대한 배타적 잠금을 획득했는지 확인합니다.
    • 해당 프로세스가 SQL Server 데이터베이스 파일에 액세스하지 못하도록 합니다. 일반적인 예로는 바이러스 백신 프로그램이 포함됩니다(다음 KB 문서의 파일 제외 지침 참조).
    • 클러스터 환경에서 이전 소유 노드의 sqlservr.exe 프로세스가 데이터베이스 핸들을 실제로 릴리스했는지 확인합니다. 일반적으로 이 문제는 발생하지 않지만 클러스터 또는 I/O 경로가 잘못 구성되면 이러한 문제가 발생할 수 있습니다.