Cómo obtener el nombre lógico del registro de transacciones en SQL Server 2005
-
07-07-2019 - |
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.
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