¿Realmente necesito mantener archivos .LDF?

9

Cada mes hacemos una instantánea de fin de mes de nuestra base de datos de producción. Estas instantáneas de fin de mes son estrictamente para fines de informes, no se realizan inserciones, actualizaciones o eliminaciones en ellas. Cada una de estas instantáneas tiene un archivo .MDFy .LDF.

Quiero eliminar los .LDFarchivos y liberar espacio en el servidor. ¿Hay alguna razón por la que necesito mantener los .LDFarchivos?

Aclaración:

Nuestra base de datos de producción se recrea cada noche a partir de extractos de archivos de otro sistema. Solo informamos de la base de datos de producción ... nunca se realizan actualizaciones.

Proceso nocturno: por
lo que puedo decir ...
Cada noche, las tablas de base de datos se truncan.
Las tablas se completan a través de una serie de instrucciones de inserción masiva. Los
índices se reconstruyen.

Michael Riley - también conocido como Gunny
fuente

Respuestas:

16

No debe eliminar el archivo de registro. Si está intentando volver a adjuntar un archivo de datos sin el registro, SQL Server técnicamente puede volver a crearlo, pero hay algunos problemas potenciales, como si hubiera transacciones abiertas cuando se desconectó la base de datos. En cuyo caso, tendría una pérdida total de datos.

Consume el espacio y no elimines tus archivos de registro . Estás pidiendo problemas con eso.

Consulte este artículo sobre Registros de transacciones , en particular la parte "Mala administración de registros".

Thomas Stringer
fuente
9

Como se mencionó en otra respuesta , no puede eliminar el archivo de registro. Lo que podría hacer es configurar la base de datos en READ_ONLY. Con la base de datos incorporada READ_ONLY, no se permiten modificaciones y el archivo de registro no crecerá. Puede reducir el tamaño del archivo de registro a un tamaño mínimo y lograr su objetivo de una huella mínima. Para configurar la base de datos, READ_ONLYejecute el siguiente comando:

USE master;
GO
ALTER DATABASE databasename SET READ_ONLY;
GO

Puede volver a modificar la base de datos READ_WRITE, hacer los cambios necesarios y luego configurarla en READ_ONLYcualquier momento que lo necesite.

El archivo de registro aún es necesario para mantener las propiedades ACID de la base de datos.

jgardner04
fuente
2

El hecho es que puede crear una base de datos simplemente usando el archivo mdf. Es el comando sp_attach_single_file_db (Transact-SQL). Tenga en cuenta que se eliminará en una versión futura de Microsoft SQL Server. Pero, no es inteligente eliminar sus archivos LDF. Shark tiene razón 'Estás pidiendo problemas con eso'. Otro punto de vista: ¿son enormes sus archivos ldf? Si lo son, puedes hacer algo al respecto.

  1. Establezca su base de datos en el modelo de recuperación simple . Puede hacer esto solo si no desea revertir las transacciones
  2. En lugar de crear archivos MDF y LDF, cree un archivo de copia de seguridad de la base de datos completa (.BAK). Será más pequeño tnan MDF + LDF
Carol Baker West
fuente
-3

Aquí está la solución que se me ocurrió para reducir los archivos LDF.

  1. Separar base de datos
  2. Cambie el nombre del archivo LDF a * _old.ldf
  3. Adjuntar base de datos
  4. Elimine la referencia al LDF faltante

Esto recrea un archivo LDF que tiene un tamaño de 504K.

  1. Eliminar * _old.ldf
  2. Vaciar papelera de reciclaje

Esto ha reclamado una cantidad significativa de espacio en disco en el servidor. Funciona para nosotros porque todas estas bases de datos son bases de datos de informes estáticos SOLAMENTE. Nunca se realizarán inserciones, actualizaciones o eliminaciones en estas bases de datos.

ACTUALIZACIÓN 2019-09-24: Sí, estoy de acuerdo en que esta es una muy mala idea. Dejé de hacer esto casi de inmediato. He reconstruido todos los índices utilizando un factor de relleno de 100. Reducido solo los archivos .ldf. Y cambió todas las bases de datos para que se LEAN SOLO.

Michael Riley - también conocido como Gunny
fuente
66
Wow, esta es una muy mala idea. ¿Qué sucede si la base de datos no se separa con éxito, o se pierde o corrompe en algún lugar entre 1 y 3? Estás jodido. Tiene cero copias de su base de datos.
Aaron Bertrand
3
La forma correcta de hacer esto sería: 1. Hacer una copia de seguridad COPY_ONLY de la base de datos. 2. Restaurarlo en el servidor de informes. 3. Establezca la recuperación en simple y marque la copia restaurada como de solo lectura. 4. Reduzca el archivo de registro manualmente. Sí, mientras tanto necesitas el espacio, ¡pero podrás conservar tu trabajo!
Aaron Bertrand