Database
 sql >> Datenbank >  >> RDS >> Database

Begegnungen am Arbeitsplatz:Speicherplatz aus einer übergroßen Datenbank zurückgewinnen

EINFÜHRUNG

Dieses Dokument zeichnet Schritte, Skripte und die Ideologie hinter der Wartung auf, die zwischen dem 22. April 2015 und dem 23. April 2015 an einer Produktionsdatenbank durchgeführt wurde. Die Details beziehen sich auf eine Anwendung, aber die Prinzipien können für andere nützlich sein, die ähnliche Vorgänge in der Produktion durchführen müssen .

HINTERGRUND

Die Datenbank war mit der Tabelle EPOEvents auf über 1,44 TB angewachsen verbraucht mehr als die Hälfte dieser Größe (792 GB). In der Vergangenheit wurde versucht, Einträge in dieser Tabelle zu löschen, die älter als 90 Tage sind. Leider hat es sich als vergeblich erwiesen. Der zu diesem Zweck geplante Job konnte in keiner Sitzung abgeschlossen werden. Der Grund war die schlechte Performance der Datenbank.

Nach Diskussion wurde entschieden, die gesamten EPOEvents zu löschen Tabelle, indem Sie sie abschneiden. Die weitere Entscheidung war, die Datenbank für das zu erwartende Datenwachstum in der Zukunft richtig vorzubereiten.

Die Details des betreffenden Datenbankservers sind unten:

SERVERNAME SVR-EPA-02
INSTANZNAME SVR-EPO-02\ENG_AVSERVER
BS-VERSION Windows 2008 R2 Enterprise (SP1) 64-Bit
DB-VERSION Microsoft SQL Server 2008 R2 (SP1) 64-Bit
IP-ADRESSE XX.XX.XX.XX
DATENBANKNAME ePO4_SVR-EPO-02

EPOEVENTS-TABELLE

Das Skript, das die EPOEvents definiert Tabelle ist in Anhang I dokumentiert.

Erwähnenswert ist, dass die AutoID-Spalte dieser Tabelle in Fremdschlüsselbeziehungen mit den Tabellen HIP8_EventInfo, HIP8_IPSEventParameter und SCOR_EVENTS steht. Dies wirkte sich auf den Ansatz aus, der zum Abschneiden der EPOEvents-Tabelle verwendet wurde. Die zusammenfassenden Details finden Sie in der folgenden Tabelle:

Diese Informationen wurden mit der Anweisung in Listing 1 extrahiert.

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

VERFAHRENSZUSAMMENFASSUNG

Zusammenfassung des während der Änderung verwendeten Verfahrens:

  • Stellen Sie fünf 200-GB-Laufwerke bereit
  • Beenden Sie die EPA-Anwendungsdienste
  • Sichern Sie die EPO-Datenbank
  • Erstellen Sie eine neue Dateigruppe
  • Kürzen Sie die Tabelle EPOEvents
  • EPOEvents in die neue Dateigruppe verschieben
  • Neuerstellen von Fremdschlüsseln auf untergeordneter Tabelle
  • Skript der EPOEvents-Tabellendefinition
  • Sichern Sie die EPO-Datenbank
  • Datendateien in der PRIMÄREN Dateigruppe verkleinern
  • Sichern Sie die EPO-Datenbank
  • Löschen Sie die EPO-Datenbank
  • Laufwerk J formatieren
  • Stellen Sie die EPO-Datenbank mit MOVE wieder her
  • TempDB auf Laufwerk Q verschieben
  • Starten Sie die EPA-Anwendungsdienste
  • Bestätigen Sie, dass EPOEvents ausgefüllt ist

Stellen Sie fünf 200-GB-Laufwerke bereit

Auf dem Server wurden fünf neue Laufwerke bereitgestellt. Die vollständige Liste aller Laufwerke auf dem Server lautet wie folgt:

LAUFWERK VERWENDUNG NEU? KOMMENTIEREN
C Systemlaufwerk NEIN Standard-Clustergröße (4 KB)
D Application Drive NEIN Standard-Clustergröße (4 KB)
Ich MSSQL-Daten (ALT) NEIN Standard-Clustergröße (4 KB)
J MSSQL-Protokoll NEIN Empfohlene Clustergröße für SQL (64 KB)
M MSSQL-Daten (FG_LARGE FileGroup) JA Empfohlene Clustergröße für SQL (64 KB)
N MSSQL-Daten (FG_LARGE FileGroup) JA Empfohlene Clustergröße für SQL (64 KB)
O MSSQL-Daten (FG_LARGE FileGroup) JA Empfohlene Clustergröße für SQL (64 KB)
P MSSQL-Daten (PRIMARY FileGroup) JA Empfohlene Clustergröße für SQL (64 KB)
F MSSQL TempDB JA Empfohlene Clustergröße für SQL (64 KB)

Alle neuen Laufwerke wurden mit einer Clustergröße von 64 KB formatiert, wie von Microsoft für Laufwerke empfohlen, die MS SQL Server-Daten oder Protokolldateien enthalten[1]. Laufwerk J wurde auch neu formatiert, nachdem eine Sicherungskopie der Datenbank erstellt wurde.

[1] Die vollständige Diskussion ist unter https://msdn.microsoft.com/en-us/library/dd758814.aspx

verfügbar

Beenden Sie die EPA-Anwendungsdienste

Alle Anwendungsdienste wurden gestoppt, um sicherzustellen, dass die Datenbank während des Zeitraums der Änderung nicht aktualisiert wird. Angehaltene (oder als heruntergefahren bestätigte) Anwendungsdienste lauten wie folgt:

  1. McAfee ePolicy Orchestrator 4.6.8 Anwendungsserver
  2. McAfee ePolicy Orchestrator 4.6.8 Ereignis-Parser
  3. McAfee ePolicy Orchestrator 4.6.8-Server

Sichern Sie die EPO-Datenbank

Das erste Backup der Datenbank wurde erstellt, bevor irgendeine Aktion an der bestehenden Struktur stattfand, indem das Skript in Listing 2 verwendet wurde.

Listing 2:Erste Sicherung der ePO4_SVR-EPO-02-Datenbank

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'

Erstellen Sie eine neue Dateigruppe

Eine neue Dateigruppe namens FG_LARGE wurde mit dem Äquivalent des Skripts in Listing 3 erstellt. Alle Dateien, die der Dateigruppe hinzugefügt wurden, wurden mit einer Anfangsgröße von 40 GB, einem Schritt von 1 GB und einer maximalen Größe von 100 GB definiert.

Listing 3:Erstellung der Dateigruppe 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

Trunk the Table EPOEvents

Listing 4 zeigt den vollständigen Aufgabensatz, der erforderlich ist, um die EPOEvents-Tabelle erfolgreich zu kürzen. Das Skript enthält Hinweise zur Verdeutlichung.

Das grundlegende Problem, das zu beachten ist, ist, dass es unmöglich ist, eine Tabelle zu kürzen, die als Elternteil an einer Fremdschlüsselbeziehung teilnimmt. Es würde die referentielle Integrität verletzen. Das Löschen würde funktionieren und die referenzielle Integrität bewahren, da Fremdschlüssel normalerweise mit den Klauseln ON DELETE CASCADE oder ON DELETE SET NULL definiert werden.

Listing 4:Kürzen der EPOEvents-Tabelle und Verschieben in einen neuen 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;

EPOEvents in die neue Dateigruppe verschieben

Die Tabelle EPOEvents wurde mithilfe des Skripts in Listing 5 in die Dateigruppe FG_LARGE verschoben.

Listing 5:Verschieben der EPOEvents-Dateigruppe 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

Neuerstellen von Fremdschlüsseln auf untergeordneten Tabellen

Die in Schritt 4.1.5 identifizierten Foreign Keys on Child-Tabellen wurden mit dem Skript in Listing 6 neu erstellt.

Listing 6:Kürzen der EPOEvents-Tabelle und Verschieben in eine neue Dateigruppe

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

Schreiben Sie die EPOEvents-Tabellendefinition

Als Backup war es ideal, um den Extrakt der DDL der EPOEvents-Tabelle zu skripten. Dazu wurde mit der rechten Maustaste geklickt und die Option Skripttabelle als> ERSTELLEN in> Neues Abfrage-Editor-Fenster ausgewählt aus dem SSMS[1]-Objekt-Explorer. Das resultierende Skript kann in einer .sql-Datei gespeichert werden Datei.

Sichern Sie die EPO-Datenbank

Ein zweites Backup der EPO-Datenbank wurde mit dem Skript in Listing 7 erstellt, um die nächste Phase vorzubereiten (Verkleinern der Datendatei).

Listing 7:Zweites Backup der EPO-Datenbank

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'

Datendateien in der PRIMÄREN Dateigruppe verkleinern

Das Verkleinern ist erforderlich, um den durch das Abschneiden der EPOEvents-Tabelle frei gewordenen Speicherplatz zurückzugewinnen. Dies war auch in diesem Fall von entscheidender Bedeutung, da die Datendateien auf ein kleineres Laufwerk verschoben werden mussten.

Die Datendateien wurden von Laufwerk I – ein 3-TB-Laufwerk – auf Laufwerk P, ein 200-GB-Laufwerk, verschoben.

Die drei Datendateien in der PRIMARY Filegroup wurden logischerweise ePO4_SVR-EPO-01 genannt (~300 GB), ePO4_SVR-EPO-02 (~500 GB) und ePO4_SVR-EPO-03 (~400 GB).

Ziel war es, alle Dateien auf jeweils 40000 MB zu verkleinern. Die Aufgabe erforderte fünf bis sieben Iterationen, von denen jede 50.000 MB entfernte.

Listing 8:Verkleinern von Datendateien in der PRIMARY-Dateigruppe

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

Sichern Sie die EPO-Datenbank

Eine zweite Sicherung der EPO-Datenbank wurde mit dem Skript in Listing 5 erstellt zur Vorbereitung auf die nächste Stufe (Löschen der bestehenden Datenbank). Das Skript ist in Listing 9 enthalten .

Listing 9:Erste Sicherung der ePO4_SVR-EPO-02-Datenbank

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'

Löschen Sie die EPO-Datenbank

Die Datenbank wurde mithilfe der SSMS-GUI gelöscht – klicken Sie mit der rechten Maustaste auf die Datenbank und wählen Sie die Option „Löschen“ aus dem Dropdown-Menü. Das entsprechende SQL befindet sich in Listing 10 .

Listing 10:Löschen der EPO-Datenbank

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

Laufwerk J formatieren

Dieser Schritt formatiert das Laufwerk J unter Verwendung der 64-KB-Clustergröße, wie von Microsoft für eine optimale E/A-Leistung empfohlen. Diese Aufgabe wurde zuvor auf den neuen Laufwerken durchgeführt, die in Schritt 4.1.1 bereitgestellt wurden.

Abbildung 3 zeigt die im Dialogfeld Format… ausgewählte Option.

Stellen Sie die EPO-Datenbank mit MOVE wieder her

Der Wiederherstellungsvorgang war aus drei Gründen erforderlich:

  1. Um Laufwerk J zu formatieren, das die Transaktionsprotokolldateien enthält (wie oben).
  2. Um jegliche Fragmentierung zu entfernen, die durch den Verkleinerungsvorgang verursacht wurde.
  3. Um die Datenbank auf neue Laufwerke zu verschieben.

Das Skript in Listing 11 dient zum restaurieren. Beachten Sie, dass der für diese Wiederherstellung verwendete Sicherungssatz die letzte Sicherung ist, die in Schritt 4.1.8 erstellt wurde. Beachten Sie außerdem, dass die MOVE-Option dazu dient, die Datendateien in der PRIMARY Filegroup auf Laufwerk P.

zu verschieben

Listing 11:EPO-Datenbank löschen

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 auf Laufwerk Q verschieben

Für eine optimale Leistung großer Datenbanken wird außerdem empfohlen, TempDB-Dateien auf einem dedizierten Laufwerk zu speichern.

Mithilfe des Skripts in Listing 9 wurde TempDB auf Laufwerk Q verschoben. Beachten Sie, dass die redundanten TempDB-Datendateien während dieses Vorgangs entfernt wurden. Die Anzahl der TempDB-Datendateien sollte der Anzahl der für SQL Server verfügbaren physischen CPUs entsprechen.

Listing 12:TempDB verschieben

-- 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

Starten Sie die EPA-Anwendungsdienste

Alle Anwendungsdienste wurden gestartet, nachdem die SQL Server-Instanz als OK bestätigt wurde. Die gestarteten Anwendungsdienste lauten wie folgt:

  1. McAfee ePolicy Orchestrator 4.6.8 Anwendungsserver
  2. McAfee ePolicy Orchestrator 4.6.8 Ereignis-Parser
  3. McAfee ePolicy Orchestrator 4.6.8-Server

Bestätigen Sie, dass die Tabellen gefüllt sind

Das Skript in Listing 13 bestätigt, dass die Tabelle EPOEvents und die untergeordneten Tabellen gefüllt werden, nachdem der gesamte Prozess abgeschlossen ist.

Listing 13:TempDB verschieben

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;

AUFGABEN NACH DER ÄNDERUNG

Zusammenfassung der Post-Change-Aufgaben

1 Der Job Custom_Purge EPO Events wurde erstellt, um die Anzahl der innerhalb von 100 Tagen erfassten Ereignisse zu speichern. Es ist entscheidend sicherzustellen, dass diese Arbeit immer erfolgreich ist.

2 Überschüssiger Speicherplatz, der zuvor dem EPA-Datenbankserver zugewiesen wurde, kann zurückgewonnen werden, insbesondere Laufwerk I – derzeit 1 TB.

3 Ein Sicherungsjob Custom_Daily_Backup wurde während der Änderung erstellt. Von diesem Job erstellte Sicherungen legen Sicherungssätze in I:/MSSQL/Backup/ ab . Dieser Pfad muss unbedingt geändert werden, wenn das Laufwerk I aus dem System entfernt wird. Es ist außerdem erforderlich, diese Sicherungen gemäß der Sicherungsrichtlinie der Gruppe aufzubewahren.

ANHÄNGE

ANHANG I

EPOEVENTS TABLE DDL

USE [ePO4_SVR-EPO-02]
GO

/****** Object:  Table [dbo].[EPOEvents]    Script Date: 04/23/2015 01:40:46 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[EPOEvents](
	[AutoID] [int] IDENTITY(1,1) NOT NULL,
	[AutoGUID] [uniqueidentifier] NOT NULL,
	[ServerID] [nvarchar](16) NOT NULL,
	[ReceivedUTC] [datetime] NOT NULL,
	[DetectedUTC] [datetime] NOT NULL,
	[AgentGUID] [uniqueidentifier] NOT NULL,
	[Analyzer] [nvarchar](16) NOT NULL,
	[AnalyzerName] [nvarchar](64) NOT NULL,
	[AnalyzerVersion] [nvarchar](20) NOT NULL,
	[AnalyzerHostName] [nvarchar](128) NULL,
	[AnalyzerIPV4] [int] NULL,
	[AnalyzerIPV6] [binary](16) NULL,
	[AnalyzerMAC] [nvarchar](16) NULL,
	[AnalyzerDATVersion] [nvarchar](20) NULL,
	[AnalyzerEngineVersion] [nvarchar](20) NULL,
	[AnalyzerDetectionMethod] [nvarchar](128) NULL,
	[SourceHostName] [nvarchar](266) NULL,
	[SourceIPV4] [int] NULL,
	[SourceIPV6] [binary](16) NULL,
	[SourceMAC] [nvarchar](16) NULL,
	[SourceUserName] [nvarchar](128) NULL,
	[SourceProcessName] [nvarchar](128) NULL,
	[SourceURL] [nvarchar](1024) NULL,
	[TargetHostName] [nvarchar](266) NULL,
	[TargetIPV4] [int] NULL,
	[TargetIPV6] [binary](16) NULL,
	[TargetMAC] [nvarchar](16) NULL,
	[TargetUserName] [nvarchar](128) NULL,
	[TargetPort] [int] NULL,
	[TargetProtocol] [nvarchar](16) NULL,
	[TargetProcessName] [nvarchar](128) NULL,
	[TargetFileName] [nvarchar](266) NULL,
	[ThreatCategory] [nvarchar](128) NOT NULL,
	[ThreatEventID] [int] NOT NULL,
	[ThreatSeverity] [tinyint] NOT NULL,
	[ThreatName] [nvarchar](128) NOT NULL,
	[ThreatType] [nvarchar](32) NOT NULL,
	[ThreatActionTaken] [nvarchar](24) NOT NULL,
	[ThreatHandled] [bit] NULL,
	[TheTimestamp] [timestamp] NOT NULL,
 CONSTRAINT [PK_EPOEvents_AutoID] PRIMARY KEY CLUSTERED 
(
	[AutoID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[EPOEvents] ADD  CONSTRAINT [DF_EPOEvents_EventID]  DEFAULT (newid()) FOR [AutoGUID]
GO

ALTER TABLE [dbo].[EPOEvents] ADD  CONSTRAINT [DF_EPOEvents_ServerID]  DEFAULT (N'SVR-EPO-02') FOR [ServerID]
GO

ALTER TABLE [dbo].[EPOEvents] ADD  CONSTRAINT [DF_EPOEvents_ReceivedUTC]  DEFAULT (getutcdate()) FOR [ReceivedUTC]
GO

ALTER TABLE [dbo].[EPOEvents] ADD  CONSTRAINT [DF_EPOEvents_ThreatSeverity]  DEFAULT ((1)) FOR [ThreatSeverity]
GO

ALTER TABLE [dbo].[EPOEvents] ADD  CONSTRAINT [DF_EPOEvents_ThreatActionTaken]  DEFAULT ('none') FOR [ThreatActionTaken]
GO

ANHANG II

JOB CUSTOM_PURGE EPO-EREIGNISSE

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