Pregunta

Estoy tratando de escribir una rutina T-SQL que reduzca el archivo de registro de transacciones usando DBCC SHRINKFILE basado en el nombre lógico de la base de datos. La función DB_NAME() le proporciona el nombre lógico de la base de datos. ¿Hay uno equivalente para el registro de transacciones? Si no, ¿hay alguna otra forma de obtener esta información? El nombre predeterminado para los registros de transacciones es <<Database Name>>_log, pero prefiero no confiar en esto.

¿Fue útil?

Solución

Puedes usar:

SELECT name
FROM sys.master_files
WHERE database_id = db_id()
  AND type = 1

Los archivos de registro tienen type = 1 para cualquier database_id y todos los archivos para todas las bases de datos se pueden encontrar en sys.master_files.

EDITAR:

Debo señalar que no debería reducir su registro de forma rutinaria. Su registro de transacciones debe tener el tamaño adecuado para evitar que tenga que crecer, y luego dejarlo en ese tamaño. El registro de transacciones no puede ser un archivo instantáneo inicializado y debe cerrarse cuando se le agrega espacio, que es una operación secuencial lenta que degrada el rendimiento.

Otros consejos

Suponiendo una base de datos estándar (por ejemplo, solo un archivo de registro), el archivo de registro siempre es file_id = 2. Esto se aplica incluso si tiene varios archivos de datos (id = 3+ para NDF).

El DBCC también toma la identificación del archivo también. Entonces, DBCC SHRINKFILE (2...) siempre funcionará. No puede parametrizar dentro del DBCC, por lo que esto evita el SQL dinámico. Si desea el nombre, use FILE_NAME (2).

select Name
from sys.database_files

Genera,

SomeDb_Data  
SomeDb_Log

SqlServer 2012

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top