Database
 sql >> Baza danych >  >> RDS >> Database

Spotkania w miejscu pracy:odzyskiwanie przestrzeni z przewymiarowanej bazy danych

WPROWADZENIE

Ten dokument rejestruje kroki, skrypty i ideologię konserwacji przeprowadzonej na produkcyjnej bazie danych w okresie od 22 kwietnia 2015 r. do 23 kwietnia 2015 r. Szczegóły są specyficzne dla aplikacji, ale zasady mogą być przydatne dla innych osób, które potrzebują wykonać podobne operacje w środowisku produkcyjnym .

TŁO

Baza danych wzrosła do ponad 1,44 TB z tabelą EPOEvents zużywa ponad połowę tego rozmiaru (792 GB). W przeszłości podjęto wysiłki w celu usunięcia wpisów w tej tabeli starszych niż 90 dni. Niestety okazało się to bezowocne. Zadanie zaplanowane, aby to osiągnąć, nigdy nie mogło zostać ukończone podczas żadnej sesji. Powodem była słaba wydajność bazy danych.

Po dyskusji podjęto decyzję o wyczyszczeniu wszystkich EPOEvents tabeli, obcinając ją. Kolejną decyzją było prawidłowe przygotowanie bazy danych do przewidywanego wzrostu ilości danych w przyszłości.

Szczegóły serwera bazy danych, o którym mowa, znajdują się poniżej:

NAZWA SERWERA SVR-EPO-02
NAZWA INSTANCJI SVR-EPO-02\ENG_AVSERVER
WERSJA OS Windows 2008 R2 Enterprise (SP1) 64-bitowy
WERSJA DB Microsoft SQL Server 2008 R2 (SP1) 64-bitowy
ADRES IP XX.XX.XX.XX
NAZWA BAZY DANYCH ePO4_SVR-EPO-02

TABELA WYDARZEŃ EPO

Skrypt definiujący EPOEvents tabela jest udokumentowana w Załączniku I.

Warto wspomnieć, że kolumna AutoID tej tabeli jest w relacji klucza obcego z tabelami HIP8_EventInfo, HIP8_IPSEventParameter i SCOR_EVENTS. Wpłynęło to na podejście stosowane do obcinania tabeli EPOEvents. Szczegóły podsumowania znajdują się w poniższej tabeli:

Te informacje zostały wyodrębnione przy użyciu oświadczenia z Listingu 1.

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

PODSUMOWANIE PROCEDURY

Podsumowanie procedury zastosowanej podczas zmiany:

  • Wdróż pięć dysków 200 GB
  • Zatrzymaj usługi aplikacji EPO
  • Utwórz kopię zapasową bazy danych EPO
  • Utwórz nową grupę plików
  • Przytnij tabelę EPOEvents
  • Przenieś zdarzenia EPOEvent do nowej grupy plików
  • Odtwórz klucze obce w tabeli podrzędnej
  • Skryptuj definicję tabeli EPOEvents
  • Utwórz kopię zapasową bazy danych EPO
  • Zmniejsz pliki danych w podstawowej grupie plików
  • Utwórz kopię zapasową bazy danych EPO
  • Upuść bazę danych EPO
  • Sformatuj dysk J
  • Przywróć bazę danych EPO za pomocą MOVE
  • Przenieś TempDB na dysk Q
  • Uruchom usługi aplikacji EPO
  • Potwierdź, że zdarzenia EPOEvents są zapełnione

Wdróż pięć dysków 200 GB

Na serwerze wdrożono pięć nowych dysków. Pełna lista wszystkich dysków na serwerze jest następująca:

DYSK UŻYJ NOWOŚĆ? KOMENTARZ
C Dysk systemowy NIE Domyślny rozmiar klastra (4 KB)
D Dysk aplikacji NIE Domyślny rozmiar klastra (4 KB)
Ja Dane MSSQL (STARY) NIE Domyślny rozmiar klastra (4 KB)
J Dziennik MSSQL NIE Zalecany rozmiar klastra dla SQL (64 KB)
M Dane MSSQL (FG_LARGE FileGroup) TAK Zalecany rozmiar klastra dla SQL (64 KB)
N Dane MSSQL (FG_LARGE FileGroup) TAK Zalecany rozmiar klastra dla SQL (64 KB)
O Dane MSSQL (FG_LARGE FileGroup) TAK Zalecany rozmiar klastra dla SQL (64 KB)
P Dane MSSQL (PRIMARY FileGroup) TAK Zalecany rozmiar klastra dla SQL (64 KB)
P MSSQL TempDB TAK Zalecany rozmiar klastra dla SQL (64 KB)

Wszystkie nowe dyski zostały sformatowane przy użyciu klastra o rozmiarze 64 KB, zgodnie z zaleceniami firmy Microsoft dla dysków zawierających dane lub pliki dziennika MS SQL Server[1]. Dysk J został również ponownie sformatowany po wykonaniu kopii zapasowej bazy danych.

[1] Pełna dyskusja jest dostępna pod adresem https://msdn.microsoft.com/en-us/library/dd758814.aspx

Zatrzymaj usługi aplikacji EPO

Wszystkie usługi aplikacji zostały zatrzymane, aby zapewnić brak aktualizacji bazy danych w okresie zmiany. Usługi aplikacji zatrzymane (lub potwierdzone) są następujące:

  1. Serwer aplikacji McAfee ePolicy Orchestrator 4.6.8
  2. McAfee ePolicy Orchestrator 4.6.8 Analizator zdarzeń
  3. Serwer McAfee ePolicy Orchestrator 4.6.8

Utwórz kopię zapasową bazy danych EPO

Pierwsza kopia zapasowa bazy danych została wykonana przed podjęciem jakichkolwiek działań na istniejącej strukturze, przy użyciu skryptu z Listingu 2.

Listing 2:Pierwsza kopia zapasowa bazy danych 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'

Utwórz nową grupę plików

Utworzono nową grupę plików o nazwie FG_LARGE z odpowiednikiem skryptu z Listingu 3. Wszystkie pliki dodane do grupy plików zostały zdefiniowane z początkowym rozmiarem 40 GB, przyrostem 1 GB i maksymalnym rozmiarem 100 GB.

Listing 3:Tworzenie grupy plików 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

Obetnij tabelę EPOEvents

Listing 4 przedstawia pełny zestaw zadań wymaganych do pomyślnego obcięcia tabeli EPOEvents. Skrypt zawiera uwagi dla jasności.

Podstawową kwestią, na którą należy zwrócić uwagę, jest to, że niemożliwe jest obcięcie tabeli uczestniczącej jako nadrzędna w relacji klucza obcego. Naruszyłoby to integralność referencyjną. Usunięcie zadziała i zachowa integralność referencyjną, ponieważ klucze obce są zwykle definiowane za pomocą klauzul ON DELETE CASCADE lub ON DELETE SET NULL.

Listing 4:Obcinanie tabeli EPOEvents i przenoszenie do nowej przestrzeni tabel

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

Przenieś zdarzenia EPOEvent do nowej grupy plików

Tablica EPOEvents została przeniesiona do grupy plików FG_LARGE za pomocą skryptu z Listingu 5.

Listing 5:Przenoszenie grupy plików 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

Odtwórz klucze obce w tabelach podrzędnych

Klucze obce w tabelach podrzędnych zidentyfikowane w kroku 4.1.5 zostały odtworzone za pomocą skryptu z Listingu 6.

Listing 6:Obcinanie tabeli EPOEvents i przenoszenie do nowej grupy plików

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

Skryptuj definicję tabeli EPOEvents

Jako kopia zapasowa była idealna do skryptowania ekstraktu DDL z tabeli EPOEvents. Dokonano tego, klikając prawym przyciskiem myszy i wybierając opcję Tabela skryptów jako> UTWÓRZ w> Nowe okno edytora zapytań z Eksploratora obiektów SSMS[1]. Wynikowy skrypt można zapisać w pliku .sql plik.

Utwórz kopię zapasową bazy danych EPO

Wykonano drugą kopię zapasową bazy danych EPO za pomocą skryptu z Listingu 7, aby przygotować się do następnego etapu (zmniejszanie pliku danych).

Listing 7:Druga kopia zapasowa bazy danych 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'

Zmniejszanie plików danych w grupie plików PRIMARY

Zmniejszenie jest konieczne, aby odzyskać miejsce zwolnione przez obcięcie tabeli EPOEvents. Było to również kluczowe w tym przypadku, ponieważ pliki danych wymagały przeniesienia na mniejszy dysk.

Pliki danych zostały przeniesione z dysku I – z dysku 3 TB na dysk P, z dysku o pojemności 200 GB.

Trzy pliki danych w grupie plików PRIMARY zostały nazwane logicznie ePO4_SVR-EPO-01 (~300 GB), ePO4_SVR-EPO-02 (~500 GB) i ePO4_SVR-EPO-03 (~400 GB).

Celem było zmniejszenie wszystkich plików do 40000 MB każdy. Zadanie wymagało od pięciu do siedmiu iteracji, z których każda usuwała 50000 MB.

Listing 8:Zmniejszanie plików danych w grupie plików 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

Utwórz kopię zapasową bazy danych EPO

Druga kopia zapasowa bazy danych EPO została wykonana przy użyciu skryptu z Listing 5 przygotować się do kolejnego etapu (usunięcie istniejącej bazy danych). Skrypt znajduje się na Listing 9 .

Listing 9:Pierwsza kopia zapasowa bazy danych 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'

Upuść bazę danych EPO

Baza danych została usunięta za pomocą GUI SSMS – kliknij prawym przyciskiem myszy bazę danych i wybierz opcję „usuń” z rozwijanego menu. Odpowiednik SQL znajduje się na Listingu 10 .

Listing 10:Usuń bazę danych EPO

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

Sformatuj dysk J

Ten krok formatuje dysk J przy użyciu rozmiaru klastra 64 KB, zgodnie z zaleceniami firmy Microsoft w celu uzyskania optymalnej wydajności we/wy. To zadanie zostało wcześniej wykonane na nowych dyskach wdrożonych w kroku 4.1.1.

Rysunek 3 pokazuje opcję wybraną w oknie dialogowym Format….

Przywróć bazę danych EPO za pomocą MOVE

Operacja przywracania była konieczna z trzech powodów:

  1. Aby sformatować dysk J zawierający pliki dziennika transakcji (jak powyżej).
  2. Aby usunąć fragmentację spowodowaną operacją zmniejszania.
  3. Aby przenieść bazę danych na nowe dyski.

Skrypt z Listingu 11 służy do przywracania. Należy zauważyć, że zestaw kopii zapasowych używany do tego przywracania jest ostatnią kopią zapasową wykonaną w kroku 4.1.8. Zwróć także uwagę, że opcja PRZENIEŚ służy do przenoszenia plików danych w podstawowej grupie plików do napędu P.

Listing 11:Usuń bazę danych 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'

Przenieś TempDB na dysk Q

Aby uzyskać optymalną wydajność dużych baz danych, zaleca się również umieszczenie plików TempDB na dedykowanym dysku.

Używając skryptu z Listingu 9, TempDB zostało przeniesione na dysk Q. Należy zauważyć, że nadmiarowe pliki danych TempDB zostały usunięte podczas tej operacji. Liczba plików danych TempDB powinna odpowiadać liczbie fizycznych procesorów dostępnych dla SQL Server.

Listing 12:Przenieś bazę danych 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

Uruchom usługi aplikacji EPO

Wszystkie usługi aplikacji zostały uruchomione po potwierdzeniu poprawności wystąpienia SQL Server. Uruchomione usługi aplikacji są następujące:

  1. Serwer aplikacji McAfee ePolicy Orchestrator 4.6.8
  2. McAfee ePolicy Orchestrator 4.6.8 Analizator zdarzeń
  3. Serwer McAfee ePolicy Orchestrator 4.6.8

Potwierdź, że tabele są wypełnione

Skrypt na liście 13 potwierdza, że ​​tabela EPOEvents i tabele podrzędne są wypełniane po zakończeniu całego procesu.

Listing 13:Przenieś bazę danych 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;

PUBLIKUJ ZADANIA ZMIANY

Podsumowanie zadań po zmianie

1 Zadanie Custom_Purge EPO Events został stworzony, aby zachować liczbę zdarzeń przechwyconych w ciągu 100 dni. Bardzo ważne jest, aby ta praca zawsze była udana.

2 Nadmiar miejsca wcześniej przydzielonego do serwera bazy danych EPO można odzyskać, w szczególności dysk I – obecnie 1 TB.

3 Zadanie kopii zapasowej Custom_Daily_Backup powstał podczas zmiany. Kopie zapasowe wykonane przez to zadanie spowodują upuszczenie zestawów kopii zapasowych do I:/MSSQL/Backup/ . Konieczna jest zmiana tej ścieżki, jeśli dysk zostanie usunięty z systemu. Konieczne jest również zachowanie tych kopii zapasowych zgodnie z zasadami grupowych kopii zapasowych.

ZAŁĄCZNIKI

ZAŁĄCZNIK I

TABELA DDL EPOEVENTS

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

ZAŁĄCZNIK II

JOB CUSTOM_PURGE WYDARZENIA 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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zmień tabelę SQL

  2. Poznaj podstawy rejestrowania w Javie

  3. Wprowadzenie do automatycznego skalowania Amazon Web Services (AWS)

  4. Stosowanie reguł terenowych za pomocą klasyfikacji

  5. Statystyka szarpnięcia kolanem:SOS_SCHEDULER_YIELD