2009-09-16 20 views
19

Estoy tratando de escribir una rutina T-SQL que reduzca el archivo de registro de transacciones utilizando DBCC SHRINKFILE según 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, ¿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.Cómo obtener el nombre lógico del registro de transacciones en SQL Server 2005

Respuesta

35

Puede usar: archivos

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

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

EDIT:

Debo señalar que no se debe estar disminuyendo su registro de forma rutinaria. El 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 en un archivo instantáneo y tiene que cerrarse a cero cuando se le agrega espacio, que es una operación secuencial lenta que degrada el rendimiento.

+2

ps. Tenga en cuenta que diferentes bases de datos en la misma instancia pueden usar el mismo nombre de registro. Como resultado, además de poner 'DBCC SHRINKFILE ('nombre de registro lógico', tamaño)' primero debe poner 'use [MyDatabase]' para asegurarse de que está trabajando en el DB correcto. – JohnLBevan

12

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. Por lo tanto, DBCC SHRINKFILE (2...) siempre funcionará. No se puede parametrizar dentro de DBCC por lo que se evita el SQL dinámico. Si desea el nombre, use FILE_NAME (2).

3
select Name 
from sys.database_files 

Genera,

SomeDb_Data 
SomeDb_Log 

SqlServer 2012

Cuestiones relacionadas