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ügbarBeenden 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:
- McAfee ePolicy Orchestrator 4.6.8 Anwendungsserver
- McAfee ePolicy Orchestrator 4.6.8 Ereignis-Parser
- 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:
- Um Laufwerk J zu formatieren, das die Transaktionsprotokolldateien enthält (wie oben).
- Um jegliche Fragmentierung zu entfernen, die durch den Verkleinerungsvorgang verursacht wurde.
- 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 verschiebenListing 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:
- McAfee ePolicy Orchestrator 4.6.8 Anwendungsserver
- McAfee ePolicy Orchestrator 4.6.8 Ereignis-Parser
- 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