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 :
- Serveur d'applications McAfee ePolicy Orchestrator 4.6.8
- Analyseur d'événements McAfee ePolicy Orchestrator 4.6.8
- 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 :
- Pour formater le lecteur J contenant les fichiers journaux des transactions (comme ci-dessus).
- Pour supprimer toute fragmentation causée par l'opération de réduction.
- 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 :
- Serveur d'applications McAfee ePolicy Orchestrator 4.6.8
- Analyseur d'événements McAfee ePolicy Orchestrator 4.6.8
- 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