sql >> Databáze >  >> RDS >> Database

Setkání na pracovišti:Rekultivace prostoru z příliš velké databáze

ÚVOD

Tento dokument zaznamenává kroky, skripty a ideologii za údržbou prováděnou na produkční databázi mezi 22. dubnem 2015 a 23. dubnem 2015. Podrobnosti jsou specifické pro aplikaci, ale principy mohou být užitečné pro ostatní, kteří potřebují provádět podobné operace ve výrobě. .

POZADÍ

Databáze se rozrostla na více než 1,44 TB s tabulkou EPOEvents spotřebovává více než polovinu této velikosti (792 GB). V minulosti bylo vynaloženo úsilí na odstranění záznamů v této tabulce starších než 90 dnů. Bohužel se to ukázalo jako marné. Úloha naplánovaná k dosažení tohoto cíle nemohla být nikdy dokončena během žádné relace. Důvodem byl špatný výkon databáze.

Po diskuzi bylo rozhodnuto o vyčištění celých EPOEvents tabulky jejím oříznutím. Dalším rozhodnutím bylo správně připravit databázi na očekávaný růst dat v budoucnu.

Podrobnosti o daném databázovém serveru jsou uvedeny níže:

NÁZEV SERVERU SVR-EPO-02
NÁZEV INSTANCE SVR-EPO-02\ENG_AVSERVER
VERZE OS Windows 2008 R2 Enterprise (SP1) 64bitová verze
VERZE DB Microsoft SQL Server 2008 R2 (SP1) 64bitový
IP ADRESA XX.XX.XX.XX
NÁZEV DATABÁZE ePO4_SVR-EPO-02

TABULKA EPOEVENTŮ

Skript definující EPOEvents tabulka je zdokumentována v příloze I.

Za zmínku stojí, že sloupec AutoID této tabulky je ve vztazích cizího klíče s tabulkami HIP8_EventInfo, HIP8_IPSEventParameter a SCOR_EVENTS. To ovlivnilo přístup použitý ke zkrácení tabulky EPOEvents. Souhrnné podrobnosti jsou v tabulce níže:

Tyto informace byly extrahovány pomocí příkazu ve výpisu 1.

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

SOUHRN POSTUPU

Shrnutí postupu použitého během změny:

  • Nasaďte pět 200GB disků
  • Zastavit aplikační služby EPO
  • Zálohujte databázi EPO
  • Vytvořte novou skupinu souborů
  • Zkrácení událostí EPOEvents tabulky
  • Přesuňte události EPOEvents do nové skupiny souborů
  • Znovu vytvořit cizí klíče v podřízené tabulce
  • Skriptujte definici tabulky EPOEvents
  • Zálohujte databázi EPO
  • Zmenšit datové soubory v PRIMARY Filegroup
  • Zálohujte databázi EPO
  • Zrušte databázi EPO
  • Formátovat disk J
  • Obnovte databázi EPO pomocí MOVE
  • Přemístit TempDB na Drive Q
  • Spusťte aplikační služby EPO
  • Potvrďte, že jsou události EPOEvents naplněny

Nasaďte pět 200GB disků

Na server bylo nasazeno pět nových jednotek. Úplný seznam všech jednotek na serveru je následující:

DRIVE POUŽÍVAT NOVÉ? KOMENTÁŘ
C Systémový disk NE Výchozí velikost clusteru (4 kB)
D Disk aplikací NE Výchozí velikost clusteru (4 kB)
Data MSSQL (STARÉ) NE Výchozí velikost clusteru (4 kB)
J Protokol MSSQL NE Doporučená velikost clusteru pro SQL (64 kB)
M Data MSSQL (FG_LARGE FileGroup) ANO Doporučená velikost clusteru pro SQL (64 kB)
N Data MSSQL (FG_LARGE FileGroup) ANO Doporučená velikost clusteru pro SQL (64 kB)
O Data MSSQL (FG_LARGE FileGroup) ANO Doporučená velikost clusteru pro SQL (64 kB)
P Data MSSQL (PRIMARY FileGroup) ANO Doporučená velikost clusteru pro SQL (64 kB)
O MSSQL TempDB ANO Doporučená velikost clusteru pro SQL (64 kB)

Všechny nové disky byly naformátovány pomocí velikosti clusteru 64 kB, jak doporučuje společnost Microsoft pro disky obsahující data nebo soubory protokolu MS SQL Server[1]. Jednotka J byla také přeformátována po vytvoření zálohy databáze.

[1] Celá diskuse je dostupná na https://msdn.microsoft.com/en-us/library/dd758814.aspx

Zastavit aplikační služby EPO

Všechny aplikační služby byly zastaveny, aby se zajistila neaktualizace databáze po dobu změny. Aplikační služby zastavené (nebo potvrzené dolů) jsou následující:

  1. Aplikační server McAfee ePolicy Orchestrator 4.6.8
  2. McAfee ePolicy Orchestrator 4.6.8 analyzátor událostí
  3. Server McAfee ePolicy Orchestrator 4.6.8

Zálohujte databázi EPO

První záloha databáze byla provedena předtím, než byla provedena jakákoli akce na stávající struktuře, pomocí skriptu ve výpisu 2.

Výpis 2:První záloha databáze 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'

Vytvořte novou skupinu souborů

Nová skupina souborů s názvem FG_LARGE byla vytvořena pomocí ekvivalentu skriptu ve výpisu 3. Všechny soubory přidané do skupiny souborů byly definovány s počáteční velikostí 40 GB, přírůstkem 1G a maximální velikostí 100 GB.

Výpis 3:Vytvoření skupiny souborů 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

Zkrácení událostí EPOEvents tabulky

Výpis 4 ukazuje kompletní sadu úloh potřebných k úspěšnému zkrácení tabulky EPOEvents. Skript obsahuje poznámky pro srozumitelnost.

Základním problémem, který je třeba poznamenat, je, že není možné zkrátit tabulku, která se účastní jako nadřazená ve vztahu cizího klíče. Porušilo by to referenční integritu. Odstranění by fungovalo a zachovalo by referenční integritu, protože cizí klíče jsou obvykle definovány pomocí klauzulí ON DELETE CASCADE nebo ON DELETE SET NULL.

Výpis 4:Zkrácení tabulky událostí EPOEvents a přemístění do nového tabulkového prostoru

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

Přesuňte události EPOEvents do nové skupiny souborů

Tabulka EPOEvents byla přesunuta do skupiny souborů FG_LARGE pomocí skriptu ve výpisu 5.

Výpis 5:Přesouvání skupiny souborů 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

Znovu vytvořit cizí klíče v podřízených tabulkách

Cizí klíče na podřízených tabulkách identifikované v kroku 4.1.5 byly znovu vytvořeny pomocí skriptu ve výpisu 6.

Výpis 6:Zkrácení tabulky událostí EPOEvents a přemístění do nové skupiny souborů

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

Skriptujte definici tabulky EPOEvents

Jako záloha to bylo ideální pro skriptování výpisu DDL tabulky EPOEvents. To bylo provedeno kliknutím pravým tlačítkem myši a výběrem možnosti Tabulka skriptu jako> VYTVOŘIT do> Nové okno editoru dotazů z Průzkumníka objektů SSMS[1]. Výsledný skript lze uložit do .sql soubor.

Zálohujte databázi EPO

Druhá záloha databáze EPO byla pořízena se skriptem ve výpisu 7 pro přípravu na další fázi (zmenšení datového souboru).

Výpis 7:Druhá záloha databáze 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'

Zmenšit datové soubory v PRIMARY Filegroup

Zmenšení je nezbytné pro znovuzískání místa uvolněného zkrácením tabulky EPOEvents. V tomto případě to bylo také zásadní, protože datové soubory vyžadovaly přemístění na menší disk.

Datové soubory byly přemístěny z disku I – 3 TB disku na disk P, 200 GB disku.

Tři datové soubory v PRIMARY Filegroup byly logicky pojmenovány ePO4_SVR-EPO-01 (~300 GB), ePO4_SVR-EPO-02 (~500 GB) a ePO4_SVR-EPO-03 (~400 GB).

Cílem bylo zmenšit všechny soubory na 40 000 MB každý. Úloha vyžadovala pět až sedm iterací, z nichž každá odstranila 50 000 MB.

Výpis 8:Zmenšování datových souborů v PRIMARY Filegroup

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

Zálohujte databázi EPO

Druhá záloha databáze EPO byla pořízena pomocí skriptu v Výpis 5 připravit se na další fázi (vyřazení stávající databáze). Skript se nachází v Výpisu 9 .

Výpis 9:První záloha databáze 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'

Zrušte databázi EPO

Databáze byla odstraněna pomocí GUI SSMS – klikněte na databázi pravým tlačítkem myši a z rozbalovací nabídky vyberte možnost „smazat“. Ekvivalentní SQL je v výpisu 10 .

Výpis 10:Zrušte databázi EPO

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

Formátovat disk J

Tento krok naformátuje jednotku J pomocí velikosti clusteru 64 kB, jak doporučuje společnost Microsoft pro optimální výkon I/O. Tato úloha byla dříve provedena na nových jednotkách nasazených v kroku 4.1.1.

Obrázek 3 ukazuje volbu vybranou v dialogovém okně Formát….

Obnovte databázi EPO pomocí MOVE

Operace obnovení byla nezbytná ze tří důvodů:

  1. Pro formátování jednotky J obsahující soubory protokolu transakcí (jak je uvedeno výše).
  2. Chcete-li odstranit jakoukoli fragmentaci způsobenou operací zmenšování.
  3. Přemístit databázi na nové disky.

Skript v Zápisu 11 slouží k obnově. Všimněte si, že sada záloh použitá pro toto obnovení je poslední záloha pořízená v kroku 4.1.8. Všimněte si také, že možnost MOVE slouží k přemístění datových souborů v PRIMARY Filegroup na jednotku P.

Výpis 11:Zrušte databázi 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'

Přemístit TempDB na Drive Q

Pro optimální výkon velkých databází se také doporučuje umístit soubory TempDB na vyhrazený disk.

Pomocí skriptu ve výpisu 9 byla TempDB přemístěna na jednotku Q. Všimněte si, že během této operace byly odstraněny nadbytečné datové soubory TempDB. Počet datových souborů TempDB by měl odpovídat počtu fyzických CPU dostupných pro SQL Server.

Výpis 12:Přemístit 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

Spusťte aplikační služby EPO

Všechny aplikační služby byly spuštěny po potvrzení instance SQL Server v pořádku. Spuštěné aplikační služby jsou následující:

  1. Aplikační server McAfee ePolicy Orchestrator 4.6.8
  2. McAfee ePolicy Orchestrator 4.6.8 analyzátor událostí
  3. Server McAfee ePolicy Orchestrator 4.6.8

Potvrďte, že tabulky jsou vyplněny

Skript uvádí 13 potvrzuje, že tabulka EPOEvents a podřízené tabulky jsou po dokončení celého procesu naplněny.

Výpis 13:Přemístit 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;

POSLAT ÚKOLY ZMĚNY

Shrnutí úkolů po změně

1 Úloha Custom_Purge EPO Events byl vytvořen, aby udržoval počet událostí zachycených během 100 dnů. Je zásadní zajistit, aby tato práce byla vždy úspěšná.

2 Nadměrný prostor dříve přidělený databázovému serveru EPO lze získat zpět, zejména disk I – aktuálně 1 TB.

3 Úloha zálohování Custom_Daily_Backup vznikl během změny. Zálohy provedené touto úlohou vyřadí sady záloh do I:/MSSQL/Backup/ . Pokud bude jednotka I odebrána ze systému, je nezbytné tuto cestu změnit. Tyto zálohy je také nutné uchovat podle zásad skupinového zálohování.

PŘÍLOHY

PŘÍLOHA I

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

PŘÍLOHA II

JOB CUSTOM_PURGE EPO UDÁLOSTI

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. Je možné spustit řetězec v MySQL?

  2. Provádění více SQL dotazů v jednom příkazu pomocí PHP

  3. Jak mohu získat výpis postgres databáze ve formátu prostého textu na heroku?

  4. Jak funguje TRY_CAST() na serveru SQL