ВЪВЕДЕНИЕ
Този документ записва стъпки, скриптове и идеология зад поддръжката, извършена на производствена база данни между 22 април 2015 г. и 23 април 2015 г. Подробностите са специфични за дадено приложение, но принципите могат да бъдат полезни за други, които се нуждаят от подобни операции в производството .
ФОН
Базата данни нарасна до над 1,44 TB с таблицата EPOEvents консумират над половината от този размер (792GB). В миналото бяха положени усилия за изтриване на записи в тази таблица, по-стари от 90 дни. За съжаление се оказа безполезно. Работата, планирана за постигане на това, никога не може да бъде завършена по време на нито една сесия. Причината е лошото представяне на базата данни.
След обсъждане беше взето решение за изчистване на целия EPOEvents таблица, като я съкратите. По-нататъшното решение беше базата да се подготви правилно за очаквания растеж на данните в бъдеще.
Подробностите за въпросния сървър на база данни са по-долу:
ИМЕ НА СЪРВЪР | SVR-EPO-02 |
ИМЕ НА ИНСТАНЦИЯ | SVR-EPO-02\ENG_AVSERVER |
ВЕРСИЯ НА ОС | Windows 2008 R2 Enterprise (SP1) 64-битова |
ВЕРСИЯ DB | Microsoft SQL Server 2008 R2 (SP1) 64-битов |
IP АДРЕС | XX.XX.XX.XX |
ИМЕ НА БАЗА ДАННИ | ePO4_SVR-EPO-02 |
ТАБЛИЦА ЗА СЪБИТИЯ
Скриптът, дефиниращ EPOEvents таблицата е документирана в Приложение I.
Струва си да се спомене, че колоната AutoID на тази таблица е във връзки с външни ключове с таблиците HIP8_EventInfo, HIP8_IPSEventParameter и SCOR_EVENTS. Това се отрази на подхода, използван за съкращаване на таблицата EPOEvents. Обобщените подробности са в таблицата по-долу:
Тази информация е извлечена с помощта на израза в листинг 1.
USE [ePO4_SVR-EPO-02]
GO
EXEC sp_fkeys 'EPOEvents'
ОБОБЩЕНИЕ НА ПРОЦЕДУРАТА
Обобщение на процедурата, използвана по време на промяната:
- Разгръщане на пет 200GB диска
- Спиране на EPO Application Services
- Архивирайте базата данни на EPO
- Създайте нова файлова група
- Отрежете таблицата EPOEvents
- Преместете EPOEvents в новата файлова група
- Пресъздаване на чужди ключове върху дъщерна таблица
- Напишете скрипт за дефиницията на таблицата EPOEvents
- Архивирайте базата данни на EPO
- Свиване на файлове с данни в ОСНОВНАТА файлова група
- Архивирайте базата данни на EPO
- Изхвърлете базата данни на EPO
- Форматиране на устройство J
- Възстановете базата данни на EPO с MOVE
- Преместете TempDB в Drive Q
- Стартирайте EPO Application Services
- Потвърдете, че EPOEvents е попълнено
Разгръщане на пет 200GB диска
Пет нови диска бяха разположени на сървъра. Пълният списък на всички устройства на сървъра е както следва:
DRIVE | ИЗПОЛЗВАНЕ | НОВО? | КОМЕНТАР |
C | Системно устройство | НЕ | Размер на клъстера по подразбиране (4KB) |
D | Приложно устройство | НЕ | Размер на клъстера по подразбиране (4KB) |
I | MSSQL данни (СТАРИ) | НЕ | Размер на клъстера по подразбиране (4KB) |
J | Регистър на MSSQL | НЕ | Препоръчителен размер на клъстера за SQL (64K) |
M | MSSQL данни (FG_LARGE FileGroup) | ДА | Препоръчителен размер на клъстера за SQL (64K) |
N | MSSQL данни (FG_LARGE FileGroup) | ДА | Препоръчителен размер на клъстера за SQL (64K) |
O | MSSQL данни (FG_LARGE FileGroup) | ДА | Препоръчителен размер на клъстера за SQL (64K) |
P | MSSQL данни (PRIMARY FileGroup) | ДА | Препоръчителен размер на клъстера за SQL (64K) |
В | MSSQL TempDB | ДА | Препоръчителен размер на клъстера за SQL (64K) |
Всички нови устройства бяха форматирани с помощта на размер на клъстер 64K, както се препоръчва от Microsoft за устройства, съдържащи данни или регистрационни файлове на MS SQL Server[1]. Устройството J също беше преформатирано след правене на резервно копие на базата данни.
[1] Пълната дискусия е достъпна на https://msdn.microsoft.com/en-us/library/dd758814.aspx
Спиране на EPO Application Services
Всички приложни услуги бяха спрени, за да се гарантира липса на актуализация на базата данни през периода на промяната. Услугите за приложения, спрени (или потвърдени неработещи), са както следва:
- McAfee ePolicy Orchestrator 4.6.8 Сървър на приложения
- McAfee ePolicy Orchestrator 4.6.8 Анализатор на събития
- Сървър McAfee ePolicy Orchestrator 4.6.8
Архивирайте базата данни на EPO
Първото архивиране на базата данни е направено преди да се извърши каквото и да е действие върху съществуващата структура, като се използва скриптът в листинг 2.
Списък 2:Първо архивиране на базата данни 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'
Създайте нова файлова група
Нова файлова група, наречена FG_LARGE, беше създадена с еквивалента на скрипта в листинг 3. Всички файлове, добавени към файловата група, бяха дефинирани с 40GB първоначален размер, 1G увеличение и 100GB максимален размер.
Списък 3:Създаване на файлова група 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
Отрежете таблицата EPOEvents
Списък 4 показва пълния набор от задачи, необходими за успешно съкратяване на таблицата EPOEvents. Сценарият включва бележки за по-голяма яснота.
Основният проблем, който трябва да се отбележи, е, че е невъзможно да се съкрати таблица, която участва като родител във връзка с външния ключ. Това би нарушило референтната цялост. Изтриването би работило и би запазило референтната цялост, тъй като външните ключове обикновено се дефинират с клаузи ON DELETE CASCADE или ON DELETE SET NULL.
Списък 4:Съкращаване на таблицата EPOEvents и преместване в ново пространство за таблици
/****** 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;
Преместете EPOEvents в новата файлова група
Таблицата EPOEvents беше преместена във файловата група FG_LARGE с помощта на скрипта в листинг 5.
Списък 5:Преместване на файлова група 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
Пресъздаване на външни ключове върху дъщерни таблици
Външните ключове на дъщерни таблици, идентифицирани в стъпка 4.1.5, бяха пресъздадени със скрипта в листинг 6.
Списък 6:Съкращаване на таблицата EPOEvents и преместване в нова файлова група
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
Напишете скрипт на дефиницията на таблицата EPOEvents
Като резервно копие, той беше идеален за скриптиране на екстракта от DDL на таблицата EPOEvents. Това беше направено чрез щракване с десния бутон и избор на опцията Таблица на скриптове като> СЪЗДАВАНЕ до> Нов прозорец на редактора на заявки от SSMS[1] Object Explorer. Полученият скрипт може да бъде запазен в .sql файл.
Архивирайте базата данни на EPO
Второ архивиране на базата данни на EPO беше направено със скрипта в листинг 7, за да се подготви за следващия етап (свиване на файла с данни).
Списък 7:Второ архивиране на базата данни на 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'
Свиване на файлове с данни в ОСНОВНАТА файлова група
Свиването е необходимо, за да се възстанови освободеното пространство чрез съкращаване на таблицата EPOEvents. Това също беше от решаващо значение в този случай, тъй като файловете с данни изискваха преместване на по-малък диск.
Файловете с данни бяха преместени от устройство I – 3 TB устройство към устройство P, 200 GB устройство.
Трите файла с данни в ОСНОВНАТА файлова група бяха логически наречени ePO4_SVR-EPO-01 (~300GB), ePO4_SVR-EPO-02 (~500GB) и ePO4_SVR-EPO-03 (~400 GB).
Целта беше да се свият всички файлове до 40 000 MB всеки. Задачата изисква пет до седем итерации, всяка от които е премахнала 50 000 MB.
Списък 8:Свиване на файлове с данни в ОСНОВНАТА файлова група
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
Архивирайте базата данни на EPO
Второ архивиране на базата данни на EPO беше направено с помощта на скрипта в листинг 5 за подготовка за следващия етап (изтриване на съществуващата база данни). Скриптът присъства в листинг 9 .
Списък 9:Първо архивиране на базата данни 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'
Изхвърлете базата данни на EPO
Базата данни беше премахната с помощта на SSMS GUI – щракнете с десния бутон върху базата данни и изберете опцията „изтриване“ от падащото меню. Еквивалентният SQL е в листинг 10 .
Списък 10:Изхвърлете базата данни на EPO
USE [master]
GO
DROP DATABASE [ePO4_SVR-EPO-02]
GO
Форматиране на устройство J
Тази стъпка форматира устройството J, използвайки размера на клъстера 64K, както е препоръчано от Microsoft за оптимална I/O производителност. Тази задача преди това беше изпълнена на новите устройства, внедрени в стъпка 4.1.1.
Фигура 3 показва опцията, избрана в диалоговия прозорец Форматиране...
Възстановете базата данни на EPO с MOVE
Операцията по възстановяване беше необходима по три причини:
- За форматиране на устройство J, съдържащо регистрационните файлове на транзакциите (както по-горе).
- За да премахнете всякаква фрагментация, причинена от операцията за свиване.
- За да преместите базата данни на нови устройства.
Скриптът в листинг 11 служи за възстановяване. Имайте предвид, че наборът от архиви, използван за това възстановяване, е последното архивиране, направено в стъпка 4.1.8. Също така имайте предвид, че опцията MOVE служи за преместване на файловете с данни в ОСНОВНАТА файлова група, за да управлява P.
Списък 11:Изхвърлете базата данни на 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'
Преместете TempDB в устройство Q
За оптимална производителност на големи бази данни се препоръчва също така да намерите TempDB файлове на специално устройство.
Използвайки скрипта в листинг 9, TempDB беше преместен на устройство Q. Имайте предвид, че излишните файлове с данни TempDB бяха премахнати по време на тази операция. Броят на TempDB файлове с данни трябва да съответства на броя на физическите процесори, налични за SQL Server.
Списък 12:Преместване на 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
Стартирайте EPO Application Services
Всички приложни услуги бяха стартирани, след като екземплярът на SQL Server беше потвърден ОК. Стартираните услуги за приложения са както следва:
- McAfee ePolicy Orchestrator 4.6.8 Сървър на приложения
- McAfee ePolicy Orchestrator 4.6.8 Анализатор на събития
- Сървър McAfee ePolicy Orchestrator 4.6.8
Потвърдете, че таблиците са попълнени
Скриптът в листинг 13 потвърждава, че таблицата EPOEvents и дъщерните таблици се попълват след завършване на целия процес.
Списък 13:Преместване на 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;
Публикуване на ЗАДАЧИТЕ ЗА ПРОМЯНА
Резюме на задачите след промяна
1 Заданието Custom_Purge EPO Events е създаден, за да запази броя на събитията, заснети в рамките на 100 дни. От решаващо значение е тази работа да е винаги успешна.
2 Прекалено пространство, разпределено по-рано на сървъра на базата данни на EPO, може да бъде възстановено, особено устройството I – в момента 1 TB.
3 Задача за архивиране Custom_Daily_Backup е създадена по време на промяната. Архивите, направени от това задание, ще премахнат наборите за архивиране до I:/MSSQL/Backup/ . Важно е да промените този път, ако устройството I ще бъде премахнато от системата. Също така е необходимо тези резервни копия да бъдат запазени съгласно правилата за групово архивиране.
ПРИЛОЖЕНИЯ
ПРИЛОЖЕНИЕ I
ТАБЛИЦА ЗА ЕПОЕВЕНТИ 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
ПРИЛОЖЕНИЕ II
РАБОТА CUSTOM_PURGE 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