Jak zkrátit protokoly transakcí v serveru SQL Server 2012

Transakční protokoly v serveru SQL Server 2012 nevyhnutelně rostou v čase a v určitém okamžiku mohou zabírat veškerý dostupný diskový prostor. Chcete-li se této situaci vyhnout, SQL Server má nástroje pro zkrácení protokolů transakcí uvolnit místo pro opakované použití. Protokoly jsou oříznuty automaticky v závislosti na použitém modelu obnovy:

  • Jednoduché (jednoduchý model) - protokoly jsou zkráceny po dosažení milníku
  • Plné (úplný model obnovy) - po provedení zálohy protokolů, pokud byl kontrolní bod dosažen po poslední záloze

Existují však situace, kdy automatické oříznutí protokolů nefunguje tak, jak by mělo, a soubory protokolu zabírají veškerý prostor na disku. Zpravidla se to stane neočekávaně a správce musí naléhavě vyřešit problém uvolnění místa na disku.

V tomto případě se při připojování k databázi MS SQL objeví následující chyba:

Poskytovatel Microsoft OLE pro SQL Server: Protokol transakcí pro databázi „DBName“ je plný. Chcete-li zjistit, proč nelze místo v protokolu znovu použít, viz sloupec log_reuse_wait_desc sys.database
HRESULT = 80040E14, SQLSTATE = 4 2000, nativní = 9002

To znamená, že protokoly transakcí zabíraly veškeré volné místo a SQL již nemůže zapisovat soubory protokolu. V této situaci můžete protokoly transakcí zkrátit ručně.

Obvykle k této situaci může dojít při použití modelu úplné obnovy (Full). V tomto modelu nejsou protokolové soubory zkráceny, dokud se všechny transakční protokoly nedostanou do zálohy. Tím je zajištěna souvislá posloupnost čísel záznamů (LSN) v protokolu. Chcete-li tedy zkrátit protokoly, musíte provést úplnou zálohu databáze nebo (rychlejší) dočasně změnit model obnovy na Simple.

Chcete-li tedy oříznout protokol transakcí, spusťte konzolu SQL Server Management Studio (SSMS), vyberte databázi, kterou potřebujete, a otevřete její vlastnosti v místní nabídce. Poté přejděte na kartu Možnosti a změňte model obnovy databáze (model obnovy) na Simple.

Poté v kontextové nabídce databáze vyberte Úkoly -> Zmenšit -> Soubors. Na poli Typ souboru vyberte Protokol a v poli Název souboru - název souboru protokolu. Na poli Smršťovací akce je třeba specifikovat Před uvolněním nevyužitého místa proveďte reorganizaci stránek, a určete velikost pro zmenšení souboru a klikněte Dobře.

Po oříznutí protokolu znovu přepněte do úplného (úplného) modelu obnovy databáze.

Všechny výše popsané operace lze provádět pomocí jednoduchého skriptu z produktu Query Analizer (skript běží na serveru SQL Server od verze 2008).
POUŽÍVEJTE „DBName“
ALTER DATABASE "DBName" SET RECOVERY SIMPLE
DBCC SHRINKFILE ("DBName", "Velikost, do které se má řezat protokol");
ALTER DATABASE "DBName" SET RECOVERY FULL

Tip. Po oříznutí protokolů transakcí na serveru SQL se důrazně doporučuje vytvořit úplnou zálohu databáze jako v případě poškození souborů protokolu nebudete moci databázi obnovit pomocí transakčních souborů.