2009-09-16 17 views
19

Sto tentando di scrivere una routine T-SQL che compatta il file di registro delle transazioni utilizzando DBCC SHRINKFILE in base al nome logico del database. La funzione DB_NAME() fornisce il nome logico del database. Ce n'è uno equivalente per il log delle transazioni? In caso contrario, c'è un altro modo per ottenere queste informazioni? Il nome predefinito per i registri delle transazioni è <<Database Name>>_log, ma preferirei non fare affidamento su questo.Come ottenere il nome logico del log delle transazioni in SQL Server 2005

risposta

35

È possibile utilizzare: i file

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

Login hanno type = 1 per qualsiasi database_id e tutti i file per tutti i database può essere trovato in sys.master_files.

EDIT:

Tengo a precisare che non si dovrebbe essere restringendo il registro su una base sistematica. Il registro delle transazioni deve essere dimensionato in modo appropriato per evitare che debba sempre crescere e quindi lasciato a quella dimensione. Il log delle transazioni non può essere il file istantaneo inizializzato e deve essere azzerato quando lo spazio viene aggiunto, che è un'operazione sequenziale lenta che degrada le prestazioni.

+2

ps. Si noti che diversi database sulla stessa istanza possono utilizzare lo stesso nome di registro. Come risultato oltre a mettere 'DBCC SHRINKFILE ('log log name', size)' dovresti prima mettere 'use [MyDatabase] 'per assicurarti di lavorare nel DB giusto. – JohnLBevan

12

Assumendo un database standard (ad esempio, un solo file di registro), il file di registro è sempre file_id = 2. Ciò vale anche se si dispone di più file di dati (id = 3+ per NDF).

Anche lo DBCC accetta l'id del file. Quindi, DBCC SHRINKFILE (2...) funzionerà sempre. Non è possibile parametrizzare all'interno del DBCC in modo da evitare l'SQL dinamico. Se si desidera il nome, utilizzare FILE_NAME (2).

3
select Name 
from sys.database_files 

Genera,

SomeDb_Data 
SomeDb_Log 

SqlServer 2012

Problemi correlati