tamaño - Cómo obtener el nombre lógico del registro de transacciones en SQL Server 2005
limpiar log de transacciones sql server (3)
Estoy tratando de escribir una rutina T-SQL que reduce 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 da el nombre lógico de la base de datos. ¿Hay uno equivalente para el registro de transacciones? Si no es así, ¿hay alguna otra manera de obtener esta información? El nombre predeterminado para los registros de transacciones es <<Database Name>>_log
, pero prefiero no confiar en esto.
Puedes usar:
SELECT name
FROM sys.master_files
WHERE database_id = db_id()
AND type = 1
Los archivos de registro tienen el tipo = 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 estar reduciendo 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 se puede inicializar instantáneamente y el archivo debe estar en cero cuando se le agrega espacio, lo que es una operación secuencial lenta que degrada el rendimiento.
Suponiendo una base de datos estándar (por ejemplo, solo un archivo de registro), el archivo de registro es siempre 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 se puede parametrizar dentro del DBCC, por lo que esto evita el SQL dinámico. Si quieres el nombre, usa FILE_NAME (2).
select Name
from sys.database_files
Genera,
SomeDb_Data
SomeDb_Log
SqlServer 2012