it-swarm-eu.dev

Ručně nastavit velikost souboru protokolu po zmenšení SQL Server 2008 R2

Stávám se poněkud nedobrovolnou DBA při práci v motivu a opravdu potřebuji nějakou pomoc s něčím.

Máme databázi s kapacitou 40 GB v režimu úplného zotavení, není nakonfigurována žádná záloha protokolu a obrovský soubor protokolu s kapacitou 84 GB. Můj plán zatím zachránit tuto situaci je spustit úplnou zálohu protokolu v databázi, zmenšit soubor protokolu a podnítit plán údržby pro spuštění zálohy protokolu každou noc se zálohou databáze, což pomůže udržet ji pod kontrolou.

Můj problém je, že nechci, aby se soubor protokolu zmenšil na nic a trávil první ráno v pondělí neustále růst. Mám hrubý odhad toho, co by měl být soubor (asi 20% databáze), a rád bych to nastavil z get-go, aby bylo zajištěno co nejvíce sousedících prostor. Je to jen případ změny „Počáteční velikosti“ v nabídce Vlastnosti databáze -> Soubory? Také bych hádal, že databáze by musela být offline, aby k tomu došlo?

Díky předem

10
Tim Alexander

Stačí se zmenšit na to, co si myslíte, že je optimální velikost. Nepoužívejte uživatelské rozhraní, prostě to udělejte - řekněme, že vaše optimální velikost je 200 MB:

USE yourdb;
GO
DBCC SHRINKFILE(yourdb_log, 200);

Pokud máte zájem o zálohování protokolu pouze jednou denně a nezajímáte se o okamžité obnovení, měli byste přejít na jednoduchý model obnovy. To bude znamenat, že zálohy protokolu jsou zbytečné (ve skutečnosti nemožné), ale obsah protokolu se bude spravovat samostatně.

Pokud chcete, aby zálohy protokolů byly smysluplné, neplánujte si v noci plnou zálohu a hned poté zálohování jediného protokolu. To vás udrží v úplném modelu obnovy, díky tomu bude práce protokolu opravdu tvrdá a nic vám nekoupíte. Pokud tedy chcete obnovit v čase, zálohujte protokoly častěji rychlostí, která vyhovuje vaší toleranci ztráty dat. Pokud nechcete ztratit více než 15 minut dat, spusťte zálohu protokolu každých 15 minut.

6
Aaron Bertrand

Správa souborů může být zcela online operací. V závislosti na potřebě uchovat informace z protokolu pro účely obnovy máte dvě cesty:

Oprava času v čase není nutná

  1. Převést databázi na zotavení SIMPLE. Spusťte kontrolní bod pro zápis transakcí na disk.
  2. Srovnejte protokol.
  3. Změňte velikost protokolu na odpovídající velikost.

Doporučuji také nastavit pevnou částku růstu a neomezený růst (aby bylo možné lépe spravovat váš protokol). Všimněte si, že částka fixního růstu je do značné míry závislá na množství, doporučil bych zpočátku používat 1–2 GB v závislosti na tom, kolik růstu by mohl log očekávat. V ideálním případě váš protokol nebude moc růst, takže by to nemělo mít velký dopad. Pokud váš protokol roste pravidelně, možná budete muset znovu zkontrolovat svou velikost.

Provedeno pomocí:

ALTER DATABASE [foo] 
SET RECOVERY SIMPLE;

CHECKPOINT;

DBCC SHRINKFILE (foo_log,0);

ALTER DATABASE [foo]
MODIFY FILE (NAME=foo_log,SIZE=8000MB,MAXSIZE=UNLIMITED,FILEGROWTH=1000MB);

--Optional if you want the database in full recovery mode 
--for point in time recovery going forward
ALTER DATABASE [foo] 
SET RECOVERY FULL;

Potřebné zotavení v čase

Největší zavěšení bude, že nebudete moci zmenšit svůj soubor protokolu kolem aktuálně aktivního segmentu VLF). Chcete-li to vidět, můžete použít DBCC LOGINFO v kontextu databáze. Je aktivní jakýkoli segment se stavem = 2. Chcete-li vymazat aktivní segmenty, budete muset spustit zálohu protokolu transakcí, pokud v tomto segmentu nejsou aktuálně aktivní žádné transakce. Vaše kroky jsou:

  1. Spusťte zálohu protokolu transakcí.
  2. Zmenšit soubor. (V ideálním případě se vyrovnat, ale pokud je databáze aktivní, bude to obtížné).
  3. Opakujte kroky 1 a 2, dokud nebude váš protokol odpovídající velikosti, nejlépe co nejmenší.
  4. Změňte velikost protokolu na odpovídající velikost.

Provedeno pomocí:

BACKUP LOG [foo] TO DISK='<Location of t-log backup>';

DBCC SHRINKFILE (foo_log,0);

--Repeat the above until your log file is small "enough"

ALTER DATABASE [foo]
MODIFY FILE (NAME=foo_log,SIZE=8000MB,MAXSIZE=UNLIMITED,FILEGROWTH=1000MB);

Některé další zdroje k pochopení toho, co se zde děje:

12
Mike Fal

Ve skutečnosti ne, databáze nemusí být offline pro zmenšení protokolu. A řeknu, že je to pravděpodobně jeden z mála případů, kdy je zmenšení protokolu dobrý nápad. Mohli byste nastavit počáteční velikost, ale bylo by jednodušší provést smršťování a říci, že se zmenší na určitou velikost.

USE [DBName]
GO
DBCC SHRINKFILE (N'LogName' , SizeInMg)
GO

Můžete to také provést pomocí grafického uživatelského rozhraní a pomocí druhého přepínače a zaškrtávacího políčka, které říká, jak velký má být protokol na konci. K GUI se dostanete kliknutím pravým tlačítkem na databázi v objektu Explorer v SSMS, výběrem úkolů, zmenšením, soubory.

2
Kenneth Fisher

Jako doplněk Aaronova odpověď na jednoduchý režim , můžete naplánovat 2 (nebo více) rozdílových záloh za den, čímž se sníží okno ztráty dat při provozu databáze při zachování režimu SIMPLE.

2
Fabricio Araujo