Zmenšení databázového logu

Při použití výchozího plánu údržby databází Varia je každý den databázový log všech databází ořezáván. Při jeho pravidelném neořezávání může nastat situace, kdy databázový log (*.ldf soubor) jedné nebo více databází Varia naroste na neúnosnou mez a na disku nebude dostatek volného místa. Následkem bude nemožnost další práce s databází.

Databázový log nekontrolovaně narůstá zejména v okamžiku, kdy dochází k hromadným logovaným operacím s velkým množstvím záznamů (např. importy nebo mazání). V takovém okamžiku je potřeba zmenšit databázový log, aby se uvolnilo místo na disku. To lze provést třemi způsoby podle toho, který vám v daný okamžik bude fungovat a vyhovovat.

 

1. V Query Analyzeru, Management studiu nebo podobném nástroji napište následující příkaz:

Do verze MS SQL 2005 včetně:

USE JMENODB
BACKUP LOG JMENODB WITH NO_LOG
DBCC SHRINKFILE ('
logfile name')

např.:
USE DATA0001
BACKUP LOG DATA0001 WITH NO_LOG
DBCC SHRINKFILE ('DATA0001_log')

Od verze MS SQL 2008 pak:

USE JMENODB
ALTER DATABASE JMENODB SET RECOVERY SIMPLE
DBCC SHRINKFILE ('logfile name')
ALTER DATABASE JMENODB SET RECOVERY FULL
např.:

USE DATA0001
ALTER DATABASE DATA0001 SET RECOVERY SIMPLE
DBCC SHRINKFILE ('DATA0001_log')
ALTER DATABASE DATA0001 SET RECOVERY FULL

2. Použijte proceduru spav_shrinklogs nebo spav_shrinklog v závislosti na tom, zda chcete oříznout logy všech databází Varia, nebo pouze log konkrétní databáze (syntaxe - viz Uložené procedury v databázi master).

např.: spav_shrinklogs 1
ořízne logy databází Data, DMaj, DMzd, DOLE a DUct s číslem 0001 a 5001

 

3. Použijte uložené procedury sp_detach_db a sp_attach_db uložené v databázi master (viz Books Online).

a) Pomocí příkazu sp_detach_db 'dbname' odpojte databázi, jejíž log chcete zmenšit.
např.: sp_detach_db 'Data0001'

b) Smažte soubor(y) logu (*.ldf) přidružené k databázi.

c) Pomocí příkazu sp_attach_db 'dbname', 'filename' opět databázi připojte. SQL server si vytvoří nový prázdný log v adresáři, ve kterém je umístěn datový soubor.
např.: sp_attach_db 'Data0001' , 'd:\sqldata\Data0001.mdf'

Pokud chcete tuto operaci provést se všemi databázemi Varia, na SQL Serveru můžete pro odpojení a připojení použít procedury spav_odpojdata a spav_pripojdata, spav_odpoj_all_dbs a spav_pripoj_all_dbs_from_dir uložené v databázi master (syntaxe - viz Uložené procedury v databázi master).

např.: spav_odpojdata 1
odpojí všechny databáze Data, DMaj, DMzd, DOLE a DUct s číslem 0001 a 5001

Nezapomeňte, že si musíte být jisti tím, co děláte a že máte dostatečné zálohy pro případ neúspěchu!

 

Související dokument