Kompletní plán údržby pro SQL Server 2008
Optimalizace databází
Tato část je věnována optimalizaci databáze. V tomto příkladu nastavíme kód, abychom provedli následující (viz hrubý diagram o tom, jak jsou servery připojeny);
- Databáze zálohování ze živého serveru do složky sdílené zálohy
- Re-indexovat databázi
- Zabijte všechna připojení a obnovte databázi na serveru zpráv.
- Linked Servers budou brzy v samostatném článku
- Přihlášení k odeslání bude brzy v samostatném článku
Při překládání serveru budete muset povolit, aby účet, ze kterého je spuštěn SQL Server, přistupoval k souborovému systému cílových serverů.
Veškerý kód SQL je spuštěn z databáze nástrojů a schéma je nastaveno na "maint"
Existuje řada dalších článků, které jsme napsali níže, které vás mohou zajímat.
Kompletní plán údržby
Nyní můžeme spravovat všechny tyto samostatné segmenty kódu jiným postupem, který jim bude volat ve správném pořadí, který bude uveden na živém serveru. Kód běží následovně:
- Vypracujte čas
- Pokud je večer znovu indexovat databázi
- Spusťte zálohu databáze (přidejte, kde potřebujete)
- Pokud je večer zálohovat ostatní databáze (přidat, kde potřebujete)
- Zabíjet připojení a obnovit databázi (přidat tam, kde potřebujete)
Tento kód byl vyzkoušen a testován po dobu několika měsíců bez problémů.
Mějte na paměti, že zmenšení souborů protokolů a databázových souborů by mělo být omezeno na minimum, a to spuštěním zálohy, kterou vyprázdníte (i když bude zachováno použité místo). Pokud je zapotřebí, kdyby měl běžet mimo běžnou pracovní dobu.
SQL Code
GO
CREATE PROC [maint].MaintenancePlan AS BEGIN
DECLARE @BackupType VARCHAR(1)='E'
IF DATEPART(HOUR,GETDATE()) BETWEEN 5 AND 21 BEGIN
SET @BackupType='D'
END
--EXEC ('USE TempDb; DBCC SHRINKFILE(templog, 0)');--This is only needed when space is at a premium!
--Re-index Live
IF @BackupType='E' EXEC [maint].DatabaseReIndex 'dbname'
--Create Backup
BACKUP DATABASE TO DISK=N'{backuplocation}{dbname}.bak'
WITH NOFORMAT, INIT, NAME =N'{dbname}', SKIP, NOREWIND, NOUNLOAD, STATS= 10;
--EXEC ('USE ; DBCC SHRINKFILE(_log, 0)');--This is only needed when space is at a premium!
--Backup Other Files at Night
IF @BackupType='E' BEGIN
EXEC [maint].DatabaseReIndex 'dbname'
--Backup Others
BACKUP DATABASE [databasename] TO DISK=N'{backuplocation}{dbname2}.bak'
WITH FORMAT,INIT, NAME =N'{dbname2}',SKIP, NOREWIND, NOUNLOAD, STATS= 10
END
--Restore Backups on other server
EXEC [server].[utilities].[maint].KillConnections 'dbname';
IF @BackupType='E' BEGIN
EXEC [server].[utilities].[maint].KillConnections 'dbname2';
GO
Databáze zálohování
Chcete-li získat kód pro zálohování databáze, je nejjednodušší psát kód ze SSMS.
Postupujte podle postupu, který byste normálně používali, a poté vyberte možnost "Akce skriptu do nového okna dotazu".
Tento kód zkopírujte do plánu údržby.
Re-indexovat databázi
Dále můžeme přidat nějaký kód, abychom znovu indexovali naši databázi, je to opět sdílená procedura, kde je třeba pouze říct systému název.
Chcete-li zabránit duplicitě kódu, můžete o ní přečíst na níže uvedeném odkazu.
Zabij připojení
Při provádění obnovy v databázi můžete k němu připojit pouze jedno připojení (proces provádí obnovu), proto můžeme vytvořit uloženou proceduru, která uzavře všechna připojení kromě aktuálního procesu. Znovu jsme pro to vytvořili samostatný článek.
Obnovit databázi
Tento kód lze také skriptovat ze serveru SQL Server Management Studio. Pokud tento kód přidáte do uložené procedury, můžete jej z jiných procesů a dokonce i jiných serverů jednoduše volat. Přesunuli jsme to do samostatného článku, abychom pokryli další možnosti.