¿Modelo de recuperación SIMPLE o COMPLETO para bases de datos?

38

¿Cuándo debo usar el modelo de recuperación completa y cuándo debo usar el modelo de recuperación simple para bases de datos?

Siempre usé el modelo de recuperación completa porque es el predeterminado, pero hoy encontré este error:

Proveedor Microsoft OLE DB para SQL Server (0x80040E14) El registro de transacciones para la base de datos 'NOMBRE DE BASE DE DATOS' está lleno. Para saber por qué no se puede reutilizar el espacio en el registro, consulte la columna log_reuse_wait_desc en sys.databases

La base de datos específica es en realidad una de las bases de datos más pequeñas e inactivas en mi servidor, por lo que no tengo idea de cómo el registro puede estar lleno en esta base de datos, y no en las demás.

Para reducir el registro y volver a acceder a la base de datos, cambié el modelo de recuperación de COMPLETO a SIMPLE y reduje el registro de archivo lógico, con el siguiente comando

alter database myDbName SET recovery simple
go
dbcc shrinkfile('LOG FILE LOGICAL NAME', 100)
go

Ayudó, pero ahora necesito entender ¿POR QUÉ ayudó? ¿CÓMO comenzó esta situación y CÓMO evitar esto en el futuro?

EDITAR:

Todas las noches a la 1 en punto, estamos haciendo una copia de seguridad de cada base de datos en el servidor. Esto lo está haciendo un script de 31 líneas donde la parte más importante es

set @Filename = 'D:\backup\' + convert(varchar, getDate(), 112) + ' - ' + @DBName + '.bak'
set @Description = 'Full backup of database ' + @Filename
BACKUP DATABASE @DBName TO DISK = @Filename WITH INIT , NOUNLOAD , NAME = @Description, NOSKIP , STATS = 10, NOFORMAT

¿El nuevo modelo de recuperación y la reducción de bases de datos van a ser un conflicto con este script?

No estamos haciendo ningún otro tipo de copia de seguridad de las bases de datos y, por lo tanto, no los registros de transacciones, ¿deberíamos?

Behrens
fuente
Algo que vale la pena señalar ahora es que en este momento no es una opción en Azure SQL: siempre usa la recuperación COMPLETA. azure.microsoft.com/en-us/blog/…
jocull

Respuestas:

60

¿Cuándo debo usar el modelo de recuperación completa y cuándo debo usar el modelo de recuperación simple para bases de datos?

Debe usar el modelo de recuperación completa cuando requiera la recuperación de su base de datos en un momento determinado. Debe usar un modelo de recuperación simple cuando no necesite la recuperación de su base de datos en un punto en el tiempo y cuando la última copia de seguridad completa o diferencial sea suficiente como punto de recuperación. (Nota: hay otro modelo de recuperación, registro masivo. Para obtener más información sobre el modelo de recuperación registrado masivamente, consulte esta referencia )

Proveedor Microsoft OLE DB para SQL Server (0x80040E14) El registro de transacciones para la base de datos 'NOMBRE DE BASE DE DATOS' está lleno. Para saber por qué no se puede reutilizar el espacio en el registro, consulte la columna log_reuse_wait_desc en sys.databases

La razón por la que obtuvo ese error (muy probablemente) es porque no ha estado haciendo una copia de seguridad de su registro de transacciones. Cuando no está respaldado, continuará haciendo crecer físicamente el archivo de registro de transacciones (siempre que el crecimiento automático esté habilitado y maxsize lo permita) porque no puede reutilizar ninguna de las "partes" del registro de transacciones (archivos de registro virtuales). Solo puede marcar esos VLF para su reutilización y permitir la naturaleza "envolvente" del registro de transacciones cuando realiza una copia de seguridad del registro de transacciones (y algunos otros requisitos, como no transacciones activas, algunos aspectos de replicación, etc.).

Para reducir el registro y volver a acceder a la base de datos, cambié el modelo de recuperación de COMPLETO a SIMPLE y reduje el registro de archivo lógico, con el siguiente comando

......

Ayudó, pero ahora necesito entender ¿POR QUÉ ayudó? ¿CÓMO comenzó esta situación y CÓMO evitar esto en el futuro?

Esto lo ayudó porque al configurar su base de datos en el modelo de recuperación simple, le dijo a SQL Server que ya no le importa la recuperación en un punto en el tiempo, y el requisito de garantizar que los archivos de registro virtuales ya no necesiten conservarse y marcarse como activos, ahora un proceso de punto de control marca estos VLF como inactivos.

Extracto / cita tomada de esta referencia de MSDN :

Bajo el modelo de recuperación simple, a menos que algún factor esté retrasando el truncamiento del registro, un punto de control automático trunca la sección no utilizada del registro de transacciones. En contraste, bajo los modelos de recuperación de registro completo y masivo, una vez que se ha establecido una cadena de respaldo de registro, los puntos de control automáticos no causan el truncamiento del registro.

Luego hizo una reducción física del archivo de la base de datos y como ahora había espacio libre en su registro de transacciones, pudo reducir físicamente el archivo NTFS.

Lectura que vale la pena dedicar un tiempo a:

  1. Modelos de recuperación
  2. Gestión de registros de transacciones (Gail Shaw)
  3. Factores que pueden retrasar el truncamiento del registro

EDITAR después de su edición :

¿El nuevo modelo de recuperación y la reducción de bases de datos van a ser un conflicto con este script?

Ese BACKUP DATABASEcomando funcionará con cualquiera de los modelos de recuperación. En cuanto a la reducción de la base de datos de rutina ... ¡NO LO HAGAS! En serio, dimensione su base de datos en consecuencia, y si utiliza el modelo de recuperación completa, asegúrese de que está haciendo archivos de registro de transacciones frecuentes y de rutina, no solo para mantener a raya el tamaño del registro de transacciones sino también para cumplir con los objetos de punto de recuperación.

No estamos haciendo ningún otro tipo de copia de seguridad de las bases de datos y, por lo tanto, no los registros de transacciones, ¿deberíamos?

Si su base de datos está utilizando el modelo de recuperación completa, entonces sí, debería estar haciendo copias de seguridad del registro de transacciones. Si su base de datos está en recuperación simple, físicamente no puede hacer una copia de seguridad del registro de transacciones.

En cuanto a qué modelo de recuperación usar (simple o completo), no podemos tomar esa decisión por usted. Solo usted, su equipo comercial y sus SLA pueden hacerlo.

Thomas Stringer
fuente
Es posible que también desee agregar que si está utilizando la creación de reflejo de la base de datos, debe usar el Modelo de recuperación completa, ya que usa el archivo de registro para mantener actualizado el espejo.
Holger
Esa fue una excelente respuesta . La única parte que no entiendo es "también encontrar objetos de punto de recuperación". ¿Te importaría aclarar esa frase? Primero pensé que pretendías escribir "objetivos", pero no estaría seguro de esa suposición.
Anthony G - justicia para Monica