sql >> Base de Datos >  >> RDS >> Database

Encuentros en el lugar de trabajo:recuperación de espacio de una base de datos de gran tamaño

INTRODUCCIÓN

Este documento registra los pasos, los scripts y la ideología detrás del mantenimiento realizado en una base de datos de producción entre el 22 de abril de 2015 y el 23 de abril de 2015. Los detalles son específicos de una aplicación, pero los principios pueden ser útiles para otras personas que necesiten realizar operaciones similares en producción. .

ANTECEDENTES

La base de datos había crecido a más de 1,44 TB con la tabla EPOEvents consumiendo más de la mitad de este tamaño (792 GB). Se han realizado esfuerzos en el pasado para eliminar las entradas de esta tabla que tengan más de 90 días. Desafortunadamente, resultó inútil. El trabajo programado para lograr esto nunca podría completarse durante ninguna sesión. El motivo fue el bajo rendimiento de la base de datos.

Tras la discusión, se tomó la decisión de purgar todo EPOEvents tabla truncándola. La decisión posterior fue preparar la base de datos correctamente para el crecimiento de datos esperado en el futuro.

Los detalles del servidor de la base de datos en cuestión están a continuación:

NOMBRE DEL SERVIDOR SVR-EPO-02
NOMBRE DE LA INSTANCIA SVR-EPO-02\ENG_AVSERVER
VERSIÓN DEL SO Windows 2008 R2 Enterprise (SP1) de 64 bits
VERSIÓN DE LA BASE DE DATOS Microsoft SQL Server 2008 R2 (SP1) de 64 bits
DIRECCIÓN IP XX.XX.XX.XX
NOMBRE DE LA BASE DE DATOS ePO4_SVR-EPO-02

TABLA DE EVENTOS

El script que define los EPOEvents La tabla está documentada en el Apéndice I.

Vale la pena mencionar que la columna AutoID de esta tabla está en relaciones de clave externa con las tablas HIP8_EventInfo, HIP8_IPSEventParameter y SCOR_EVENTS. Esto afectó el enfoque utilizado para truncar la tabla EPOEvents. Los detalles resumidos se encuentran en la siguiente tabla:

Esta información se extrajo usando la declaración en el Listado 1.

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

RESUMEN DEL PROCEDIMIENTO

Resumen del procedimiento utilizado durante el cambio:

  • Implemente cinco unidades de 200 GB
  • Detener los servicios de aplicaciones de EPO
  • Copia de seguridad de la base de datos de EPO
  • Crear un nuevo grupo de archivos
  • Trunca la tabla EPOEvents
  • Mover EPOEvents al nuevo grupo de archivos
  • Recrear claves foráneas en la tabla secundaria
  • Escriba la definición de la tabla EPOEvents
  • Copia de seguridad de la base de datos de EPO
  • Reducir archivos de datos en el grupo de archivos PRIMARIO
  • Copia de seguridad de la base de datos de EPO
  • Soltar la base de datos de EPO
  • Formatear unidad J
  • Restaurar la base de datos de EPO con MOVE
  • Reubicar TempDB a Drive Q
  • Iniciar los servicios de aplicaciones de EPO
  • Confirme que EPOEvents está poblado

Implemente cinco unidades de 200 GB

Se implementaron cinco unidades nuevas en el servidor. La lista completa de todas las unidades en el servidor es la siguiente:

CONDUCIR UTILIZAR ¿NUEVO? COMENTARIO
C Unidad del sistema NO Tamaño de clúster predeterminado (4 KB)
D Unidad de aplicaciones NO Tamaño de clúster predeterminado (4 KB)
Yo Datos MSSQL (antiguos) NO Tamaño de clúster predeterminado (4 KB)
J Registro MSSQL NO Tamaño de clúster recomendado para SQL (64 K)
M Datos MSSQL (Grupo de archivos FG_LARGE) SI Tamaño de clúster recomendado para SQL (64 K)
N Datos MSSQL (Grupo de archivos FG_LARGE) SI Tamaño de clúster recomendado para SQL (64 K)
O Datos MSSQL (Grupo de archivos FG_LARGE) SI Tamaño de clúster recomendado para SQL (64 K)
P Datos MSSQL (Grupo de archivos PRIMARIO) SI Tamaño de clúster recomendado para SQL (64 K)
P TempDB de MSSQL SI Tamaño de clúster recomendado para SQL (64 K)

Todas las unidades nuevas se formatearon con un tamaño de clúster de 64 K, según lo recomendado por Microsoft para unidades que contienen datos de MS SQL Server o archivos de registro[1]. La unidad J también se reformateó después de realizar una copia de seguridad de la base de datos.

[1] Se puede acceder a la discusión completa en https://msdn.microsoft.com/en-us/library/dd758814.aspx

Detener los servicios de aplicaciones de EPO

Todos los servicios de la aplicación se detuvieron para garantizar que no se actualizara la base de datos durante el período del cambio. Los servicios de aplicaciones detenidos (o confirmados) son los siguientes:

  1. McAfee ePolicy Orchestrator 4.6.8 Servidor de aplicaciones
  2. McAfee ePolicy Orchestrator 4.6.8 Analizador de eventos
  3. Servidor McAfee ePolicy Orchestrator 4.6.8

Copia de seguridad de la base de datos de EPO

La primera copia de seguridad de la base de datos se realizó antes de que se realizara ninguna acción en la estructura existente, utilizando el script del Listado 2.

Listado 2:Primera copia de seguridad de la base de datos 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'

Crear un nuevo grupo de archivos

Se creó un nuevo grupo de archivos denominado FG_LARGE con el equivalente del script del Listado 3. Todos los archivos agregados al grupo de archivos se definieron con un tamaño inicial de 40 GB, un incremento de 1 G y un tamaño máximo de 100 GB.

Listado 3:Creación del grupo de archivos 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

Trunca la tabla EPOEvents

El Listado 4 muestra el conjunto completo de tareas necesarias para truncar correctamente la tabla EPOEvents. El guión incluye notas para mayor claridad.

El problema fundamental a tener en cuenta es que es imposible truncar una tabla que participa como padre en una relación de clave externa. Violaría la integridad referencial. La eliminación funcionaría y preservaría la integridad referencial, ya que las claves foráneas normalmente se definen con las cláusulas ON DELETE CASCADE o ON DELETE SET NULL.

Listado 4:Truncando la tabla EPOEvents y reubicándola en un nuevo 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;

Mover EPOEvents al nuevo grupo de archivos

La tabla EPOEvents se movió al grupo de archivos FG_LARGE usando el script en el Listado 5.

Listado 5:Traslado del grupo de archivos 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

Recrear claves foráneas en tablas secundarias

Las tablas Foreign Keys on Child identificadas en el paso 4.1.5 se recrearon con el script del Listado 6.

Listado 6:Truncando la tabla EPOEvents y reubicando a un nuevo grupo de archivos

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

Escriba la definición de la tabla EPOEvents

Como respaldo, era ideal para programar el extracto del DDL de la tabla EPOEvents. Esto se hizo haciendo clic con el botón derecho y seleccionando la opción Script Table as> CREATE To> New Query Editor Window del Explorador de objetos de SSMS[1]. El script resultante se puede guardar en un .sql archivo.

Copia de seguridad de la base de datos de EPO

Se realizó una segunda copia de seguridad de la base de datos de EPO con el script del Listado 7 para preparar la siguiente etapa (reducción del archivo de datos).

Listado 7:Segunda copia de seguridad de la base de datos de EPO

BACKUP DATABASE [ePO4_SVR-EPO-02] TO
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C01.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C02.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C03.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C04.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C05.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C06.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C07.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C08.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C09.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C10.bak'
WITH STATS = 5, COMPRESSION, NAME = N'ePO4_SVR-EPO-02 Backup After Purge'

Reducir archivos de datos en el grupo de archivos PRIMARIO

La reducción es necesaria para recuperar el espacio liberado al truncar la tabla EPOEvents. También fue crucial en este caso, ya que los archivos de datos requerían reubicación en una unidad más pequeña.

Los archivos de datos se reubicaron desde la unidad I, una unidad de 3 TB, a la unidad P, una unidad de 200 GB.

Los tres archivos de datos en el grupo de archivos PRIMARIO se llamaron lógicamente ePO4_SVR-EPO-01 (~300 GB), ePO4_SVR-EPO-02 (~500 GB) y ePO4_SVR-EPO-03 (~400 GB).

El objetivo era reducir todos los archivos a 40000 MB cada uno. La tarea demandó de cinco a siete iteraciones, cada una eliminó 50000 MB.

Listado 8:Reducción de archivos de datos en el grupo de archivos PRIMARIO

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

Copia de seguridad de la base de datos de EPO

Se realizó una segunda copia de seguridad de la base de datos de EPO mediante el script del Listado 5 para prepararse para la siguiente etapa (descartar la base de datos existente). El script está presente en Listado 9 .

Listado 9:Primera copia de seguridad de la base de datos 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'

Soltar la base de datos de EPO

La base de datos se eliminó utilizando la GUI de SSMS:haga clic con el botón derecho en la base de datos y seleccione la opción "eliminar" en el menú desplegable. El SQL equivalente está en Listado 10 .

Listado 10:Elimina la base de datos de EPO

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

Formatear unidad J

Este paso formatea la unidad J, utilizando el tamaño de clúster de 64 K, según lo recomendado por Microsoft para un rendimiento de E/S óptimo. Esta tarea se realizó previamente en las nuevas unidades implementadas en el paso 4.1.1.

La figura 3 muestra la opción seleccionada en el cuadro de diálogo Formato....

Restaurar la base de datos de EPO con MOVE

La operación de restauración fue necesaria por tres razones:

  1. Para formatear la unidad J que contiene los archivos de registro de transacciones (como se indica arriba).
  2. Para eliminar cualquier fragmentación causada por la operación de reducción.
  3. Para reubicar la base de datos en nuevas unidades.

El guión en Listado 11 sirve para restaurar. Tenga en cuenta que el conjunto de copia de seguridad utilizado para esta restauración es la última copia de seguridad realizada en el paso 4.1.8. Además, observe que la opción MOVER sirve para reubicar los archivos de datos en el grupo de archivos PRIMARIO a la unidad P.

Listado 11:Elimina la base de datos de EPO

RESTORE DATABASE [ePO4_SVR-EPO-02] FROM
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E01.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E02.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E03.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E04.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E05.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E06.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E07.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E08.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E09.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E10.bak'
WITH STATS = 5,
MOVE 'ePO4_SVR-EPO-02' TO 'P:\MSSQL\DATA\ePO4_SVR-EPO-02.mdf',
MOVE 'ePO4_SVR-EPO-01' TO 'P:\MSSQL\DATA\ePO4_SVR-EPO-01.ndf',
MOVE 'ePO4_SVR-EPO-03' TO 'P:\MSSQL\DATA\ePO4_SVR-EPO-03.ndf'

Reubicar TempDB a Drive Q

Para un rendimiento óptimo de bases de datos grandes, también se recomienda ubicar los archivos TempDB en una unidad dedicada.

Con el script del Listado 9, TempDB se reubicó en la unidad Q. Tenga en cuenta que los archivos de datos redundantes de TempDB se eliminaron durante esta operación. La cantidad de archivos de datos TempDB debe coincidir con la cantidad de CPU físicas disponibles para SQL Server.

Listado 12:Reubicar 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

Iniciar los servicios de aplicaciones de EPO

Todos los servicios de la aplicación se iniciaron una vez que se confirmó que la instancia de SQL Server era correcta. Los servicios de aplicación iniciados son los siguientes:

  1. McAfee ePolicy Orchestrator 4.6.8 Servidor de aplicaciones
  2. McAfee ePolicy Orchestrator 4.6.8 Analizador de eventos
  3. Servidor McAfee ePolicy Orchestrator 4.6.8

Confirmar que las tablas están llenas

El script que enumera 13 confirma que la tabla EPOEvents y las tablas secundarias se completan una vez que se completa todo el proceso.

Listado 13:Reubicar 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;

TAREAS POSTERIORES AL CAMBIO

Resumen de tareas posteriores al cambio

1 El trabajo Custom_Purge EPO Events fue creado para mantener la cantidad de eventos capturados dentro de los 100 días. Es crucial asegurarse de que este trabajo siempre sea exitoso.

2 El espacio excesivo previamente asignado al servidor de la base de datos de EPO se puede recuperar, en particular la unidad I, actualmente 1 TB.

3 Un trabajo de copia de seguridad Custom_Daily_Backup fue creado durante el cambio. Las copias de seguridad realizadas por este trabajo colocarán los conjuntos de copias de seguridad en I:/MSSQL/Backup/ . Es esencial cambiar esta ruta si la unidad se eliminará del sistema. También es necesario conservar estas copias de seguridad de acuerdo con la Política de copias de seguridad de grupo.

APÉNDICES

APÉNDICE I

TABLA DE EVENTOS 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

APÉNDICE II

JOB CUSTOM_PURGE EPO EVENTOS

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