Database
 sql >> Base de Dados >  >> RDS >> Database

Encontros no local de trabalho:recuperando espaço de um banco de dados superdimensionado

INTRODUÇÃO


Este documento registra etapas, scripts e ideologia por trás da manutenção realizada em um banco de dados de produção entre 22 de abril de 2015 e 23 de abril de 2015. Os detalhes são específicos para um aplicativo, mas os princípios podem ser úteis para outras pessoas que precisam fazer operações semelhantes em produção .

FUNDO


O banco de dados cresceu para mais de 1,44 TB com a tabela EPOEvents consumindo mais da metade desse tamanho (792 GB). Esforços foram feitos no passado para excluir entradas nesta tabela com mais de 90 dias. Infelizmente, provou-se inútil. O trabalho agendado para conseguir isso nunca pôde ser concluído durante nenhuma sessão. O motivo foi o baixo desempenho do banco de dados.

Após discussão, foi tomada a decisão de eliminar todos os EPOEvents tabela truncando-a. A decisão adicional foi preparar o banco de dados corretamente para o crescimento de dados esperado no futuro.

Os detalhes do servidor de banco de dados em questão estão abaixo:
NOME DO SERVIDOR SVR-EPO-02
NOME DA INSTÂNCIA SVR-EPO-02\ENG_AVSERVER
VERSÃO DO SO Windows 2008 R2 Enterprise (SP1) 64 bits
VERSÃO DB Microsoft SQL Server 2008 R2 (SP1) 64 bits
ENDEREÇO ​​IP XX.XX.XX.XX
NOME DO BANCO DE DADOS ePO4_SVR-EPO-02

TABELA DE EPOEVENTOS


O script que define os EPOEvents tabela está documentada no Apêndice I.

Vale ressaltar que a coluna AutoID desta tabela está em relacionamentos de Chave Estrangeira com as tabelas HIP8_EventInfo, HIP8_IPSEventParameter e SCOR_EVENTS. Isso afetou a abordagem usada para truncar a tabela EPOEvents. Os detalhes do resumo estão na tabela abaixo:

Essas informações foram extraídas usando a instrução na Listagem 1.
USE [ePO4_SVR-EPO-02]
GO
EXEC sp_fkeys 'EPOEvents'

RESUMO DO PROCEDIMENTO

Resumo do procedimento usado durante a mudança:

  • Implante cinco unidades de 200 GB
  • Parar os serviços do aplicativo EPO
  • Fazer backup do banco de dados EPO
  • Criar um novo grupo de arquivos
  • Truncar os EPOEvents da tabela
  • Mover EPOEvents para o novo grupo de arquivos
  • Recriar chaves estrangeiras na tabela filha
  • Script a definição da tabela EPOEvents
  • Fazer backup do banco de dados EPO
  • Reduzir arquivos de dados no grupo de arquivos PRIMARY
  • Fazer backup do banco de dados EPO
  • Solte o banco de dados EPO
  • Formatar unidade J
  • Restaure o banco de dados EPO com MOVE
  • Relocalizar TempDB para Drive Q
  • Iniciar serviços de aplicativos EPO
  • Confirmar que o EPOEvents está preenchido

Implante cinco unidades de 200 GB


Cinco novas unidades foram implantadas no servidor. A lista completa de todas as unidades no servidor é a seguinte:
DRIVE USE NOVO? COMENTÁRIO
C Unidade do sistema NÃO Tamanho padrão do cluster (4 KB)
D Unidade de aplicativo NÃO Tamanho padrão do cluster (4 KB)
Eu Dados MSSQL (ANTIGO) NÃO Tamanho padrão do cluster (4 KB)
J Log MSSQL NÃO Tamanho de cluster recomendado para SQL (64 K)
M Dados MSSQL (FG_LARGE FileGroup) SIM Tamanho de cluster recomendado para SQL (64 K)
N Dados MSSQL (FG_LARGE FileGroup) SIM Tamanho de cluster recomendado para SQL (64 K)
O Dados MSSQL (FG_LARGE FileGroup) SIM Tamanho de cluster recomendado para SQL (64 K)
P Dados MSSQL (grupo de arquivos PRIMÁRIO) SIM Tamanho de cluster recomendado para SQL (64 K)
P MSSQL TempDB SIM Tamanho de cluster recomendado para SQL (64 K)

Todas as novas unidades foram formatadas usando tamanho de cluster de 64 K, conforme recomendado pela Microsoft para unidades contendo dados do MS SQL Server ou arquivos de log[1]. A unidade J também foi reformatada após fazer um backup do banco de dados.

[1] A discussão completa está acessível em https://msdn.microsoft.com/en-us/library/dd758814.aspx

Parar os serviços do aplicativo EPO


Todos os serviços de aplicativos foram interrompidos para garantir que não houvesse atualização no banco de dados durante o período da alteração. Os Serviços de Aplicativos parados (ou confirmados como inativos) são os seguintes:
  1. Servidor de aplicativos McAfee ePolicy Orchestrator 4.6.8
  2. Analisador de eventos do McAfee ePolicy Orchestrator 4.6.8
  3. Servidor McAfee ePolicy Orchestrator 4.6.8

Faça backup do banco de dados EPO


O primeiro backup do banco de dados foi feito antes de qualquer ação na estrutura existente, usando o script da Listagem 2.

Lista 2:Primeiro backup do banco de dados 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'

Criar um novo grupo de arquivos


Um novo grupo de arquivos chamado FG_LARGE foi criado com o equivalente do script na Listagem 3. Todos os arquivos adicionados ao grupo de arquivos foram definidos com um tamanho inicial de 40 GB, incremento de 1 G e tamanho máximo de 100 GB.

Listagem 3:Criação do grupo de arquivos 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

Truncar os eventos EPOE da tabela


A Listagem 4 mostra o conjunto completo de tarefas necessárias para truncar a tabela EPOEvents com êxito. O script inclui notas para maior clareza.

A questão fundamental a ser observada é que é impossível truncar uma tabela que participa como pai em um relacionamento de chave estrangeira. Isso violaria a integridade referencial. A exclusão funcionaria e preservaria a integridade referencial, pois as Chaves Estrangeiras são normalmente definidas com as cláusulas ON DELETE CASCADE ou ON DELETE SET NULL.

Lista 4:Truncando a tabela EPOEvents e realocando para um novo 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 para o novo grupo de arquivos


A tabela EPOEvents foi movida para o grupo de arquivos FG_LARGE usando o script na Listagem 5.

Listagem 5:Movendo o grupo de arquivos de eventos EPOE 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

Recriar chaves estrangeiras em tabelas filhas


As chaves estrangeiras em tabelas filhas identificadas na etapa 4.1.5 foram recriadas com o script na Listagem 6.

Listagem 6:Truncando a tabela EPOEvents e realocando para um novo grupo de arquivos
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 a definição da tabela EPOEvents


Como backup, foi ideal para scripting da extração do DDL da tabela EPOEvents. Isso foi feito clicando com o botão direito do mouse e selecionando a opção Script Table as> CREATE To> New Query Editor Window do Pesquisador de Objetos do SSMS[1]. O script resultante pode ser salvo em um .sql Arquivo.

Faça backup do banco de dados EPO


Um segundo backup do banco de dados do EPO foi feito com o script na Listagem 7 para preparar o próximo estágio (redução do arquivo de dados).

Lista 7:Segundo backup do banco de dados 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'

Reduza os arquivos de dados no grupo de arquivos PRIMARY


A redução é necessária para recuperar o espaço liberado truncando a tabela EPOEvents. Também foi crucial neste caso, pois os arquivos de dados exigiam a realocação para uma unidade menor.

Os arquivos de dados foram realocados da unidade I – uma unidade de 3 TB para a unidade P, uma unidade de 200 GB.

Os três arquivos de dados no grupo de arquivos PRIMARY foram nomeados logicamente ePO4_SVR-EPO-01 (~300 GB), ePO4_SVR-EPO-02 (~500 GB) e ePO4_SVR-EPO-03 (~400 GB).

O objetivo era reduzir todos os arquivos para 40.000 MB cada. A tarefa exigiu de cinco a sete iterações, cada uma removendo 50.000 MB.

Listagem 8:Reduzindo arquivos de dados no grupo de arquivos 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

Faça backup do banco de dados EPO


Um segundo backup do banco de dados do EPO foi feito usando o script na Listagem 5 para se preparar para o próximo estágio (descartando o banco de dados existente). O script está presente na Listagem 9 .

Listagem 9:Primeiro backup do banco de dados 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'

Eliminar o banco de dados EPO


O banco de dados foi descartado usando a GUI do SSMS - clique com o botão direito do mouse no banco de dados e selecione a opção "excluir" no menu suspenso. O SQL equivalente está na Listagem 10 .

Listagem 10:Elimine o banco de dados EPO
USE [master]
GO
DROP DATABASE [ePO4_SVR-EPO-02]
GO

Formatar unidade J


Esta etapa formata a unidade J, usando o tamanho de cluster de 64 K, conforme recomendado pela Microsoft para um desempenho de E/S ideal. Essa tarefa foi executada anteriormente nas novas unidades implantadas na etapa 4.1.1.

A Figura 3 mostra a opção selecionada na caixa de diálogo Formatar….

Restaure o banco de dados EPO com MOVE


A operação de restauração foi necessária por três motivos:
  1. Para formatar a unidade J que contém os arquivos de log da transação (como acima).
  2. Para remover qualquer fragmentação causada pela operação de redução.
  3. Para realocar o banco de dados para novas unidades.

O script na Listagem 11 serve para restaurar. Observe que o conjunto de backup usado para essa restauração é o último backup feito na etapa 4.1.8. Além disso, observe que a opção MOVE serve para realocar os arquivos de dados no grupo de arquivos PRIMARY para a unidade P.

Listagem 11:Elimine o banco de dados 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'

Relocalizar TempDB para Drive Q


Para o desempenho ideal de grandes bancos de dados, também é recomendável localizar os arquivos TempDB em uma unidade dedicada.

Usando o script na Listagem 9, o TempDB foi realocado para a unidade Q. Observe que os arquivos de dados redundantes do TempDB foram removidos durante esta operação. O número de arquivos de dados TempDB deve corresponder ao número de CPUs físicas disponíveis para o SQL Server.

Listagem 12:realocar 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 serviços de aplicativos EPO


Todos os serviços de aplicativo foram iniciados assim que a instância do SQL Server foi confirmada como OK. Os serviços de aplicativos iniciados são os seguintes:
  1. Servidor de aplicativos McAfee ePolicy Orchestrator 4.6.8
  2. Analisador de eventos do McAfee ePolicy Orchestrator 4.6.8
  3. Servidor McAfee ePolicy Orchestrator 4.6.8

Confirme que as tabelas estão preenchidas


O script que está listando 13 confirma que a tabela EPOEvents e as tabelas filhas estão sendo preenchidas após a conclusão de todo o processo.

Listagem 13:realocar 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;

TAREFAS DE PÓS MUDANÇA

Resumo das tarefas pós-alteração


1 O trabalho Custom_Purge EPO Events foi criado para manter o número de eventos capturados em 100 dias. É crucial garantir que este trabalho seja sempre bem-sucedido.

2 O espaço excessivo anteriormente alocado para o servidor de banco de dados EPO pode ser recuperado, principalmente a unidade I – atualmente 1 TB.

3 Um trabalho de backup Custom_Daily_Backup foi criado durante a mudança. Os backups feitos por esta tarefa descartarão os conjuntos de backup para I:/MSSQL/Backup/ . É essencial alterar esse caminho se a unidade I for removida do sistema. Também é necessário preservar esses backups de acordo com a Diretiva de Backup de Grupo.

APÊNDICES

APÊNDICE I

TABELA DE EPOEVENTOS 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 DE 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