sql >> Database teknologi >  >> RDS >> Database

Workplace Encounters:Genvinde plads fra en overdimensioneret database

INTRODUKTION

Dette dokument registrerer trin, scripts og ideologi bag vedligeholdelsen udført på en produktionsdatabase mellem 22. april 2015 og 23. april 2015. Detaljerne er specifikke for en applikation, men principperne kan være nyttige for andre, der har behov for at udføre lignende operationer i produktionen .

BAGGRUND

Databasen var vokset til over 1,44 TB med tabellen EPOE-begivenheder bruger over halvdelen af ​​denne størrelse (792 GB). Der er tidligere gjort bestræbelser på at slette poster i denne tabel, der er ældre end 90 dage. Desværre viste det sig forgæves. Jobbet, der var planlagt for at opnå dette, kunne aldrig fuldføres under nogen session. Årsagen var databasens dårlige ydeevne.

Efter diskussion blev der truffet en beslutning om at rense hele EPOE-begivenheder tabel ved at afkorte den. Den videre beslutning var at forberede databasen korrekt til den forventede datavækst i fremtiden.

Oplysningerne om den pågældende databaseserver er nedenfor:

SERVERNAVN SVR-EPO-02
INSTANSNAVN SVR-EPO-02\ENG_AVSERVER
OS-VERSION Windows 2008 R2 Enterprise (SP1) 64-bit
DB-VERSION Microsoft SQL Server 2008 R2 (SP1) 64-bit
IP-ADRESSE XX.XX.XX.XX
DATABASENAVN ePO4_SVR-EPO-02

EPOEVENTS TABEL

Scriptet, der definerer EPOE-begivenheder tabel er dokumenteret i bilag I.

Det er værd at nævne, at AutoID-kolonnen i denne tabel er i Foreign Key-relationer med tabellerne HIP8_EventInfo, HIP8_IPSEventParameter og SCOR_EVENTS. Dette påvirkede den tilgang, der blev brugt til at afkorte EPOEvents-tabellen. Opsummeringsdetaljerne er i tabellen nedenfor:

Disse oplysninger blev udtrukket ved hjælp af erklæringen i liste 1.

USE [ePO4_SVR-EPO-02]
GO
EXEC sp_fkeys 'EPOEvents'

PROCEDURERESUMÉ

Sammendrag af procedure brugt under ændringen:

  • Implementer fem 200 GB-drev
  • Stop EPO Application Services
  • Sikkerhedskopier EPO-databasen
  • Opret en ny filgruppe
  • Trunker EPOE-begivenheder i tabellen
  • Flyt EPOE-begivenheder til den nye filgruppe
  • Genskab fremmednøgler på underordnet bord
  • Skript EPOEvents Table Definition
  • Sikkerhedskopier EPO-databasen
  • Formindsk datafiler i den PRIMÆRE filgruppe
  • Sikkerhedskopier EPO-databasen
  • Slip EPO-databasen
  • Formater Drive J
  • Gendan EPO-databasen med MOVE
  • Flyt TempDB til Drive Q
  • Start EPO Application Services
  • Bekræft, at EPOE-begivenheder er udfyldt

Implementer fem 200 GB-drev

Fem nye drev blev installeret på serveren. Den komplette liste over alle drev på serveren er som følger:

DRIV BRUG NYT? KOMMENTAR
C Systemdrev NEJ Standard klyngestørrelse (4KB)
D Applikationsdrev NEJ Standard klyngestørrelse (4KB)
I MSSQL-data (OLD) NEJ Standard klyngestørrelse (4KB)
J MSSQL-log NEJ Anbefalet klyngestørrelse for SQL (64K)
M MSSQL-data (FG_LARGE FileGroup) JA Anbefalet klyngestørrelse for SQL (64K)
N MSSQL-data (FG_LARGE FileGroup) JA Anbefalet klyngestørrelse for SQL (64K)
O MSSQL-data (FG_LARGE FileGroup) JA Anbefalet klyngestørrelse for SQL (64K)
P MSSQL-data (PRIMARY FileGroup) JA Anbefalet klyngestørrelse for SQL (64K)
Q MSSQL TempDB JA Anbefalet klyngestørrelse for SQL (64K)

Alle nye drev blev formateret ved hjælp af 64K klyngestørrelse, som anbefalet af Microsoft til drev, der indeholder MS SQL Server-data eller logfiler[1]. Drev J blev også omformateret efter at have taget en sikkerhedskopi af databasen.

[1] Fuld diskussion er tilgængelig på https://msdn.microsoft.com/en-us/library/dd758814.aspx

Stop EPO Application Services

Alle applikationstjenester blev stoppet for at sikre ingen opdatering af databasen i ændringsperioden. Applikationstjenester stoppet (eller bekræftet nede) er som følger:

  1. McAfee ePolicy Orchestrator 4.6.8 Application Server
  2. McAfee ePolicy Orchestrator 4.6.8 Event Parser
  3. McAfee ePolicy Orchestrator 4.6.8-server

Sikkerhedskopier EPO-databasen

Den første sikkerhedskopiering af databasen var blevet taget, før der skete nogen handling på den eksisterende struktur, ved hjælp af scriptet i liste 2.

Fortegnelse 2:Første sikkerhedskopi af ePO4_SVR-EPO-02-database

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'

Opret en ny filgruppe

En ny filgruppe kaldet FG_LARGE blev oprettet med ækvivalenten til scriptet i liste 3. Alle filer, der blev føjet til filgruppen, blev defineret med en startstørrelse på 40 GB, en stigning på 1G og en maksimal størrelse på 100 GB.

Liste 3:Oprettelse af filgruppe 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

Trunker EPOE-begivenheder i tabellen

Liste 4 viser det komplette sæt af opgaver, der kræves for at trunkere EPOEvents-tabellen med succes. Scriptet indeholder noter for klarhed.

Det grundlæggende problem at bemærke er, at det er umuligt at afkorte en tabel, der deltager som forælder i et Foreign Key-forhold. Det ville krænke referentiel integritet. Sletning ville fungere og bevare referenceintegriteten, da fremmednøgler typisk defineres med ON DELETE CASCADE eller ON DELETE SET NULL-sætninger.

Liste 4:Afkortning af EPOE-begivenheder-tabel og flytning til nyt tabelområde

/****** 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;

Flyt EPOE-begivenheder til den nye filgruppe

Tabellen EPOEvents blev flyttet til FG_LARGE-filgruppen ved hjælp af scriptet i liste 5.

Fortegnelse 5:Flytning af EPOEvents-filgruppe 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

Genskab fremmednøgler på børneborde

Fremmednøglerne på underordnede tabeller identificeret i trin 4.1.5, blev genskabt med scriptet i liste 6.

Liste 6:Afkortning af EPOE-hændelsestabel og flytning til ny filgruppe

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

Script definitionen af ​​EPOEvents-tabellen

Som en backup var den ideel til scripting af uddraget af DDL fra EPOEvents-tabellen. Dette blev gjort ved at højreklikke og vælge indstillingen Scripttabel som> CREATE To> New Query Editor Window fra SSMS[1] Object Explorer. Det resulterende script kan gemmes i en .sql fil.

Sikkerhedskopier EPO-databasen

En anden sikkerhedskopi af EPO-databasen blev taget med scriptet i Listing 7 for at forberede næste fase (datafil krympning).

Optegnelse 7:Anden backup af 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'

Formindsk datafiler i den PRIMÆRE filgruppe

Krympning er nødvendig for at genvinde den frigjorte plads ved at afkorte EPOEvents-tabellen. Det var også afgørende i dette tilfælde, da datafilerne krævede flytning til et mindre drev.

Datafilerne blev flyttet fra drev I – et 3 TB drev til drev P, et 200 GB drev.

De tre datafiler i den PRIMÆRE filgruppe fik logisk navn ePO4_SVR-EPO-01 (~300 GB), ePO4_SVR-EPO-02 (~500 GB) og ePO4_SVR-EPO-03 (~400 GB).

Målet var at formindske alle filer til 40000 MB hver. Opgaven krævede fem til syv iterationer, hver fjernede 50.000 MB.

Liste 8:Formindskelse af datafiler i den PRIMÆRE filgruppe

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

Sikkerhedskopier EPO-databasen

En anden sikkerhedskopi af EPO-databasen blev taget ved hjælp af scriptet i List 5 for at forberede den næste fase (slette den eksisterende database). Scriptet findes i liste 9 .

Fortegnelse 9:Første backup af ePO4_SVR-EPO-02-database

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'

Slip EPO-databasen

Databasen blev droppet ved hjælp af SSMS GUI - højreklik på databasen og vælg "slet" fra rullemenuen. Den tilsvarende SQL er i liste 10 .

Fortegnelse 10:Slip EPO-databasen

USE [master]
GO
DROP DATABASE [ePO4_SVR-EPO-02]
GO

Formater Drive J

Dette trin formaterer drevet J ved hjælp af 64K-klyngestørrelsen, som anbefalet af Microsoft for optimal I/O-ydeevne. Denne opgave blev tidligere udført på de nye drev installeret i trin 4.1.1.

Figur 3 viser den indstilling, der er valgt i dialogboksen Format...

Gendan EPO-databasen med MOVE

Gendannelsen var nødvendig af tre grunde:

  1. For at formatere drev J, der indeholder transaktionslogfilerne (som ovenfor).
  2. For at fjerne enhver fragmentering forårsaget af krympeoperationen.
  3. For at flytte databasen til nye drev.

Scriptet i List 11 tjener til restaurering. Bemærk, at sikkerhedskopieringssættet, der blev brugt til denne gendannelse, er den sidste sikkerhedskopi, der blev taget i trin 4.1.8. Bemærk også, at MOVE-indstillingen tjener til at flytte datafilerne i den PRIMÆRE filgruppe til at drive P.

Fortegnelse 11:Slip 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'

Flyt TempDB til Drive Q

For optimal ydeevne af store databaser anbefales det også at lokalisere TempDB-filer på et dedikeret drev.

Ved at bruge scriptet i liste 9 blev TempDB flyttet til drev Q. Bemærk, at de overflødige TempDB-datafiler blev fjernet under denne operation. Antallet af TempDB-datafiler skal svare til antallet af fysiske CPU'er, der er tilgængelige for SQL Server.

Fortegnelse 12:Flyt 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

Start EPO Application Services

Alle applikationstjenester blev startet, når SQL Server-instansen blev bekræftet OK. Application Services startede er som følger:

  1. McAfee ePolicy Orchestrator 4.6.8 Application Server
  2. McAfee ePolicy Orchestrator 4.6.8 Event Parser
  3. McAfee ePolicy Orchestrator 4.6.8-server

Bekræft, at tabeller er udfyldt

Scriptet er liste 13 bekræfter, at tabellen EPOEvents og de underordnede tabeller udfyldes, efter at hele processen er fuldført.

Optegnelse 13:Flyt 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;

UDFØR ÆNDRING OPGAVER

Oversigt over postændringsopgaver

1 Jobbet Custom_Purge EPO Events blev oprettet for at holde antallet af hændelser registreret inden for 100 dage. Det er afgørende at sikre, at dette job altid er vellykket.

2 Overdreven plads, der tidligere er allokeret til EPO-databaseserveren, kan genvindes, især drevet I – i øjeblikket 1 TB.

3 Et backupjob Custom_Daily_Backup blev oprettet under ændringen. Sikkerhedskopier lavet af dette job vil slette sikkerhedskopieringssæt til I:/MSSQL/Backup/ . Det er vigtigt at ændre denne sti, hvis drevet I vil blive fjernet fra systemet. Det er også nødvendigt at bevare disse sikkerhedskopier i henhold til Group Backup Policy.

BILAG

BILAG I

EPOEVENTS TABEL 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

BILAG II

JOB CUSTOM_PURGE EPO EVENTS

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

  1. Analyse af QuickBooks-data i Dundas BI

  2. Forstå forskellen mellem EXCEPT og NOT IN-operatører

  3. Oracle dokumentation

  4. Sådan udtrækkes dagen, måneden og året fra en dato i SQLite