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
È 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.
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).
select Name
from sys.database_files
Genera,
SomeDb_Data
SomeDb_Log
SqlServer 2012
- 1. Come ridurre l'utilizzo del log delle transazioni di SQL Server
- 2. SQL Server 2005: perché denominare le transazioni?
- 3. Transazione di rollback tramite il log delle transazioni
- 4. SQL Server: come eseguire una query quando è stato effettuato l'ultimo backup del log delle transazioni?
- 5. transazioni nidificate in SQL Server
- 6. Come elencare il nome della tabella di origine delle colonne in VIEW (SQL Server 2005)
- 7. SQL Server Tempdb LOG file in crescita
- 8. Come ottenere il nome di Index da IndexId in SQL Server 2005
- 9. Come ripristinare il database da MDF in SQL Server 2005?
- 10. Come disabilitare i registri delle transazioni in SQL Server 2008
- 11. Come ottenere il nome del nodo ROOT da SQL Server
- 12. Isoweek in SQL Server 2005
- 13. Database SQL Server 2005 'In Recovery'
- 14. SQL Server 2005 replica
- 15. Come si legge il log delle transazioni di Zookeeper?
- 16. Ripristina DB SQL Server senza registro transazioni
- 17. Come utilizzare BIT in SQL Server 2005
- 18. SQL Server Transaction Log Explorer/Analyzer
- 19. Uso corretto delle transazioni in SQL Server 2008
- 20. Come definire ENUM in SQL Server 2005?
- 21. Startup-Log "Nessun gestore delle transazioni trovato"
- 22. Il log delle transazioni per il database 'database' è pieno.
- 23. Cambia proprietario del diagramma del database in SQL Server 2005
- 24. Dove posso trovare il log delle transazioni MySQL?
- 25. Trucchi e consigli circa l'ottimizzazione delle query [SQL Server 2005]
- 26. Come faccio a ridurre la dimensione del mio file di log del server sql?
- 27. Come posso creare un trigger disabilitato in SQL Server 2005?
- 28. Dimensioni del campo VARBINARY in SQL Server 2005
- 29. SQL Server 2005: come sottrarre sei mesi
- 30. Visualizzazione di colonne come righe in SQL Server 2005
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