INTRODUKTION
Detta dokument registrerar steg, skript och ideologi bakom underhållet som utfördes på en produktionsdatabas mellan 22 april 2015 och 23 april 2015. Detaljerna är specifika för en applikation, men principerna kan vara användbara för andra som behöver göra liknande operationer i produktionen .
BAKGRUND
Databasen hade vuxit till över 1,44 TB med tabellen EPOE-händelser förbrukar över hälften av denna storlek (792 GB). Ansträngningar har gjorts tidigare för att ta bort poster i denna tabell som är äldre än 90 dagar. Tyvärr visade det sig meningslöst. Jobbet som planerats för att uppnå detta kunde aldrig slutföras under någon session. Anledningen var databasens dåliga prestanda.
Efter diskussion fattades ett beslut att rensa hela EPOE-event tabell genom att trunkera den. Det ytterligare beslutet var att förbereda databasen korrekt för den förväntade datatillväxten i framtiden.
Informationen om databasservern i fråga finns nedan:
SERVERNAMN | SVR-EPO-02 |
INSTANSNAMN | SVR-EPO-02\ENG_AVSERVER |
OSVERSION | Windows 2008 R2 Enterprise (SP1) 64-bitars |
DB-VERSION | Microsoft SQL Server 2008 R2 (SP1) 64-bitars |
IP-ADRESS | XX.XX.XX.XX |
DATABASENAMN | ePO4_SVR-EPO-02 |
EPOEVENTS TABELL
Skriptet som definierar EPOE-händelserna Tabellen finns dokumenterad i bilaga I.
Det är värt att nämna att AutoID-kolumnen i denna tabell är i Foreign Key-relationer med tabellerna HIP8_EventInfo, HIP8_IPSEventParameter och SCOR_EVENTS. Detta påverkade metoden som användes för att trunkera tabellen EPOEvents. Sammanfattningsdetaljerna finns i tabellen nedan:
Denna information extraherades med hjälp av uttalandet i lista 1.
USE [ePO4_SVR-EPO-02]
GO
EXEC sp_fkeys 'EPOEvents'
SAMMANFATTNING AV PROCEDUR
Sammanfattning av procedur som användes under ändringen:
- Distribuera fem 200 GB-enheter
- Stoppa EPO Application Services
- Säkerhetskopiera EPO-databasen
- Skapa en ny filgrupp
- Trunkera tabellen EPOE-händelser
- Flytta EPOE-händelser till den nya filgruppen
- Återskapa främmande nycklar på underordnat bord
- Skript EPOEvents Table Definition
- Säkerhetskopiera EPO-databasen
- Förminska datafiler i den PRIMÄRA filgruppen
- Säkerhetskopiera EPO-databasen
- Släpp EPO-databasen
- Formatera Drive J
- Återställ EPO-databasen med MOVE
- Flytta TempDB till Drive Q
- Starta EPO Application Services
- Bekräfta att EPOE-händelser är ifyllda
Distribuera fem 200 GB-enheter
Fem nya enheter distribuerades på servern. Den fullständiga listan över alla enheter på servern är följande:
DRIV | ANVÄND | NYTT? | KOMMENTAR |
C | Systemenhet | NEJ | Standard klusterstorlek (4KB) |
D | Applikationsenhet | NEJ | Standard klusterstorlek (4KB) |
I | MSSQL-data (OLD) | NEJ | Standard klusterstorlek (4KB) |
J | MSSQL-logg | NEJ | Rekommenderad klusterstorlek för SQL (64K) |
M | MSSQL-data (FG_LARGE FileGroup) | JA | Rekommenderad klusterstorlek för SQL (64K) |
N | MSSQL-data (FG_LARGE FileGroup) | JA | Rekommenderad klusterstorlek för SQL (64K) |
O | MSSQL-data (FG_LARGE FileGroup) | JA | Rekommenderad klusterstorlek för SQL (64K) |
P | MSSQL-data (PRIMARY FileGroup) | JA | Rekommenderad klusterstorlek för SQL (64K) |
F | MSSQL TempDB | JA | Rekommenderad klusterstorlek för SQL (64K) |
Alla nya enheter formaterades med en klusterstorlek på 64K, som rekommenderas av Microsoft för enheter som innehåller MS SQL Server-data eller loggfiler[1]. Drive J formaterades också om efter att ha tagit en säkerhetskopia av databasen.
[1] Fullständig diskussion finns tillgänglig på https://msdn.microsoft.com/en-us/library/dd758814.aspx
Stoppa EPO Application Services
Alla applikationstjänster stoppades för att säkerställa ingen uppdatering av databasen under ändringsperioden. Programtjänster som stoppats (eller bekräftats nere) är enligt följande:
- McAfee ePolicy Orchestrator 4.6.8 Application Server
- McAfee ePolicy Orchestrator 4.6.8 Event Parser
- McAfee ePolicy Orchestrator 4.6.8 Server
Säkerhetskopiera EPO-databasen
Den första säkerhetskopieringen av databasen hade gjorts innan någon åtgärd ägde rum på den befintliga strukturen, med hjälp av skriptet i Listing 2.
Anteckning 2:Första säkerhetskopian av databasen 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'
Skapa en ny filgrupp
En ny filgrupp som heter FG_LARGE skapades med motsvarande skript i Lista 3. Alla filer som lades till i filgruppen definierades med en initialstorlek på 40 GB, en ökning på 1 G och en maxstorlek på 100 GB.
Anteckning 3:Skapande av filgrupp 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
Trunkera tabellen EPOE-händelser
Lista 4 visar den kompletta uppsättningen av uppgifter som krävs för att trunkera tabellen EPOEvents framgångsrikt. Manuset innehåller anteckningar för tydlighetens skull.
Den grundläggande frågan att notera är att det är omöjligt att trunkera en tabell som deltar som förälder i en Foreign Key-relation. Det skulle kränka referensintegriteten. Att ta bort skulle fungera och bevara referensintegriteten eftersom främmande nycklar vanligtvis definieras med ON DELETE CASCADE eller ON DELETE SET NULL-satser.
Anteckning 4:Trunkering av EPOEvents-tabell och flytta till ny tabellyta
/****** 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;
Flytta EPOE-händelser till den nya filgruppen
Tabellen EPOEvents flyttades till filgruppen FG_LARGE med skriptet i Listing 5.
Anteckning 5:Flytta EPOEvents-filgrupp 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
Återskapa främmande nycklar på underordnade bord
De främmande nycklar på underordnade tabeller som identifierades i steg 4.1.5, återskapades med skriptet i Lista 6.
Lista 6:Trunkering av EPOEvents-tabellen och flytta till ny filgrupp
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
Skript EPOEvents Table Definition
Som en säkerhetskopia var den idealisk för att skripta extraktet av DDL från tabellen EPOEvents. Detta gjordes genom att högerklicka och välja alternativet Skripttabell som> SKAPA till> Nytt frågeredigeringsfönster från SSMS[1] Object Explorer. Det resulterande skriptet kan sparas i en .sql fil.
Säkerhetskopiera EPO-databasen
En andra säkerhetskopia av EPO-databasen togs med skriptet i Listing 7 för att förbereda för nästa steg (datafil krympande).
Anteckning 7:Andra säkerhetskopian av EPO-databasen
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'
Krympa datafiler i den PRIMÄRA filgruppen
Krympning är nödvändigt för att återta det utrymme som frigörs genom att trunkera tabellen EPOEvents. Det var också avgörande i det här fallet, eftersom datafilerna krävde omlokalisering till en mindre enhet.
Datafilerna flyttades från enhet I – en 3 TB-enhet till enhet P, en 200 GB-enhet.
De tre datafilerna i den PRIMÄRA filgruppen döptes logiskt till ePO4_SVR-EPO-01 (~300 GB), ePO4_SVR-EPO-02 (~500 GB) och ePO4_SVR-EPO-03 (~400 GB).
Målet var att krympa alla filer till 40 000 MB vardera. Uppgiften krävde fem till sju iterationer, var och en tog bort 50 000 MB.
Lista 8:Krympa datafiler i den PRIMÄRA filgruppen
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
Säkerhetskopiera EPO-databasen
En andra säkerhetskopia av EPO-databasen togs med skriptet i List 5 för att förbereda nästa steg (släppa den befintliga databasen). Skriptet finns i List 9 .
Anteckning 9:Första säkerhetskopian av databasen 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'
Släpp EPO-databasen
Databasen släpptes med SSMS GUI - högerklicka på databasen och välj alternativet "radera" från rullgardinsmenyn. Motsvarande SQL finns i List 10 .
Anteckning 10:Släpp EPO-databasen
USE [master]
GO
DROP DATABASE [ePO4_SVR-EPO-02]
GO
Formatera Drive J
Det här steget formaterar enheten J med 64K-klusterstorleken, som rekommenderas av Microsoft för optimal I/O-prestanda. Denna uppgift utfördes tidigare på de nya enheterna som distribuerades i steg 4.1.1.
Figur 3 visar det alternativ som valts i dialogrutan Format...
Återställ EPO-databasen med MOVE
Återställningen var nödvändig av tre anledningar:
- Att formatera enhet J som innehåller transaktionsloggfilerna (enligt ovan).
- För att ta bort eventuell fragmentering som orsakas av krympningsoperationen.
- För att flytta databasen till nya enheter.
Skriptet i List 11 tjänar till att återställa. Observera att säkerhetskopieringsuppsättningen som används för denna återställning är den sista säkerhetskopian som togs i steg 4.1.8. Observera också att alternativet FLYTTA tjänar till att flytta datafilerna i den PRIMÄRA filgruppen till att driva P.
Anteckning 11:Släpp EPO-databasen
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'
Flytta TempDB till Drive Q
För optimal prestanda för stora databaser rekommenderas det också att lokalisera TempDB-filer på en dedikerad enhet.
Med hjälp av skriptet i Lista 9 flyttades TempDB till enheten Q. Observera att de redundanta TempDB-datafilerna togs bort under denna operation. Antalet TempDB-datafiler bör matcha antalet fysiska processorer som är tillgängliga för SQL Server.
Anteckning 12:Flytta 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
Starta EPO Application Services
Alla applikationstjänster startades när SQL Server-instansen bekräftades OK. Applikationstjänster som startas är enligt följande:
- McAfee ePolicy Orchestrator 4.6.8 Application Server
- McAfee ePolicy Orchestrator 4.6.8 Event Parser
- McAfee ePolicy Orchestrator 4.6.8 Server
Bekräfta att tabellerna är ifyllda
Skriptet är lista 13 bekräftar att tabellen EPOEvents och de underordnade tabellerna fylls i efter att hela processen är klar.
Anteckning 13:Flytta 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;
LÄGG TILL ÄNDRINGSUPPGIFTER
Sammanfattning av uppgifter efter ändring
1 Jobbet Custom_Purge EPO Events skapades för att behålla antalet registrerade händelser inom 100 dagar. Det är avgörande att se till att det här jobbet alltid är framgångsrikt.
2 Överdrivet utrymme som tidigare allokerats till EPO-databasservern kan återvinnas, särskilt enhet I – för närvarande 1 TB.
3 Ett säkerhetskopieringsjobb Custom_Daily_Backup skapades under ändringen. Säkerhetskopieringar som görs av det här jobbet kommer att släppa säkerhetskopieringsuppsättningarna till I:/MSSQL/Backup/ . Det är viktigt att ändra denna sökväg om enheten I kommer att tas bort från systemet. Det är också nödvändigt att bevara dessa säkerhetskopior enligt Group Backup Policy.
BILAGA
BILAGA I
EPOEVENTS TABELL 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
BILAGA II
JOBB CUSTOM_PURGE EPO-EVENT
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