MSSQLSERVER_17204

Se aplica a:SQL Server

Detalles

Atributo Value
Nombre de producto SQL Server
Id. de evento 17204
Origen de eventos MSSQLSERVER
Componente SQLEngine
Nombre simbólico DBLKIO_DEVOPENFAILED
Texto del mensaje %ls: no se pudo abrir el archivo %ls para el número de archivo %d. Error del sistema operativo: %ls.

Explicación

SQL Server no pudo abrir el archivo especificado debido al error del sistema operativo especificado.

Es posible que vea el error 17204 en el evento de aplicaciones Windows o en el registro de errores de SQL Server cuando SQL Server no puede abrir una base de datos o archivos de registro de transacciones. Este es un ejemplo de cómo podría ser el error:

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.).

Puede ver estos errores durante el proceso de inicio de la instancia de SQL Server o cualquier operación de base de datos que intente iniciar la base de datos (por ejemplo, ALTER DATABASE). En algunos escenarios, puede ver los errores 17204 y 17207 y, en otras ocasiones, puede que solo vea uno de ellos.

Si una base de datos de usuario se ejecuta con estos errores, esa base de datos se quedará en el estado RECOVERY_PENDING y las aplicaciones no podrán acceder a la base de datos. Si una base de datos del sistema encuentra estos errores, la instancia de SQL Server no se iniciará y no podrá conectarse a esta instancia de SQL Server. Un error con una base de datos del sistema podría dar lugar a que un recurso de clúster de conmutación por error de SQL Server se quede sin conexión.

Causa

Antes de que se pueda usar cualquier base de datos de SQL Server, es necesario iniciar la base de datos. El proceso de inicio de la base de datos conlleva:

  1. Inicializar varias estructuras de datos que representan la base de datos y los archivos de base de datos
  2. Abrir todos los archivos que pertenecen a la base de datos
  3. Ejecutar la recuperación en la base de datos

SQL Server utiliza la función de la API de Windows CreateFile para abrir los archivos que pertenecen a una base de datos.

Los mensajes 17204 y 17207 indican que se ha producido un error mientras SQL Server intentaba abrir los archivos de base de datos durante el proceso de inicio.

Estos mensajes de error contienen la siguiente información:

  1. Nombre de la función de SQL Server que intenta abrir el archivo. El nombre de la función que se observa normalmente en estos mensajes de error es uno de los siguientes:

    • FCB::Open: el archivo ha detectado un error cuando SQL Server intenta abrirlo.
    • FileMgr::StartPrimaryDataFiles: un archivo de datos principal o un archivo perteneciente al grupo de archivos principal.
    • FileMgr::StartSecondaryDataFiles: un archivo perteneciente a un grupo de archivos secundario.
    • FileMgr::StartLogFiles: un archivo de registro de transacciones.
    • STREAMFCB::Startup: contenedor de SQL FileStream.
    • FCB::RemoveAlternateStreams
  2. La información de estado distingue varias ubicaciones dentro de una función que puede generar este mensaje de error.

  3. La ruta de acceso física completa del archivo.

  4. El id. de archivo que corresponde al archivo.

  5. El código de error del sistema operativo y la descripción del error. En algunos casos, solo verá el código de error.

La información de error del sistema operativo que se imprime en estos mensajes de error es la causa principal del error 17204. Las causas comunes de estos mensajes de error son un problema de permisos o una ruta de acceso incorrecta al archivo.

Acción del usuario

  1. La resolución del error 17204 implica la comprensión del código de error del sistema operativo asociado y el diagnóstico del error. Una vez que se resuelva la condición de error del sistema operativo, puede intentar reiniciar la base de datos (con ALTER DATABASE SET ONLINE, por ejemplo) o la instancia de SQL Server para poner en línea la base de datos afectada. En algunos casos, es posible que no pueda resolver el error del sistema operativo. A continuación, tendrá que realizar acciones correctivas específicas. Trataremos estas acciones en esta sección.

  2. Si el mensaje de error 17204 contiene solo un código de error y no una descripción del error, puede intentar resolver el código de error mediante el comando desde un shell del sistema operativo: net helpmsg <error code> . Si obtiene un código de estado de 8 dígitos como código de error, puede hacer referencia a las fuentes de información como ¿Cómo convertir un valor HRESULT en un código de error de Win32? para descodificar los códigos de estado en errores del sistema operativo.

  3. Si obtiene el error Access is Denied del sistema operativo = 5, tenga en cuenta estos métodos:

    • Compruebe los permisos que se establecen en el archivo examinando las propiedades del archivo en el Explorador de Windows. SQL Server utiliza grupos de Windows para aprovisionar Access Control en los distintos recursos de archivo. Asegúrese de que el grupo adecuado [con nombres como SQLServerMSSQLUser$ComputerName$MSSQLSERVER o SQLServerMSSQLUser$ComputerName$InstanceName] tiene los permisos necesarios en el archivo de base de datos mencionado en el mensaje de error. Vea Configuración de permisos del sistema de archivos para el acceso al motor de base de datos para obtener más información. Asegúrese de que el grupo de Windows incluye realmente la cuenta de inicio del servicio SQL Server o el identificador de seguridad del servicio.

    • Revise la cuenta de usuario en la que se ejecuta actualmente el servicio SQL Server. Puede usar el administrador de tareas de Windows para obtener esta información. Busque el valor "Nombre de usuario" para el archivo ejecutable "sqlservr.exe". Además, si ha cambiado recientemente la cuenta de servicio de SQL Server, debe saber que la manera admitida para realizar esta operación es mediante la utilidad Administrador de configuración de SQL Server. Hay más información disponible en Administrador de configuración de SQL Server.

    • Dependiendo del tipo de operación, como abrir bases de datos durante el inicio del servidor, adjuntar una base de datos, restaurar una base de datos, etc., la cuenta que se usa para la suplantación y el acceso al archivo de base de datos puede variar. Revise el tema Proteger archivos de datos y de registro para comprender qué operación establece qué permiso y para qué cuentas. Use una herramienta como Process Monitor de Windows SysInternals para saber si el acceso al archivo se produce en el contexto de seguridad de la cuenta de inicio del servicio de la instancia de SQL Server, o el identificador de seguridad del servicio, o una cuenta suplantada.

      Si SQL Server suplanta las credenciales del usuario que ejecuta la operación ALTER DATABASE o CREATE DATABASE, verá la siguiente información en la herramienta Process Monitor (ejemplo):

      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. Si obtiene The system cannot find the file specified error del sistema operativo = 3:

    • Revise la ruta de acceso completa del mensaje de error
    • Asegúrese de que la unidad de disco y la ruta de acceso de la carpeta son visibles y accesibles desde el Explorador de Windows
    • Revise el registro de eventos de Windows para determinar si existe algún problema con esta unidad de disco
    • Si la ruta de acceso es incorrecta y esta base de datos ya existe en el sistema, puede cambiar las rutas de acceso de los archivos de base de datos mediante los métodos que se explican en el tema Movimiento de archivos de base de datos. Es posible que tenga que usar este procedimiento, especialmente para los archivos de base de datos del sistema que encuentran 17204 o 17207, y trabaja en un escenario de recuperación ante desastres en el que las unidades de disco especificadas no están disponibles. En este tema también se explica cómo puede identificar la ubicación actual de las distintas bases de datos del sistema [master, model, tempdb, msdb y mssqlsystemresource].
    • Si ve este error porque faltan los archivos de base de datos, tendrá que restaurar la base de datos a partir de una copia de seguridad válida.
      • Si el archivo de base de datos asociado al error pertenece a un grupo de archivos secundario, tiene la opción de marcar ese grupo de archivos como sin conexión, poner la base de datos en línea y, después, realizar una restauración solo de ese grupo de archivos. Para obtener más información, consulte la sección OFFLINE del tema Opciones File y Filegroup de ALTER DATABASE (Transact-SQL).
      • Si el archivo que ha generado el error es un archivo de registro de transacciones, revise la información de las secciones "FOR ATTACH" y "FOR ATTACH_REBUILD_LOG" del tema CREATE DATABASE (Transact-SQL) para entender cómo puede volver a crear los archivos de registro de transacciones que faltan.
    • Asegúrese de que el disco o la ubicación de red [por ejemplo, la unidad iSCSI] está disponible antes de que SQL Server intente acceder a los archivos de base de datos en estas ubicaciones. Si es necesario, cree las dependencias necesarias en el Administrador de clústeres o el Administrador de control de servicios.
  5. Si recibe el error del sistema operativo = 32 The process cannot access the file because it is being used by another process:

    • Use una herramienta como el Explorador de procesos o Handle de Windows Sysinternals para determinar si otro proceso o servicio ha adquirido un bloqueo exclusivo en este archivo de base de datos
    • Detenga el acceso de ese proceso a los archivos de base de datos de SQL Server. Algunos ejemplos comunes son los programas antivirus (vea las instrucciones sobre exclusiones de archivos en el siguiente artículo de KB)
    • En un entorno de clústeres, asegúrese de que el proceso sqlservr.exe del nodo propietario anterior haya liberado realmente los identificadores de los archivos de base de datos. Normalmente esto no ocurre, pero las configuraciones incorrectas del clúster o las rutas de acceso de E/S pueden generar estos problemas.