Database
 sql >> Base de données >  >> RDS >> Database

Rencontres en milieu de travail :récupérer de l'espace à partir d'une base de données surdimensionnée

PRESENTATION

Ce document enregistre les étapes, les scripts et l'idéologie derrière la maintenance effectuée sur une base de données de production entre le 22 avril 2015 et le 23 avril 2015. Les détails sont spécifiques à une application, mais les principes peuvent être utiles à d'autres qui ont besoin d'effectuer des opérations similaires en production. .

CONTEXTE

La base de données avait atteint plus de 1,44 To avec la table EPOEvents consommant plus de la moitié de cette taille (792 Go). Des efforts avaient été faits dans le passé pour supprimer les entrées de ce tableau datant de plus de 90 jours. Malheureusement, cela s'est avéré vain. Le travail prévu pour y parvenir ne pourrait jamais se terminer au cours d'une session. La raison était la mauvaise performance de la base de données.

Après discussion, il a été décidé de purger l'ensemble des EPOEvents tableau en le tronquant. La décision supplémentaire a été de préparer correctement la base de données pour la croissance des données attendue à l'avenir.

Les détails du serveur de base de données en question sont ci-dessous :

NOM DU SERVEUR SVR-EPO-02
NOM DE L'INSTANCE SVR-EPO-02\ENG_AVSERVER
VERSION DU SE Windows 2008 R2 Entreprise (SP1) 64 bits
VERSION BD Microsoft SQL Server 2008 R2 (SP1) 64 bits
ADRESSE IP XX.XX.XX.XX
NOM DE LA BASE DE DONNÉES ePO4_SVR-EPO-02

TABLEAU DES ÉVÉNEMENTS EPO

Le script définissant les EPOEvents le tableau est documenté à l'annexe I.

Il convient de mentionner que la colonne AutoID de cette table est dans des relations de clé étrangère avec les tables HIP8_EventInfo, HIP8_IPSEventParameter et SCOR_EVENTS. Cela a affecté l'approche utilisée pour tronquer la table EPOEvents. Les détails récapitulatifs sont dans le tableau ci-dessous :

Ces informations ont été extraites à l'aide de l'énoncé de la liste 1.

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

RÉSUMÉ DE LA PROCÉDURE

Résumé de la procédure utilisée lors du changement :

  • Déployer cinq disques de 200 Go
  • Arrêter les services d'application de l'OEB
  • Sauvegarder la base de données de l'OEB
  • Créer un nouveau groupe de fichiers
  • Tronquer le tableau EPOEvents
  • Déplacer EPOEvents vers le nouveau groupe de fichiers
  • Recréer des clés étrangères sur la table enfant
  • Script de la définition de la table EPOEvents
  • Sauvegarder la base de données de l'OEB
  • Réduire les fichiers de données dans le groupe de fichiers PRIMARY
  • Sauvegarder la base de données de l'OEB
  • Supprimer la base de données de l'OEB
  • Formater le lecteur J
  • Restaurer la base de données de l'OEB avec MOVE
  • Déplacer TempDB vers Drive Q
  • Démarrer les services d'application de l'OEB
  • Confirmer qu'EPOEvents est rempli

Déployer cinq disques de 200 Go

Cinq nouveaux disques ont été déployés sur le serveur. La liste complète de tous les lecteurs sur le serveur est la suivante :

CONDUIRE UTILISER NOUVEAU ? COMMENTAIRE
C Lecteur système NON Taille de cluster par défaut (4 Ko)
D Lecteur d'applications NON Taille de cluster par défaut (4 Ko)
Je Données MSSQL (ANCIENNES) NON Taille de cluster par défaut (4 Ko)
J Journal MSSQL NON Taille de cluster recommandée pour SQL (64 Ko)
M Données MSSQL (groupe de fichiers FG_LARGE) OUI Taille de cluster recommandée pour SQL (64 Ko)
N Données MSSQL (groupe de fichiers FG_LARGE) OUI Taille de cluster recommandée pour SQL (64 Ko)
O Données MSSQL (groupe de fichiers FG_LARGE) OUI Taille de cluster recommandée pour SQL (64 Ko)
P Données MSSQL (groupe de fichiers PRIMARY) OUI Taille de cluster recommandée pour SQL (64 Ko)
Q MSSQL TempDB OUI Taille de cluster recommandée pour SQL (64 Ko)

Tous les nouveaux disques ont été formatés en utilisant une taille de cluster de 64 Ko, comme recommandé par Microsoft pour les disques contenant des données MS SQL Server ou des fichiers journaux[1]. Le lecteur J a également été reformaté après avoir effectué une sauvegarde de la base de données.

[1] Une discussion complète est accessible sur https://msdn.microsoft.com/en-us/library/dd758814.aspx

Arrêter les services d'application de l'OEB

Tous les services applicatifs ont été arrêtés pour garantir l'absence de mise à jour de la base de données pendant la période de modification. Les services d'application arrêtés (ou confirmés arrêtés) sont les suivants :

  1. Serveur d'applications McAfee ePolicy Orchestrator 4.6.8
  2. Analyseur d'événements McAfee ePolicy Orchestrator 4.6.8
  3. Serveur McAfee ePolicy Orchestrator 4.6.8

Sauvegarder la base de données de l'OEB

La première sauvegarde de la base de données avait été effectuée avant toute action sur la structure existante, en utilisant le script du Listing 2.

Liste 2 :Première sauvegarde de la base de données 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'

Créer un nouveau groupe de fichiers

Un nouveau groupe de fichiers appelé FG_LARGE a été créé avec l'équivalent du script du Listing 3. Tous les fichiers ajoutés au groupe de fichiers ont été définis avec une taille initiale de 40 Go, un incrément de 1 Go et une taille maximale de 100 Go.

Liste 3 :Création du groupe de fichiers 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

Tronquer le tableau EPOEvents

Le Listing 4 montre l'ensemble complet des tâches requises pour tronquer la table EPOEvents avec succès. Le script comprend des notes pour plus de clarté.

Le problème fondamental à noter est qu'il est impossible de tronquer une table participant en tant que parent dans une relation de clé étrangère. Cela violerait l'intégrité référentielle. La suppression fonctionnerait et préserverait l'intégrité référentielle puisque les clés étrangères sont généralement définies avec les clauses ON DELETE CASCADE ou ON DELETE SET NULL.

Liste 4 :Tronquer la table EPOEvents et déplacer vers un nouveau tablespace

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

Déplacer EPOEvents vers le nouveau groupe de fichiers

La table EPOEvents a été déplacée vers le groupe de fichiers FG_LARGE à l'aide du script du Listing 5.

Liste 5 :Déplacement du groupe de fichiers 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

Recréer des clés étrangères sur des tables enfants

Les clés étrangères sur les tables enfants identifiées à l'étape 4.1.5 ont été recréées avec le script du Listing 6.

Liste 6 :Tronquer la table EPOEvents et déplacer vers un nouveau groupe de fichiers

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 de la définition de la table EPOEvents

En tant que sauvegarde, il était idéal pour scénariser l'extrait du DDL de la table EPOEvents. Cela a été fait en cliquant avec le bouton droit de la souris et en sélectionnant l'option Script Table as> CREATE To> New Query Editor Window depuis l'explorateur d'objets SSMS[1]. Le script résultant peut être enregistré dans un .sql fichier.

Sauvegarder la base de données de l'OEB

Une deuxième sauvegarde de la base de données de l'OEB a été effectuée avec le script du Listing 7 pour préparer l'étape suivante (réduction du fichier de données).

Liste 7 :deuxième sauvegarde de la base de données de l'OEB

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'

Réduire les fichiers de données dans le groupe de fichiers PRIMARY

La réduction est nécessaire pour récupérer l'espace libéré en tronquant la table EPOEvents. C'était également crucial dans ce cas, car les fichiers de données devaient être déplacés vers un lecteur plus petit.

Les fichiers de données ont été déplacés du lecteur I :un lecteur de 3 To vers le lecteur P, un lecteur de 200 Go.

Les trois fichiers de données du groupe de fichiers PRIMARY étaient logiquement nommés ePO4_SVR-EPO-01 (~300 Go), ePO4_SVR-EPO-02 (~500 Go) et ePO4_SVR-EPO-03 (~400 Go).

L'objectif était de réduire tous les fichiers à 40 000 Mo chacun. La tâche exigeait cinq à sept itérations, chacune supprimant 50 000 Mo.

Liste 8 :Réduire les fichiers de données dans le groupe de fichiers PRIMARY

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

Sauvegarder la base de données de l'OEB

Une deuxième sauvegarde de la base de données de l'OEB a été effectuée à l'aide du script de la Liste 5 pour préparer l'étape suivante (suppression de la base de données existante). Le script est présent dans le Listing 9 .

Liste 9 :Première sauvegarde de la base de données 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'

Supprimer la base de données de l'OEB

La base de données a été supprimée à l'aide de l'interface graphique SSMS - cliquez avec le bouton droit sur la base de données et sélectionnez l'option "supprimer" dans le menu déroulant. Le SQL équivalent est dans Listing 10 .

Liste 10 :Supprimez la base de données de l'OEB

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

Formater le lecteur J

Cette étape formate le lecteur J, en utilisant la taille de cluster de 64 Ko, comme recommandé par Microsoft pour des performances d'E/S optimales. Cette tâche était précédemment effectuée sur les nouveaux disques déployés à l'étape 4.1.1.

La figure 3 montre l'option sélectionnée dans la boîte de dialogue Format….

Restaurer la base de données EPO avec MOVE

L'opération de restauration était nécessaire pour trois raisons :

  1. Pour formater le lecteur J contenant les fichiers journaux des transactions (comme ci-dessus).
  2. Pour supprimer toute fragmentation causée par l'opération de réduction.
  3. Pour déplacer la base de données vers de nouveaux lecteurs.

Le script dans Liste 11 sert à restaurer. Notez que le jeu de sauvegarde utilisé pour cette restauration est la dernière sauvegarde effectuée à l'étape 4.1.8. Notez également que l'option MOVE sert à déplacer les fichiers de données du groupe de fichiers PRIMARY vers le lecteur P.

Liste 11 :Supprimez la base de données de l'OEB

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'

Déplacer TempDB vers Drive Q

Pour des performances optimales des grandes bases de données, il est également recommandé de localiser les fichiers TempDB sur un lecteur dédié.

À l'aide du script du Listing 9, TempDB a été déplacé vers le lecteur Q. Notez que les fichiers de données TempDB redondants ont été supprimés au cours de cette opération. Le nombre de fichiers de données TempDB doit correspondre au nombre de processeurs physiques disponibles pour SQL Server.

Liste 12 :Déplacer 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

Démarrer les services d'application de l'OEB

Tous les services d'application ont été démarrés une fois que l'instance SQL Server a été confirmée OK. Les services applicatifs démarrés sont les suivants :

  1. Serveur d'applications McAfee ePolicy Orchestrator 4.6.8
  2. Analyseur d'événements McAfee ePolicy Orchestrator 4.6.8
  3. Serveur McAfee ePolicy Orchestrator 4.6.8

Confirmer que les tableaux sont remplis

Le script liste 13 confirme que la table EPOEvents et les tables enfants sont remplies une fois l'ensemble du processus terminé.

Liste 13 :Déplacer 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;

POSER LES TÂCHES DE CHANGEMENT

Résumé des tâches post-modification

1 Le travail Custom_Purge EPO Events a été créé pour conserver le nombre d'événements capturés dans les 100 jours. Il est crucial de s'assurer que ce travail est toujours réussi.

2 L'espace excessif précédemment alloué au serveur de base de données de l'OEB peut être récupéré, en particulier le lecteur I - actuellement 1 To.

3 Une tâche de sauvegarde Custom_Daily_Backup a été créé lors du changement. Les sauvegardes effectuées par cette tâche déposeront les jeux de sauvegarde sur I:/MSSQL/Backup/ . Il est essentiel de modifier ce chemin si le lecteur I est supprimé du système. Il est également nécessaire de conserver ces sauvegardes conformément à la politique de sauvegarde du groupe.

ANNEXES

ANNEXE I

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

ANNEXE II

JOB CUSTOM_PURGE ÉVÉNEMENTS EPO

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