ÚVOD
Tento dokument zaznamenává kroky, skripty a ideologii za údržbou prováděnou na produkční databázi mezi 22. dubnem 2015 a 23. dubnem 2015. Podrobnosti jsou specifické pro aplikaci, ale principy mohou být užitečné pro ostatní, kteří potřebují provádět podobné operace ve výrobě. .
POZADÍ
Databáze se rozrostla na více než 1,44 TB s tabulkou EPOEvents spotřebovává více než polovinu této velikosti (792 GB). V minulosti bylo vynaloženo úsilí na odstranění záznamů v této tabulce starších než 90 dnů. Bohužel se to ukázalo jako marné. Úloha naplánovaná k dosažení tohoto cíle nemohla být nikdy dokončena během žádné relace. Důvodem byl špatný výkon databáze.
Po diskuzi bylo rozhodnuto o vyčištění celých EPOEvents tabulky jejím oříznutím. Dalším rozhodnutím bylo správně připravit databázi na očekávaný růst dat v budoucnu.
Podrobnosti o daném databázovém serveru jsou uvedeny níže:
NÁZEV SERVERU | SVR-EPO-02 |
NÁZEV INSTANCE | SVR-EPO-02\ENG_AVSERVER |
VERZE OS | Windows 2008 R2 Enterprise (SP1) 64bitová verze |
VERZE DB | Microsoft SQL Server 2008 R2 (SP1) 64bitový |
IP ADRESA | XX.XX.XX.XX |
NÁZEV DATABÁZE | ePO4_SVR-EPO-02 |
TABULKA EPOEVENTŮ
Skript definující EPOEvents tabulka je zdokumentována v příloze I.
Za zmínku stojí, že sloupec AutoID této tabulky je ve vztazích cizího klíče s tabulkami HIP8_EventInfo, HIP8_IPSEventParameter a SCOR_EVENTS. To ovlivnilo přístup použitý ke zkrácení tabulky EPOEvents. Souhrnné podrobnosti jsou v tabulce níže:
Tyto informace byly extrahovány pomocí příkazu ve výpisu 1.
USE [ePO4_SVR-EPO-02]
GO
EXEC sp_fkeys 'EPOEvents'
SOUHRN POSTUPU
Shrnutí postupu použitého během změny:
- Nasaďte pět 200GB disků
- Zastavit aplikační služby EPO
- Zálohujte databázi EPO
- Vytvořte novou skupinu souborů
- Zkrácení událostí EPOEvents tabulky
- Přesuňte události EPOEvents do nové skupiny souborů
- Znovu vytvořit cizí klíče v podřízené tabulce
- Skriptujte definici tabulky EPOEvents
- Zálohujte databázi EPO
- Zmenšit datové soubory v PRIMARY Filegroup
- Zálohujte databázi EPO
- Zrušte databázi EPO
- Formátovat disk J
- Obnovte databázi EPO pomocí MOVE
- Přemístit TempDB na Drive Q
- Spusťte aplikační služby EPO
- Potvrďte, že jsou události EPOEvents naplněny
Nasaďte pět 200GB disků
Na server bylo nasazeno pět nových jednotek. Úplný seznam všech jednotek na serveru je následující:
DRIVE | POUŽÍVAT | NOVÉ? | KOMENTÁŘ |
C | Systémový disk | NE | Výchozí velikost clusteru (4 kB) |
D | Disk aplikací | NE | Výchozí velikost clusteru (4 kB) |
Já | Data MSSQL (STARÉ) | NE | Výchozí velikost clusteru (4 kB) |
J | Protokol MSSQL | NE | Doporučená velikost clusteru pro SQL (64 kB) |
M | Data MSSQL (FG_LARGE FileGroup) | ANO | Doporučená velikost clusteru pro SQL (64 kB) |
N | Data MSSQL (FG_LARGE FileGroup) | ANO | Doporučená velikost clusteru pro SQL (64 kB) |
O | Data MSSQL (FG_LARGE FileGroup) | ANO | Doporučená velikost clusteru pro SQL (64 kB) |
P | Data MSSQL (PRIMARY FileGroup) | ANO | Doporučená velikost clusteru pro SQL (64 kB) |
O | MSSQL TempDB | ANO | Doporučená velikost clusteru pro SQL (64 kB) |
Všechny nové disky byly naformátovány pomocí velikosti clusteru 64 kB, jak doporučuje společnost Microsoft pro disky obsahující data nebo soubory protokolu MS SQL Server[1]. Jednotka J byla také přeformátována po vytvoření zálohy databáze.
[1] Celá diskuse je dostupná na https://msdn.microsoft.com/en-us/library/dd758814.aspx
Zastavit aplikační služby EPO
Všechny aplikační služby byly zastaveny, aby se zajistila neaktualizace databáze po dobu změny. Aplikační služby zastavené (nebo potvrzené dolů) jsou následující:
- Aplikační server McAfee ePolicy Orchestrator 4.6.8
- McAfee ePolicy Orchestrator 4.6.8 analyzátor událostí
- Server McAfee ePolicy Orchestrator 4.6.8
Zálohujte databázi EPO
První záloha databáze byla provedena předtím, než byla provedena jakákoli akce na stávající struktuře, pomocí skriptu ve výpisu 2.
Výpis 2:První záloha databáze ePO4_SVR-EPO-02
BACKUP DATABASE [ePO4_SVR-EPO-02] to
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A01.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A02.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A03.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A04.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A05.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A06.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A07.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A08.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A09.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A10.bak'
WITH STATS = 5, COMPRESSION, NAME = N'ePO4_SVR-EPO-02 First Backup Before Purge'
Vytvořte novou skupinu souborů
Nová skupina souborů s názvem FG_LARGE byla vytvořena pomocí ekvivalentu skriptu ve výpisu 3. Všechny soubory přidané do skupiny souborů byly definovány s počáteční velikostí 40 GB, přírůstkem 1G a maximální velikostí 100 GB.
Výpis 3:Vytvoření skupiny souborů FG_LARGE
USE [master]
GO
ALTER DATABASE [ePO4_SVR-EPO-02] ADD FILEGROUP [FG_LARGE]
GO
USE [master]
GO
ALTER DATABASE [ePO4_SVR-EPO-02] ADD FILE ( NAME = N'ePO4_SVR-EPO_FG_LARGE_01', FILENAME = N'M:\MSSQL\DATA\ePO4_SVR-EPO_FG_LARGE_01.ndf' , SIZE = 41943040KB , MAXSIZE = 104857600KB , FILEGROWTH = 1048576KB ) TO FILEGROUP [FG_LARGE]
GO
ALTER DATABASE [ePO4_SVR-EPO-02] ADD FILE ( NAME = N'ePO4_SVR-EPO_FG_LARGE_02', FILENAME = N'M:\MSSQL\DATA\ePO4_SVR-EPO_FG_LARGE_02.ndf' , SIZE = 41943040KB , MAXSIZE = 104857600KB , FILEGROWTH = 1048576KB ) TO FILEGROUP [FG_LARGE]
GO
ALTER DATABASE [ePO4_SVR-EPO-02] ADD FILE ( NAME = N'ePO4_SVR-EPO_FG_LARGE_03', FILENAME = N'N:\MSSQL\DATA\ePO4_SVR-EPO_FG_LARGE_03.ndf' , SIZE = 41943040KB , MAXSIZE = 104857600KB , FILEGROWTH = 1048576KB ) TO FILEGROUP [FG_LARGE]
GO
ALTER DATABASE [ePO4_SVR-EPO-02] ADD FILE ( NAME = N'ePO4_SVR-EPO_FG_LARGE_04', FILENAME = N'N:\MSSQL\DATA\ePO4_SVR-EPO_FG_LARGE_04.ndf' , SIZE = 41943040KB , MAXSIZE = 104857600KB , FILEGROWTH = 1048576KB ) TO FILEGROUP [FG_LARGE]
GO
ALTER DATABASE [ePO4_SVR-EPO-02] ADD FILE ( NAME = N'ePO4_SVR-EPO_FG_LARGE_05', FILENAME = N'O:\MSSQL\DATA\ePO4_SVR-EPO_FG_LARGE_05.ndf' , SIZE = 41943040KB , MAXSIZE = 104857600KB , FILEGROWTH = 1048576KB ) TO FILEGROUP [FG_LARGE]
GO
ALTER DATABASE [ePO4_SVR-EPO-02] ADD FILE ( NAME = N'ePO4_SVR-EPO_FG_LARGE_06', FILENAME = N'O:\MSSQL\DATA\ePO4_SVR-EPO_FG_LARGE_06.ndf' , SIZE = 41943040KB , MAXSIZE = 104857600KB , FILEGROWTH = 1048576KB ) TO FILEGROUP [FG_LARGE]
GO
Zkrácení událostí EPOEvents tabulky
Výpis 4 ukazuje kompletní sadu úloh potřebných k úspěšnému zkrácení tabulky EPOEvents. Skript obsahuje poznámky pro srozumitelnost.
Základním problémem, který je třeba poznamenat, je, že není možné zkrátit tabulku, která se účastní jako nadřazená ve vztahu cizího klíče. Porušilo by to referenční integritu. Odstranění by fungovalo a zachovalo by referenční integritu, protože cizí klíče jsou obvykle definovány pomocí klauzulí ON DELETE CASCADE nebo ON DELETE SET NULL.
Výpis 4:Zkrácení tabulky událostí EPOEvents a přemístění do nového tabulkového prostoru
/****** Check Foreign Keys Referencing EPOEvents ******/
USE [ePO4_SVR-EPO-02]
GO
EXEC sp_fkeys 'EPOEvents'
/****** Script Identified Foreign Keys ******/
USE [ePO4_SVR-EPO-02]
GO
ALTER TABLE [dbo].[HIP8_IPSEVENTPARAMETER] WITH CHECK ADD CONSTRAINT [FK_HIP8_IPSEVENTPARAMETER_EPOEVENTS] FOREIGN KEY([EVENTID])
REFERENCES [dbo].[EPOEVENTS] ([AUTOID])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[HIP8_IPSEVENTPARAMETER] CHECK CONSTRAINT [FK_HIP8_IPSEVENTPARAMETER_EPOEVENTS]
GO
USE [ePO4_SVR-EPO-02]
GO
ALTER TABLE [dbo].[HIP8_EVENTINFO] WITH CHECK ADD CONSTRAINT [FK_HIP8_EVENTINFO_EPOEVENTS] FOREIGN KEY([EVENTID])
REFERENCES [dbo].[EPOEVENTS] ([AUTOID])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[HIP8_EVENTINFO] CHECK CONSTRAINT [FK_HIP8_EVENTINFO_EPOEVENTS]
GO
USE [ePO4_SVR-EPO-02]
GO
ALTER TABLE [dbo].[SCOR_EVENTS] WITH CHECK ADD CONSTRAINT [SCOR_EVENTS_EPO_EVENTS] FOREIGN KEY([EPO_EVENT_AUTO_ID])
REFERENCES [dbo].[EPOEVENTS] ([AUTOID])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[SCOR_EVENTS] CHECK CONSTRAINT [SCOR_EVENTS_EPO_EVENTS]
GO
/****** Backup the Child Tables ******/
USE [ePO4_SVR-EPO-02]
GO
SELECT * INTO HIP8_IPSEVENTPARAMETER_BAK FROM HIP8_IPSEVENTPARAMETER;
SELECT * INTO HIP8_EVENTINFO_BAK FROM HIP8_EVENTINFO;
SELECT * INTO SCOR_EVENTS_BAK FROM SCOR_EVENTS;
GO
/****** Truncate Child Tables ******/
USE [ePO4_SVR-EPO-02]
GO
TRUNCATE TABLE HIP8_IPSEVENTPARAMETER;
TRUNCATE TABLE HIP8_EVENTINFO;
TRUNCATE TABLE SCOR_EVENTS;
/****** Drop Foreign Keys ******/
USE [ePO4_SVR-EPO-02]
GO
ALTER TABLE HIP8_IPSEVENTPARAMETER DROP CONSTRAINT [FK_HIP8_IPSEVENTPARAMETER_EPOEVENTS];
ALTER TABLE HIP8_EVENTINFO DROP CONSTRAINT [FK_HIP8_EVENTINFO_EPOEVENTS];
ALTER TABLE SCOR_EVENTS DROP CONSTRAINT [SCOR_EVENTS_EPO_EVENTS];
/***** Truncate EPOEvents Table ******/
USE [ePO4_SVR-EPO-02]
GO
TRUNCATE TABLE EPOEVENTS;
Přesuňte události EPOEvents do nové skupiny souborů
Tabulka EPOEvents byla přesunuta do skupiny souborů FG_LARGE pomocí skriptu ve výpisu 5.
Výpis 5:Přesouvání skupiny souborů EPOEvents FG_LARGE
/***** Move EPOEvents to the New Filegroup FG_LARGE ******/
-- This is achieved by recreating the Clustered Index used by Primary Key on this table
-- First Step is to Script the Clustered Index
USE [ePO4_SVR-EPO-02]
GO
ALTER TABLE [dbo].[EPOEvents] ADD CONSTRAINT [PK_EPOEvents_AutoID] PRIMARY KEY CLUSTERED
(
[AutoID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
-- Second Step is to drop and recreate the Clustered Index after changing
-- the Filegroup the Script (observe the ON Clause in the create statement below:
-- Filegroup was previously PRIMARY and is now FG_LARGE)
-- Drop Statement
USE [ePO4_SVR-EPO-02]
GO
ALTER TABLE [dbo].[EPOEvents] DROP CONSTRAINT [PK_EPOEvents_AutoID]
-- Create Statement
USE [ePO4_SVR-EPO-02]
GO
ALTER TABLE [dbo].[EPOEvents] ADD CONSTRAINT [PK_EPOEvents_AutoID] PRIMARY KEY CLUSTERED
(
[AutoID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [FG_LARGE]
GO
Znovu vytvořit cizí klíče v podřízených tabulkách
Cizí klíče na podřízených tabulkách identifikované v kroku 4.1.5 byly znovu vytvořeny pomocí skriptu ve výpisu 6.
Výpis 6:Zkrácení tabulky událostí EPOEvents a přemístění do nové skupiny souborů
USE [ePO4_SVR-EPO-02]
GO
ALTER TABLE [dbo].[HIP8_IPSEVENTPARAMETER] WITH CHECK ADD CONSTRAINT [FK_HIP8_IPSEVENTPARAMETER_EPOEVENTS] FOREIGN KEY([EVENTID])
REFERENCES [dbo].[EPOEVENTS] ([AUTOID])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[HIP8_IPSEVENTPARAMETER] CHECK CONSTRAINT [FK_HIP8_IPSEVENTPARAMETER_EPOEVENTS]
GO
ALTER TABLE [dbo].[HIP8_EVENTINFO] WITH CHECK ADD CONSTRAINT [FK_HIP8_EVENTINFO_EPOEVENTS] FOREIGN KEY([EVENTID])
REFERENCES [dbo].[EPOEVENTS] ([AUTOID])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[HIP8_EVENTINFO] CHECK CONSTRAINT [FK_HIP8_EVENTINFO_EPOEVENTS]
GO
ALTER TABLE [dbo].[SCOR_EVENTS] WITH CHECK ADD CONSTRAINT [SCOR_EVENTS_EPO_EVENTS] FOREIGN KEY([EPO_EVENT_AUTO_ID])
REFERENCES [dbo].[EPOEVENTS] ([AUTOID])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[SCOR_EVENTS] CHECK CONSTRAINT [SCOR_EVENTS_EPO_EVENTS]
GO
Skriptujte definici tabulky EPOEvents
Jako záloha to bylo ideální pro skriptování výpisu DDL tabulky EPOEvents. To bylo provedeno kliknutím pravým tlačítkem myši a výběrem možnosti Tabulka skriptu jako> VYTVOŘIT do> Nové okno editoru dotazů z Průzkumníka objektů SSMS[1]. Výsledný skript lze uložit do .sql soubor.
Zálohujte databázi EPO
Druhá záloha databáze EPO byla pořízena se skriptem ve výpisu 7 pro přípravu na další fázi (zmenšení datového souboru).
Výpis 7:Druhá záloha databáze EPO
BACKUP DATABASE [ePO4_SVR-EPO-02] TO
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C01.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C02.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C03.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C04.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C05.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C06.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C07.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C08.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C09.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C10.bak'
WITH STATS = 5, COMPRESSION, NAME = N'ePO4_SVR-EPO-02 Backup After Purge'
Zmenšit datové soubory v PRIMARY Filegroup
Zmenšení je nezbytné pro znovuzískání místa uvolněného zkrácením tabulky EPOEvents. V tomto případě to bylo také zásadní, protože datové soubory vyžadovaly přemístění na menší disk.
Datové soubory byly přemístěny z disku I – 3 TB disku na disk P, 200 GB disku.
Tři datové soubory v PRIMARY Filegroup byly logicky pojmenovány ePO4_SVR-EPO-01 (~300 GB), ePO4_SVR-EPO-02 (~500 GB) a ePO4_SVR-EPO-03 (~400 GB).
Cílem bylo zmenšit všechny soubory na 40 000 MB každý. Úloha vyžadovala pět až sedm iterací, z nichž každá odstranila 50 000 MB.
Výpis 8:Zmenšování datových souborů v PRIMARY Filegroup
USE [ePO4_SVR-EPO-02]
GO
DBCC SHRINKFILE (N'ePO4_SVR-EPO-01' , 40000)
DBCC SHRINKFILE (N'ePO4_SVR-EPO-02' , 40000)
DBCC SHRINKFILE (N'ePO4_SVR-EPO-03' , 40000)
GO
Zálohujte databázi EPO
Druhá záloha databáze EPO byla pořízena pomocí skriptu v Výpis 5 připravit se na další fázi (vyřazení stávající databáze). Skript se nachází v Výpisu 9 .
Výpis 9:První záloha databáze ePO4_SVR-EPO-02
BACKUP DATABASE [ePO4_SVR-EPO-02] TO
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E01.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E02.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E03.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E04.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E05.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E06.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E07.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E08.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E09.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E10.bak'
WITH STATS = 5, COMPRESSION, NAME = N'ePO4_SVR-EPO-02 Backup After Shrink'
Zrušte databázi EPO
Databáze byla odstraněna pomocí GUI SSMS – klikněte na databázi pravým tlačítkem myši a z rozbalovací nabídky vyberte možnost „smazat“. Ekvivalentní SQL je v výpisu 10 .
Výpis 10:Zrušte databázi EPO
USE [master]
GO
DROP DATABASE [ePO4_SVR-EPO-02]
GO
Formátovat disk J
Tento krok naformátuje jednotku J pomocí velikosti clusteru 64 kB, jak doporučuje společnost Microsoft pro optimální výkon I/O. Tato úloha byla dříve provedena na nových jednotkách nasazených v kroku 4.1.1.
Obrázek 3 ukazuje volbu vybranou v dialogovém okně Formát….
Obnovte databázi EPO pomocí MOVE
Operace obnovení byla nezbytná ze tří důvodů:
- Pro formátování jednotky J obsahující soubory protokolu transakcí (jak je uvedeno výše).
- Chcete-li odstranit jakoukoli fragmentaci způsobenou operací zmenšování.
- Přemístit databázi na nové disky.
Skript v Zápisu 11 slouží k obnově. Všimněte si, že sada záloh použitá pro toto obnovení je poslední záloha pořízená v kroku 4.1.8. Všimněte si také, že možnost MOVE slouží k přemístění datových souborů v PRIMARY Filegroup na jednotku P.
Výpis 11:Zrušte databázi EPO
RESTORE DATABASE [ePO4_SVR-EPO-02] FROM
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E01.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E02.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E03.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E04.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E05.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E06.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E07.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E08.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E09.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E10.bak'
WITH STATS = 5,
MOVE 'ePO4_SVR-EPO-02' TO 'P:\MSSQL\DATA\ePO4_SVR-EPO-02.mdf',
MOVE 'ePO4_SVR-EPO-01' TO 'P:\MSSQL\DATA\ePO4_SVR-EPO-01.ndf',
MOVE 'ePO4_SVR-EPO-03' TO 'P:\MSSQL\DATA\ePO4_SVR-EPO-03.ndf'
Přemístit TempDB na Drive Q
Pro optimální výkon velkých databází se také doporučuje umístit soubory TempDB na vyhrazený disk.
Pomocí skriptu ve výpisu 9 byla TempDB přemístěna na jednotku Q. Všimněte si, že během této operace byly odstraněny nadbytečné datové soubory TempDB. Počet datových souborů TempDB by měl odpovídat počtu fyzických CPU dostupných pro SQL Server.
Výpis 12:Přemístit TempDB
-- Drop unnecessary TempDB files
-- The following script was run several times and required several restarts of the -- SQL instance
USE [tempdb]
GO
ALTER DATABASE [tempdb] REMOVE FILE [tempdev_xx]
GO
-- Relocate TempDB files
USE master;
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev, FILENAME = 'Q:\MSSQL\DATA\tempdev.mdf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev_01, FILENAME = 'Q:\MSSQL\DATA\tempdev_01.mdf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = templog, FILENAME = 'J:\MSSQL\LOG\templog.ldf');
GO
-- Restart SQL Server
-- Confirm the location of TempDB files
SELECT name as 'File Name', physical_name as 'File Directory'
FROM sys.master_files
WHERE database_id = DB_ID('tempdb');
GO
Spusťte aplikační služby EPO
Všechny aplikační služby byly spuštěny po potvrzení instance SQL Server v pořádku. Spuštěné aplikační služby jsou následující:
- Aplikační server McAfee ePolicy Orchestrator 4.6.8
- McAfee ePolicy Orchestrator 4.6.8 analyzátor událostí
- Server McAfee ePolicy Orchestrator 4.6.8
Potvrďte, že tabulky jsou vyplněny
Skript uvádí 13 potvrzuje, že tabulka EPOEvents a podřízené tabulky jsou po dokončení celého procesu naplněny.
Výpis 13:Přemístit TempDB
USE [ePO4_SVR-EPO-02]
GO
SELECT COUNT(*) EPOEvents_CNT FROM EPOEvents;
SELECT COUNT(*) HIP8_EventInfo_CNT FROM HIP8_EventInfo;
SELECT COUNT(*) HIP8_IPSEventParameter_CNT FROM HIP8_IPSEventParameter;
SELECT COUNT(*) SCOR_EVENTS_CNT FROM SCOR_EVENTS;
POSLAT ÚKOLY ZMĚNY
Shrnutí úkolů po změně
1 Úloha Custom_Purge EPO Events byl vytvořen, aby udržoval počet událostí zachycených během 100 dnů. Je zásadní zajistit, aby tato práce byla vždy úspěšná.
2 Nadměrný prostor dříve přidělený databázovému serveru EPO lze získat zpět, zejména disk I – aktuálně 1 TB.
3 Úloha zálohování Custom_Daily_Backup vznikl během změny. Zálohy provedené touto úlohou vyřadí sady záloh do I:/MSSQL/Backup/ . Pokud bude jednotka I odebrána ze systému, je nezbytné tuto cestu změnit. Tyto zálohy je také nutné uchovat podle zásad skupinového zálohování.
PŘÍLOHY
PŘÍLOHA I
TABULKA EPOEVENTS DDL
USE [ePO4_SVR-EPO-02]
GO
/****** Object: Table [dbo].[EPOEvents] Script Date: 04/23/2015 01:40:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[EPOEvents](
[AutoID] [int] IDENTITY(1,1) NOT NULL,
[AutoGUID] [uniqueidentifier] NOT NULL,
[ServerID] [nvarchar](16) NOT NULL,
[ReceivedUTC] [datetime] NOT NULL,
[DetectedUTC] [datetime] NOT NULL,
[AgentGUID] [uniqueidentifier] NOT NULL,
[Analyzer] [nvarchar](16) NOT NULL,
[AnalyzerName] [nvarchar](64) NOT NULL,
[AnalyzerVersion] [nvarchar](20) NOT NULL,
[AnalyzerHostName] [nvarchar](128) NULL,
[AnalyzerIPV4] [int] NULL,
[AnalyzerIPV6] [binary](16) NULL,
[AnalyzerMAC] [nvarchar](16) NULL,
[AnalyzerDATVersion] [nvarchar](20) NULL,
[AnalyzerEngineVersion] [nvarchar](20) NULL,
[AnalyzerDetectionMethod] [nvarchar](128) NULL,
[SourceHostName] [nvarchar](266) NULL,
[SourceIPV4] [int] NULL,
[SourceIPV6] [binary](16) NULL,
[SourceMAC] [nvarchar](16) NULL,
[SourceUserName] [nvarchar](128) NULL,
[SourceProcessName] [nvarchar](128) NULL,
[SourceURL] [nvarchar](1024) NULL,
[TargetHostName] [nvarchar](266) NULL,
[TargetIPV4] [int] NULL,
[TargetIPV6] [binary](16) NULL,
[TargetMAC] [nvarchar](16) NULL,
[TargetUserName] [nvarchar](128) NULL,
[TargetPort] [int] NULL,
[TargetProtocol] [nvarchar](16) NULL,
[TargetProcessName] [nvarchar](128) NULL,
[TargetFileName] [nvarchar](266) NULL,
[ThreatCategory] [nvarchar](128) NOT NULL,
[ThreatEventID] [int] NOT NULL,
[ThreatSeverity] [tinyint] NOT NULL,
[ThreatName] [nvarchar](128) NOT NULL,
[ThreatType] [nvarchar](32) NOT NULL,
[ThreatActionTaken] [nvarchar](24) NOT NULL,
[ThreatHandled] [bit] NULL,
[TheTimestamp] [timestamp] NOT NULL,
CONSTRAINT [PK_EPOEvents_AutoID] PRIMARY KEY CLUSTERED
(
[AutoID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[EPOEvents] ADD CONSTRAINT [DF_EPOEvents_EventID] DEFAULT (newid()) FOR [AutoGUID]
GO
ALTER TABLE [dbo].[EPOEvents] ADD CONSTRAINT [DF_EPOEvents_ServerID] DEFAULT (N'SVR-EPO-02') FOR [ServerID]
GO
ALTER TABLE [dbo].[EPOEvents] ADD CONSTRAINT [DF_EPOEvents_ReceivedUTC] DEFAULT (getutcdate()) FOR [ReceivedUTC]
GO
ALTER TABLE [dbo].[EPOEvents] ADD CONSTRAINT [DF_EPOEvents_ThreatSeverity] DEFAULT ((1)) FOR [ThreatSeverity]
GO
ALTER TABLE [dbo].[EPOEvents] ADD CONSTRAINT [DF_EPOEvents_ThreatActionTaken] DEFAULT ('none') FOR [ThreatActionTaken]
GO
PŘÍLOHA II
JOB CUSTOM_PURGE EPO UDÁLOSTI
USE [msdb]
GO
/****** Object: Job [Custom_Purge EPO Events] Script Date: 04/25/2015 19:47:51 ******/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
/****** Object: JobCategory [[Uncategorized (Local)]]] Script Date: 04/25/2015 19:47:51 ******/
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'Custom_Purge EPO Events',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'No description available.',
@category_name=N'[Uncategorized (Local)]',
@owner_login_name=N'sa', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object: Step [Step 1] Script Date: 04/25/2015 19:47:51 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @[email protected], @step_name=N'Step 1',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'DECLARE @NbLignes int ;
SELECT @NbLignes = COUNT(*) FROM EPOEvents WHERE DATEDIFF(day, DetectedUTC, GETDATE()) > ''100'';
PRINT ''Total number of lines to delete:'';
PRINT @NbLignes;
WHILE (@NbLignes > 0)
BEGIN
PRINT ''Total number of lines LEFT to delete: :'';
PRINT @NbLignes;
PRINT ''Start deleting 50000 lines'';
BEGIN TRAN DEL_SET;
DELETE TOP(500000) FROM EPOEvents WHERE DATEDIFF(day, DetectedUTC, GETDATE()) > ''100'';
COMMIT;
SET @NbLignes = @NbLignes - ''50000'';
WAITFOR DELAY ''00:05'';
END
PRINT ''End of Maintenance'' ;
',
@database_name=N'ePO4_SVR-EPO-02',
@output_file_name=N'D:\MSSQL\JOBLOG\purgeepoevents.txt',
@flags=2
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @[email protected], @name=N'Purge Schedule',
@enabled=1,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=1,
@freq_subday_interval=0,
@freq_relative_interval=1,
@freq_recurrence_factor=0,
@active_start_date=20130312,
@active_end_date=99991231,
@active_start_time=200000,
@active_end_time=235959,
@schedule_uid=N'3d0b8826-691d-4d3c-aca9-00cb5ce246b2'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO