Deshabilitar el registro de transacciones

79

Oracle tiene comandos SQL que se pueden emitir para que no se registre una transacción. ¿Existe algo similar para SQL Server 2008?

Mi escenario: necesitamos registros de Tx en servidores (Dev, QA, Prod), pero tal vez podamos prescindir de ellos en las máquinas de desarrollo.

Raj Más
fuente
1
¿Ha intentado utilizar vistas para sus datos calculados?
Lamento secuestrar su pregunta, pero ¿cómo deshabilitar el registro de transacciones en Oracle para un procedimiento / consulta particular? ¡Gracias!
Victor
3
@Kaushik, es mejor que hagas esto como si fuera una pregunta.
Raj More
" para que no se registre una transacción " esto no es cierto si se refiere a la NOLOGGEDopción.
a_horse_with_no_name
@RajMore ¿Aprendiste algo más sobre este tema? En nuestro caso, estamos haciendo una carga masiva y fue sorprendente ver tantos datos en el disco mediante el modo SIMPLE. Ahora entiendo por qué, pero me pregunto cuánto podría aumentar el rendimiento si se pudiera eliminar el registro de transacciones.
D-Klotz

Respuestas:

124

No puede prescindir de los registros de transacciones en SQL Server, bajo ninguna circunstancia. El motor simplemente no funcionará.

PUEDE configurar su modelo de recuperación en SIMPLE en sus máquinas de desarrollo, lo que evitará que el registro de transacciones se hinche cuando no se realizan las copias de seguridad del registro de transacciones.

ALTER DATABASE MyDB SET RECOVERY SIMPLE;
Aaron Alton
fuente
18
Solo un GRAN aviso: esta respuesta es 100% técnicamente correcta. Pero es únicamente algo que le gustaría usar en sus máquinas DESARROLLADORAS o cuando NO le importa poder hacer una copia de seguridad de sus datos. Consulte sqlservervideos.com/video/logging-essentials y sqlservervideos.com/video/shrinking-log-files para obtener más información y antecedentes.
Michael K. Campbell
O para bases de datos en RDS (o servicios equivalentes) donde la estrategia de respaldo usa instantáneas en lugar de registros de transacciones.
bsplosion
o la base de datos se construye a partir de otra fuente, por ejemplo, fuente de eventos, por lo que no hay transacciones ni necesidad de registro
Anthony Johnston
45

SQL Server requiere un registro de transacciones para funcionar.

Dicho esto, hay dos modos de funcionamiento para el registro de transacciones:

  • Simple
  • Lleno

En el modo completo , el registro de transacciones sigue creciendo hasta que realiza una copia de seguridad de la base de datos. En modo simple : el espacio en el registro de transacciones se 'recicla' en cada punto de control .

Muy pocas personas tienen la necesidad de ejecutar sus bases de datos en el modelo de recuperación completa . El único punto en el uso del modelo completo es si desea hacer una copia de seguridad de la base de datos varias veces al día, y la copia de seguridad de toda la base de datos lleva demasiado tiempo, por lo que simplemente realiza una copia de seguridad del registro de transacciones.

El registro de transacciones sigue creciendo todo el día y usted sigue haciendo copias de seguridad. Esa noche usted hace su copia de seguridad completa, y SQL Server luego trunca el registro de transacciones, comienza a reutilizar el espacio asignado en el archivo de registro de transacciones.

Si solo realiza copias de seguridad completas de la base de datos , no desea el modo de recuperación completa.

Ian Boyd
fuente
Esto está un poco mal: necesita hacer una copia de seguridad del registro para (con suerte) detener el crecimiento del registro de transacciones. Por supuesto, si tiene una transacción abierta o una transacción enorme, el registro crecerá porque las asignaciones de archivos de registro internos (VLF) no se pueden reutilizar o necesita más. Esa es una descripción general rápida, por cierto, no capítulo y versículo
gbn
1
@gbn No hace una copia de seguridad del registro para evitar que crezca. Quiero decir que , pero ese no es el objetivo de la función. Microsoft no creó un registro de transacciones para poder jugar "consumir todo su disco duro porque olvidó hacer una copia de seguridad del registro" . La razón por la que el registro sigue creciendo (y luego requiere una copia de seguridad para evitar que crezca) es para que pueda hacer una copia de seguridad solo del registro.
Ian Boyd
44

Hay un tercer modo de recuperación no mencionado anteriormente. El modo de recuperación determina en última instancia el tamaño de los archivos LDF y la frecuencia con la que se escriben. En los casos en los que vaya a realizar cualquier tipo de inserciones masivas, debe configurar la base de datos en "BULK / LOGGED". Esto hace que los insertos a granel se muevan rápidamente y se puedan cambiar sobre la marcha.

Para hacerlo

USE master ;
ALTER DATABASE model SET RECOVERY BULK_LOGGED ;

Para volver a cambiarlo:

USE master ;
ALTER DATABASE model SET RECOVERY FULL ;

En el espíritu de agregar a la conversación sobre por qué alguien no querría un LDF, agrego esto: Hacemos modelado multidimensional. Básicamente, utilizamos la base de datos como un gran almacén de variables que se procesan de forma masiva mediante programas externos. NUNCA requerimos retrocesos. Si pudiéramos aumentar el rendimiento desactivando TODOS los registros, lo tomaríamos en un santiamén.

NombreIsPete
fuente
1
Gracias por esto. Usamos la base de datos exactamente de la misma manera. No nos podría importar menos poder retroceder. Rendimiento puro es todo lo que buscamos
Dan
Para este escenario, puede considerar una base de datos diferente como Mongo (permite deshabilitar registros) o en memoria (redis y otros)
Tim
2

¿Cuál es tu problema con los registros de Tx? ¿Ellos crecen? Luego, configure la opción truncar en el punto de control.

De la documentación de Microsoft:

En SQL Server 2000 o en SQL Server 2005, el modelo de recuperación "Simple" es equivalente a "truncar el registro en el punto de control" en versiones anteriores de SQL Server. Si el registro de transacciones se trunca cada vez que se realiza un punto de control en el servidor, esto le impide utilizar el registro para la recuperación de la base de datos. Solo puede utilizar copias de seguridad completas de la base de datos para restaurar sus datos. Las copias de seguridad del registro de transacciones se desactivan cuando se utiliza el modelo de recuperación "Simple".

zvolkov
fuente
1
Bueno, problemas de espacio: algunos desarrolladores tienen máquinas más antiguas y podemos prescindir de ellas. Más concretamente, tengo curiosidad por saber si esto es posible. Tenía la impresión de que la opción "Truncar el registro en el punto de control" solo se estableció usando el modo de recuperación simple en SQL 2008. ¿Hay otra forma?
Raj More
1
@Tapori, son lo mismo. Lo cambiaron de nombre en 2000.
zvolkov
0

Si esto es solo para máquinas de desarrollo para ahorrar espacio, simplemente vaya con el modo de recuperación simple y estará bien.

Sin embargo, en máquinas de producción, le recomiendo encarecidamente que mantenga las bases de datos en modo de recuperación completa. Esto asegurará que pueda realizar una recuperación puntual si es necesario.

Además, tener bases de datos en modo de recuperación completa puede ayudarlo a deshacer actualizaciones y eliminaciones accidentales al leer el registro de transacciones. Consulte a continuación o más detalles.

¿Cómo puedo revertir una consulta de ACTUALIZACIÓN en SQL Server 2005?

Lea el archivo de registro (* .LDF) en sql server 2008

Si el espacio es un problema en las máquinas de producción, simplemente cree copias de seguridad frecuentes del registro de transacciones.

JdMR
fuente