Jak zkrátím protokol transakcí v databázi SQL Server 2008?
Jaké jsou možné nejlepší způsoby?
Zkoušel jsem to z blogu takto:
1) Z databáze nastavení po jednoduché zotavení, zmenšení souboru a opětovné nastavení při úplném zotavení ve skutečnosti ztrácíte svá cenná data protokolu a nebudete schopni obnovit bod v čase. Nejen to, že nebudete moci používat následné soubory protokolu.
2) Zmenšující se soubor databáze nebo databáze přidává fragmentaci.
Můžete dělat spoustu věcí. Nejprve začněte s řádným zálohováním protokolu pomocí následujícího příkazu namísto jejich zkrácení a časté ztráty.
BACKUP LOG [TestDb] TO DISK = N'C:\Backup\TestDb.bak'
GO
Odstraňte kód SHRINKING souboru. Pokud používáte správné zálohy protokolu, váš soubor protokolu obvykle (opět obvykle nejsou vyloučeny zvláštní případy) neroste příliš velký.
Nejbezpečnější a správný způsob, jak zkrátit soubor protokolu, je-li databáze v režimu úplného zotavení, je zálohování transakčního protokolu (bez TRUNCATE_ONLY
. Toto bude v budoucích verzích zastaralé a není vhodné).
Zní to, jako byste chtěli svůj soubor protokolu později zmenšit. V takovém případě byste spustili příkaz DBCC SHRINKFILE(yourTLogName)
. Existuje volitelný druhý parametr pro požadovanou velikost, na kterou se má zmenšit.
Protokol můžete zálohovat do nulového zařízení:
backup log [databasename] to disk = 'nul';
Nebo můžete přepnout model obnovy na jednoduchý a pak znovu na plný/hromadný.
Pokud vám záleží na vašich záznamech a chcete se jich jen zbavit:
Změňte model obnovy z plného na jednoduchý a poté zpět na plný. Zmenšete soubor pomocí DBCC SHRINKFILE s argumentem TRUNCATEONLY
Následující příkaz změní model obnovy z úplného na jednoduchý
ALTER DATABASE <databse_name> SET RECOVERY SIMPLE
Následující příkaz změní model obnovy na plnou
ALTER DATABASE <databse_name> SET RECOVERY FULL
Chcete-li najít název souboru protokolu, můžete použít následující dotaz
SELECT name
FROM sys.master_files
WHERE database_id = DB_ID('<databse_name>')
Zmenšit soubor
DBCC SHRINKFILE (N'<logical_file_name_of_the_log>' , 0, TRUNCATEONLY)
Viz Jaký je příkaz k oříznutí souboru protokolu serveru SQL? , kde najdete další informace