La base de datos no se puede actualizar porque es de solo lectura o tiene archivos de solo lectura. Haga que la base de datos o los archivos se puedan escribir y vuelva a ejecutar la recuperación

8

Recibí un archivo de base de datos y las instrucciones para cargarlo son instalar SQL Server 2005 y luego adjuntarlo usando SQL Server Management Studio.

Después de instalar todo, traté de adjuntar el archivo MDF pero luego me dice:

la búsqueda de directorio para el archivo "D: {folderName} {filename} .LDF" falló con el error del sistema operativo 21 (error no encontrado)

Un archivo LDF no vino con la base de datos, por lo que presumiblemente debería generarse automáticamente.

Ahora, la unidad D es donde está mi unidad de CD, por lo que no encontrará nada allí. Tampoco tendrá suerte tratando de crear algo allí.

  1. ¿Por qué está tratando de buscar un archivo de registro en una ruta específica? ¿Por qué no dónde está el archivo de la base de datos?

  2. ¿Cómo puedo adjuntar esta base de datos?

Me di cuenta de que cuando selecciono una base de datos para adjuntar, aparecen tres entradas en "detalles de la base de datos". un MDF, NDF y LDF. La "ruta actual del archivo" del LDF apunta a la ruta de la unidad D arriba, así que la eliminé.

Esta vez, cuando presiono "OK", recibo un mensaje de error diferente:

La base de datos no se puede actualizar porque es de solo lectura o tiene archivos de solo lectura.
Haga que la base de datos o los archivos se puedan escribir y vuelva a ejecutar la recuperación.

Error de activación de archivo. El nombre físico D: {carpeta} {archivo} .LDF puede ser incorrecto.
Se creó el nuevo archivo de registro "...". (Microsoft SQL Server, error: 3415)

Entonces, ahora crea un nuevo archivo de registro en la misma carpeta que el archivo de la base de datos, lo cual es genial, pero parece que hay problemas de seguridad.

Información Adicional:

  • Las instrucciones requieren que use el nombre de inicio de sesión "sa", que parece ser la cuenta sysadmin. Estoy conectado a mi instancia de SQL Server usando ese inicio de sesión.

  • He comprobado las propiedades del archivo que no es de solo lectura. El directorio tampoco es de solo lectura. Todas las ACL están permitidas.

  • No puedo adjuntar la base de datos. Cuando intento adjuntarlo, arroja un mensaje de error con "no se pudo adjuntar la base de datos".

  • Cerrar SSMS y volver a abrirlo como administrador no hizo ninguna diferencia.

  • select SERVERPROPERTY('ProductVersion')devuelve 9.00.4035.00. Hay otro archivo que viene con la base de datos llamada "dbdata.ini" que dice "IsSql2000 = 1", por lo que presumiblemente está destinado a cargarse en SQL Server 2000. Veré si puedo hacerlo funcionar en 2000.

MxLDevs
fuente

Respuestas:

8

Este no es un problema de acceso. El problema es que está adjuntando la base de datos a una versión superior de SQL Server que la instancia a la que .mdfse adjuntó originalmente y es de solo lectura. SQL Server está tratando de actualizar la base de datos como parte del adjunto y no puede porque la base de datos está en modo de solo lectura.

Si su base de datos está en READ_ONLY(lo que parece ser el caso basado en sus mensajes de error), entonces necesita todos los archivos (tanto de registro como de datos) para adjuntarlos según la documentación de Technet . Si mira bajo la FOR ATTACHcláusula, explícitamente describe que:

... para una base de datos de solo lectura, el registro no se puede reconstruir porque el archivo principal no se puede actualizar. Por lo tanto, cuando adjunte una base de datos de solo lectura cuyo registro no esté disponible, debe proporcionar los archivos de registro o los archivos de la FOR ATTACHcláusula.

Necesita el acompañamiento .ldfpara la base de datos. Me pondría en contacto con quien proporcionara la base de datos y les pediría que proporcionaran los archivos .mdfy .ldf. Luego, puede adjuntarlo con la siguiente sintaxis:

CREATE DATABASE [foo]
ON (FILENAME='<<path to mdf>>')
LOG ON (FILENAME='<<path to ldf>>')
FOR ATTACH;

El READ_ONLYestado no se puede eliminar de la base de datos sin adjuntarlo porque está almacenado en los metadatos de la base de datos. Para alterarlo, la base de datos debe estar en línea y adjuntada.

Otra alternativa es solicitar una copia de seguridad de la base de datos. Puede solucionar algunos de estos problemas más fácilmente si está haciendo una restauración de la base de datos en lugar de un archivo adjunto.

Mike Fal
fuente
1
Usar LOG ONcon la coincidencia ldfno resolvió el problema para mí
Mugen
25

Acabo de encontrar una publicación que respondió a esta pregunta:

Puede que esto no funcione en todos los casos, pero estaba tratando de instalar la base de datos de búsqueda semántica y obtuve el mismo error.

Tiene que ejecutar SQL Server Management Studio como administrador, y funciona.

Malabarista de datos
fuente
9
  1. Abre mi computadora.
  2. Busque la carpeta principal donde ha guardado el archivo ".mdf" y ".ldf".
  3. Haga clic derecho en la carpeta, haga clic en "Propiedades".
  4. En la ventana de propiedades, haga clic en "Seguridad"
  5. Haga clic en el botón "Editar"
  6. Habilite "Leer y ejecutar", "Leer", "Escribir" para los usuarios enumerados y aplique los cambios a las siguientes carpetas hasta los archivos de la base de datos.
  7. Intente adjuntar el archivo ".mdf"
Touhid Mustakhim. M. J
fuente
gracias, mi antigua ventana desapareció y creo que estos archivos están bloqueados por ese sistema operativo. pero solo necesito cambiar el permiso
saber tabatabaee yazdi
1

Haga clic derecho en los archivos .mdfy .ldf, uno a la vez y haga clic en 'propiedades', luego en la parte inferior donde dice 'este archivo proviene de otra computadora y podría estar bloqueado para ayudar a proteger esta computadora', haga clic en el botón Desbloquear.

Luego haga clic derecho, -> propiedades, -> pestaña de seguridad -> botón editar y seleccione 'usuarios' y otorgue permiso de control total.

Subodh Pradhan
fuente
1

En mi caso, la resolución fue iniciar sesión en SSMS con el modo Windows Auth en lugar del usuario sql que tiene el rol sysadmin. solo asegúrese de que el usuario que usó en el modo de autenticación de Windows tenga el permiso adecuado (mi caso fue sysadmin). Supongo que el usuario sql no tiene el permiso adecuado. máquina)

Ben F
fuente
0

Sin permisos en nuestro caso, ¡era la versión de SSMS!

(fue 2012 localmente cuando obtuvimos el error, pero funcionó cuando utilizamos SSMS 17+ desde una caja remota)

Bigpa
fuente
-1

También me ha surgido este problema. Ayudé a mi cliente reiniciando el servicio SQL y pude adjuntar el MDF por procedimiento normal.

Chadwick Powell
fuente
-2

1) Abra el Administrador de configuración del servidor SQL

2) Seleccione Servicios de servidor SQL (panel izquierdo)

3) Haga doble clic en su SqlServer (panel derecho)

4) Seleccione la pestaña Iniciar sesión

5) Seleccione el botón de radio incorporado y cambie el sistema local o el servicio de red en el cuadro combinado.

6) Haz clic en Ok.

7) Adjunte el archivo mdf en el administrador del servidor sql.

Ali Osman Yavuz
fuente
-2

Su servicio SQL Server probablemente se esté ejecutando en la cuenta NT Service \ MSSQLServer . Cambiarlo Sistema local le dará acceso.

Probablemente sea mejor crear un usuario y otorgarle permisos completos a la carpeta en la que están los archivos.

kwiboo
fuente