sql >> データベース >  >> RDS >> Database

職場での遭遇:特大のデータベースからスペースを取り戻す

    はじめに

    このドキュメントは、2015年4月22日から2015年4月23日までの間に本番データベースで実行されたメンテナンスの背後にある手順、スクリプト、およびイデオロギーを記録します。詳細はアプリケーションに固有ですが、原則は本番環境で同様の操作を行う必要がある他のユーザーに役立つ場合があります。 。

    背景

    データベースは、テーブル EPOEventsで1.44TBを超えるまでに成長しました。 このサイズの半分以上(792GB)を消費します。過去に、このテーブルの90日以上前のエントリを削除するための努力がなされてきました。残念ながら、それは無駄であることがわかりました。これを達成するためにスケジュールされたジョブは、どのセッションでも完了できませんでした。その理由は、データベースのパフォーマンスが低いことでした。

    話し合いの結果、 EPOEvents全体を削除することが決定されました。 それを切り捨てることによってテーブル。さらなる決定は、将来予想されるデータの増加に備えてデータベースを正しく準備することでした。

    問題のデータベースサーバーの詳細は以下のとおりです。

    サーバー名 SVR-EPO-02
    インスタンス名 SVR-EPO-02 \ ENG_AVSERVER
    OSバージョン Windows 2008 R2 Enterprise(SP1)64ビット
    DBバージョン Microsoft SQL Server 2008 R2(SP1)64ビット
    IPアドレス XX.XX.XX.XX
    データベース名 ePO4_SVR-EPO-02

    EPOEVENTSテーブル

    EPOEventsを定義するスクリプト 表は付録Iに記載されています。

    このテーブルのAutoID列は、テーブルHIP8_EventInfo、HIP8_IPSEventParameter、およびSCOR_EVENTSと外部キーの関係にあることに注意してください。これは、EPOEventsテーブルの切り捨てに使用されるアプローチに影響しました。要約の詳細は以下の表にあります:

    この情報は、リスト1のステートメントを使用して抽出されました。

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

    手順の概要

    変更中に使用された手順の概要:

    • 200GBドライブを5台配備する
    • EPOアプリケーションサービスを停止する
    • EPOデータベースをバックアップする
    • 新しいファイルグループを作成する
    • テーブルEPOイベントを切り捨てる
    • EPOEventsを新しいファイルグループに移動します
    • 子テーブルで外部キーを再作成する
    • EPOEventsテーブル定義のスクリプトを作成する
    • EPOデータベースをバックアップする
    • PRIMARYファイルグループのデータファイルを縮小する
    • EPOデータベースをバックアップする
    • EPOデータベースを削除します
    • フォーマットドライブJ
    • MOVEを使用してEPOデータベースを復元する
    • TempDBをドライブQに再配置
    • EPOアプリケーションサービスを開始する
    • EPOEventsが入力されていることを確認します

    200GBドライブを5台配備する

    5台の新しいドライブがサーバーにデプロイされました。サーバー上のすべてのドライブの完全なリストは次のとおりです。

    DRIVE 使用 NEW? コメント
    C システムドライブ いいえ デフォルトのクラスターサイズ(4KB)
    D アプリケーションドライブ いいえ デフォルトのクラスターサイズ(4KB)
    MSSQLデータ(OLD) いいえ デフォルトのクラスターサイズ(4KB)
    J MSSQLログ いいえ SQLの推奨クラスターサイズ(64K)
    M MSSQLデータ(FG_LARGEファイルグループ) はい SQLの推奨クラスターサイズ(64K)
    N MSSQLデータ(FG_LARGEファイルグループ) はい SQLの推奨クラスターサイズ(64K)
    O MSSQLデータ(FG_LARGEファイルグループ) はい SQLの推奨クラスターサイズ(64K)
    P MSSQLデータ(PRIMARY FileGroup) はい SQLの推奨クラスターサイズ(64K)
    Q MSSQL TempDB はい SQLの推奨クラスターサイズ(64K)

    すべての新しいドライブは、MS SQL Serverデータまたはログファイルを含むドライブに対してMicrosoftが推奨するように、64Kクラスターサイズを使用してフォーマットされました[1]。ドライブJも、データベースのバックアップを取った後、再フォーマットされました。

    [1]完全なディスカッションには、https://msdn.microsoft.com/en-us/library/dd758814.aspx

    からアクセスできます。

    EPOアプリケーションサービスを停止する

    変更期間中にデータベースが更新されないようにするために、すべてのアプリケーションサービスが停止されました。停止した(またはダウンしたことが確認された)アプリケーションサービスは次のとおりです。

    1. McAfee ePolicyOrchestrator4.6.8アプリケーションサーバー
    2. McAfee ePolicyOrchestrator4.6.8イベントパーサー
    3. McAfee ePolicyOrchestrator4.6.8サーバー

    EPOデータベースのバックアップ

    リスト2のスクリプトを使用して、既存の構造に対してアクションが実行される前に、データベースの最初のバックアップが作成されました。

    リスト2:ePO4_SVR-EPO-02データベースの最初のバックアップ

    BACKUP DATABASE [ePO4_SVR-EPO-02] to
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A01.bak',
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A02.bak',
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A03.bak',
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A04.bak',
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A05.bak',
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A06.bak',
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A07.bak',
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A08.bak',
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A09.bak',
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A10.bak'
    WITH STATS = 5, COMPRESSION, NAME = N'ePO4_SVR-EPO-02 First Backup Before Purge'

    新しいファイルグループを作成する

    リスト3のスクリプトと同等のFG_LARGEという新しいファイルグループが作成されました。ファイルグループに追加されたすべてのファイルは、初期サイズ40GB、増分1G、最大サイズ100GBで定義されました。

    リスト3:ファイルグループFG_LARGEの作成

    USE [master]
    GO
    ALTER DATABASE [ePO4_SVR-EPO-02] ADD FILEGROUP [FG_LARGE]
    GO
    
    USE [master]
    GO
    ALTER DATABASE [ePO4_SVR-EPO-02] ADD FILE ( NAME = N'ePO4_SVR-EPO_FG_LARGE_01', FILENAME = N'M:\MSSQL\DATA\ePO4_SVR-EPO_FG_LARGE_01.ndf' , SIZE = 41943040KB , MAXSIZE = 104857600KB , FILEGROWTH = 1048576KB ) TO FILEGROUP [FG_LARGE]
    GO
    ALTER DATABASE [ePO4_SVR-EPO-02] ADD FILE ( NAME = N'ePO4_SVR-EPO_FG_LARGE_02', FILENAME = N'M:\MSSQL\DATA\ePO4_SVR-EPO_FG_LARGE_02.ndf' , SIZE = 41943040KB , MAXSIZE = 104857600KB , FILEGROWTH = 1048576KB ) TO FILEGROUP [FG_LARGE]
    GO
    ALTER DATABASE [ePO4_SVR-EPO-02] ADD FILE ( NAME = N'ePO4_SVR-EPO_FG_LARGE_03', FILENAME = N'N:\MSSQL\DATA\ePO4_SVR-EPO_FG_LARGE_03.ndf' , SIZE = 41943040KB , MAXSIZE = 104857600KB , FILEGROWTH = 1048576KB ) TO FILEGROUP [FG_LARGE]
    GO
    ALTER DATABASE [ePO4_SVR-EPO-02] ADD FILE ( NAME = N'ePO4_SVR-EPO_FG_LARGE_04', FILENAME = N'N:\MSSQL\DATA\ePO4_SVR-EPO_FG_LARGE_04.ndf' , SIZE = 41943040KB , MAXSIZE = 104857600KB , FILEGROWTH = 1048576KB ) TO FILEGROUP [FG_LARGE]
    GO
    ALTER DATABASE [ePO4_SVR-EPO-02] ADD FILE ( NAME = N'ePO4_SVR-EPO_FG_LARGE_05', FILENAME = N'O:\MSSQL\DATA\ePO4_SVR-EPO_FG_LARGE_05.ndf' , SIZE = 41943040KB , MAXSIZE = 104857600KB , FILEGROWTH = 1048576KB ) TO FILEGROUP [FG_LARGE]
    GO
    ALTER DATABASE [ePO4_SVR-EPO-02] ADD FILE ( NAME = N'ePO4_SVR-EPO_FG_LARGE_06', FILENAME = N'O:\MSSQL\DATA\ePO4_SVR-EPO_FG_LARGE_06.ndf' , SIZE = 41943040KB , MAXSIZE = 104857600KB , FILEGROWTH = 1048576KB ) TO FILEGROUP [FG_LARGE]
    GO

    テーブルEPOイベントを切り捨てる

    リスト4は、EPOEventsテーブルを正常に切り捨てるために必要なタスクの完全なセットを示しています。スクリプトには、わかりやすくするためのメモが含まれています。

    注意すべき基本的な問題は、外部キー関係に親として参加しているテーブルを切り捨てることができないことです。参照整合性に違反します。外部キーは通常、ONDELETECASCADEまたはONDELETESET NULL句で定義されるため、削除は機能し、参照整合性を維持します。

    リスト4:EPOEventsテーブルの切り捨てと新しいテーブルスペースへの再配置

    /****** Check Foreign Keys Referencing EPOEvents ******/
    
    USE [ePO4_SVR-EPO-02]
    GO
    EXEC sp_fkeys 'EPOEvents'
    
    
    /****** Script Identified Foreign Keys ******/
    
    USE [ePO4_SVR-EPO-02]
    GO
    
    ALTER TABLE [dbo].[HIP8_IPSEVENTPARAMETER]  WITH CHECK ADD  CONSTRAINT [FK_HIP8_IPSEVENTPARAMETER_EPOEVENTS] FOREIGN KEY([EVENTID])
    REFERENCES [dbo].[EPOEVENTS] ([AUTOID])
    ON DELETE CASCADE
    GO
    
    ALTER TABLE [dbo].[HIP8_IPSEVENTPARAMETER] CHECK CONSTRAINT [FK_HIP8_IPSEVENTPARAMETER_EPOEVENTS]
    GO
    
    
    USE [ePO4_SVR-EPO-02]
    GO
    
    ALTER TABLE [dbo].[HIP8_EVENTINFO]  WITH CHECK ADD  CONSTRAINT [FK_HIP8_EVENTINFO_EPOEVENTS] FOREIGN KEY([EVENTID])
    REFERENCES [dbo].[EPOEVENTS] ([AUTOID])
    ON DELETE CASCADE
    GO
    
    ALTER TABLE [dbo].[HIP8_EVENTINFO] CHECK CONSTRAINT [FK_HIP8_EVENTINFO_EPOEVENTS]
    GO
    
    USE [ePO4_SVR-EPO-02]
    GO
    
    ALTER TABLE [dbo].[SCOR_EVENTS]  WITH CHECK ADD  CONSTRAINT [SCOR_EVENTS_EPO_EVENTS] FOREIGN KEY([EPO_EVENT_AUTO_ID])
    REFERENCES [dbo].[EPOEVENTS] ([AUTOID])
    ON UPDATE CASCADE
    ON DELETE CASCADE
    GO
    
    ALTER TABLE [dbo].[SCOR_EVENTS] CHECK CONSTRAINT [SCOR_EVENTS_EPO_EVENTS]
    GO
    
    /****** Backup the Child Tables ******/
    
    USE [ePO4_SVR-EPO-02]
    GO
    SELECT * INTO HIP8_IPSEVENTPARAMETER_BAK FROM HIP8_IPSEVENTPARAMETER;
    SELECT * INTO HIP8_EVENTINFO_BAK FROM HIP8_EVENTINFO;
    SELECT * INTO SCOR_EVENTS_BAK FROM SCOR_EVENTS;
    GO
    
    /****** Truncate Child Tables ******/
    
    USE [ePO4_SVR-EPO-02]
    GO
    TRUNCATE TABLE HIP8_IPSEVENTPARAMETER;
    TRUNCATE TABLE HIP8_EVENTINFO;
    TRUNCATE TABLE SCOR_EVENTS;
    
    /****** Drop Foreign Keys ******/
    
    USE [ePO4_SVR-EPO-02]
    GO
    ALTER TABLE HIP8_IPSEVENTPARAMETER DROP CONSTRAINT [FK_HIP8_IPSEVENTPARAMETER_EPOEVENTS];
    ALTER TABLE HIP8_EVENTINFO DROP CONSTRAINT [FK_HIP8_EVENTINFO_EPOEVENTS];
    ALTER TABLE SCOR_EVENTS DROP CONSTRAINT [SCOR_EVENTS_EPO_EVENTS];
    
    /***** Truncate EPOEvents Table ******/
    
    
    USE [ePO4_SVR-EPO-02]
    GO
    TRUNCATE TABLE EPOEVENTS;

    EPOイベントを新しいファイルグループに移動

    リスト5のスクリプトを使用して、EPOEventsテーブルをFG_LARGEファイルグループに移動しました。

    リスト5:EPOEventsファイルグループFG_LARGEの移動

    /***** Move EPOEvents to the New Filegroup FG_LARGE ******/
    -- This is achieved by recreating the Clustered Index used by Primary Key on this table
    -- First Step is to Script the Clustered Index
    
    USE [ePO4_SVR-EPO-02]
    GO
    ALTER TABLE [dbo].[EPOEvents] ADD  CONSTRAINT [PK_EPOEvents_AutoID] PRIMARY KEY CLUSTERED 
    (
    	[AutoID] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    GO
    
    -- Second Step is to drop and recreate the Clustered Index after changing
    -- the Filegroup the Script (observe the ON Clause in the create statement below:
    -- Filegroup was previously PRIMARY and is now FG_LARGE)
    
    -- Drop Statement
    USE [ePO4_SVR-EPO-02]
    GO
    ALTER TABLE [dbo].[EPOEvents] DROP  CONSTRAINT [PK_EPOEvents_AutoID] 
    
    -- Create Statement
    USE [ePO4_SVR-EPO-02]
    GO
    ALTER TABLE [dbo].[EPOEvents] ADD  CONSTRAINT [PK_EPOEvents_AutoID] PRIMARY KEY CLUSTERED 
    (
    	[AutoID] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [FG_LARGE]
    GO

    子テーブルで外部キーを再作成

    手順4.1.5で特定された子テーブルの外部キーは、リスト6のスクリプトを使用して再作成されました。

    リスト6:EPOEventsテーブルの切り捨てと新しいファイルグループへの再配置

    USE [ePO4_SVR-EPO-02]
    GO
    
    ALTER TABLE [dbo].[HIP8_IPSEVENTPARAMETER]  WITH CHECK ADD  CONSTRAINT [FK_HIP8_IPSEVENTPARAMETER_EPOEVENTS] FOREIGN KEY([EVENTID])
    REFERENCES [dbo].[EPOEVENTS] ([AUTOID])
    ON DELETE CASCADE
    GO
    
    ALTER TABLE [dbo].[HIP8_IPSEVENTPARAMETER] CHECK CONSTRAINT [FK_HIP8_IPSEVENTPARAMETER_EPOEVENTS]
    GO
    
    ALTER TABLE [dbo].[HIP8_EVENTINFO]  WITH CHECK ADD  CONSTRAINT [FK_HIP8_EVENTINFO_EPOEVENTS] FOREIGN KEY([EVENTID])
    REFERENCES [dbo].[EPOEVENTS] ([AUTOID])
    ON DELETE CASCADE
    GO
    
    ALTER TABLE [dbo].[HIP8_EVENTINFO] CHECK CONSTRAINT [FK_HIP8_EVENTINFO_EPOEVENTS]
    GO
    
    ALTER TABLE [dbo].[SCOR_EVENTS]  WITH CHECK ADD  CONSTRAINT [SCOR_EVENTS_EPO_EVENTS] FOREIGN KEY([EPO_EVENT_AUTO_ID])
    REFERENCES [dbo].[EPOEVENTS] ([AUTOID])
    ON UPDATE CASCADE
    ON DELETE CASCADE
    GO
    
    ALTER TABLE [dbo].[SCOR_EVENTS] CHECK CONSTRAINT [SCOR_EVENTS_EPO_EVENTS]
    GO

    EPOEventsテーブル定義のスクリプト

    バックアップとして、EPOEventsテーブルのDDLの抽出をスクリプト化するのに理想的でした。これは、右クリックしてオプション Script Table as> CREATE To> New Query Editor Windowを選択することで実行されました。 SSMS[1]オブジェクトエクスプローラーから。結果のスクリプトは、 .sqlに保存できます。 ファイル。

    EPOデータベースのバックアップ

    次の段階(データファイルの縮小)に備えるために、リスト7のスクリプトを使用してEPOデータベースの2番目のバックアップを作成しました。

    リスト7:EPOデータベースの2番目のバックアップ

    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'

    PRIMARYファイルグループのデータファイルを縮小する

    EPOEventsテーブルを切り捨てて解放されたスペースを再利用するには、縮小が必要です。この場合、データファイルをより小さなドライブに再配置する必要があるため、これも重要でした。

    データファイルはドライブIから再配置されました– 3 TBドライブからドライブP、200GBドライブへ。

    PRIMARYファイルグループ内の3つのデータファイルは、論理的に ePO4_SVR-EPO-01という名前が付けられました。 (〜300GB)、 ePO4_SVR-EPO-02 (〜500GB)、および ePO4_SVR-EPO-03 (〜400GB)。

    目標は、すべてのファイルをそれぞれ40000MBに縮小することでした。タスクには5〜7回の反復が必要であり、それぞれが50000MBを削除しました。

    リスト8: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

    EPOデータベースのバックアップ

    EPOデータベースの2番目のバックアップは、リスト5のスクリプトを使用して作成されました。 次の段階の準備をします(既存のデータベースを削除します)。スクリプトはリスト9にあります 。

    リスト9:ePO4_SVR-EPO-02データベースの最初のバックアップ

    BACKUP DATABASE [ePO4_SVR-EPO-02] TO
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E01.bak',
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E02.bak',
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E03.bak',
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E04.bak',
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E05.bak',
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E06.bak',
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E07.bak',
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E08.bak',
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E09.bak',
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E10.bak'
    WITH STATS = 5, COMPRESSION, NAME = N'ePO4_SVR-EPO-02 Backup After Shrink'

    EPOデータベースを削除します

    SSMS GUIを使用してデータベースを削除しました。データベースを右クリックし、ドロップダウンメニューから[削除]オプションを選択します。同等のSQLはリスト10にあります 。

    リスト10:EPOデータベースを削除する

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

    フォーマットドライブJ

    この手順では、最適なI / OパフォーマンスのためにMicrosoftが推奨するように、64Kクラスターサイズを使用してドライブJをフォーマットします。このタスクは、以前はステップ4.1.1でデプロイされた新しいドライブで実行されていました。

    図3は、[フォーマット...]ダイアログボックスで選択されたオプションを示しています。

    MOVEを使用してEPOデータベースを復元する

    復元操作が必要だった理由は次の3つです。

    1. トランザクションログファイルを含むドライブJをフォーマットするには(上記のように)。
    2. 縮小操作によって引き起こされた断片化を取り除くため。
    3. データベースを新しいドライブに再配置します。

    リスト11のスクリプト 復元に役立ちます。この復元に使用されるバックアップセットは、手順4.1.8で作成された最後のバックアップであることに注意してください。また、MOVEオプションは、PRIMARYファイルグループ内のデータファイルをドライブPに再配置するのに役立つことに注意してください。

    リスト11:EPOデータベースを削除する

    RESTORE DATABASE [ePO4_SVR-EPO-02] FROM
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E01.bak',
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E02.bak',
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E03.bak',
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E04.bak',
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E05.bak',
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E06.bak',
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E07.bak',
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E08.bak',
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E09.bak',
    DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E10.bak'
    WITH STATS = 5,
    MOVE 'ePO4_SVR-EPO-02' TO 'P:\MSSQL\DATA\ePO4_SVR-EPO-02.mdf',
    MOVE 'ePO4_SVR-EPO-01' TO 'P:\MSSQL\DATA\ePO4_SVR-EPO-01.ndf',
    MOVE 'ePO4_SVR-EPO-03' TO 'P:\MSSQL\DATA\ePO4_SVR-EPO-03.ndf'

    TempDBをドライブQに再配置

    大規模なデータベースのパフォーマンスを最適化するには、専用ドライブにTempDBファイルを配置することもお勧めします。

    リスト9のスクリプトを使用して、TempDBをドライブQに再配置しました。この操作中に、冗長なTempDBデータファイルが削除されたことに注意してください。 TempDBデータファイルの数は、SQLServerで使用可能な物理CPUの数と一致する必要があります。

    リスト12:TempDBの再配置

    -- Drop unnecessary TempDB files
    -- The following script was run several times and required several restarts of the -- SQL instance
    
    USE [tempdb]
    GO
    ALTER DATABASE [tempdb]  REMOVE FILE [tempdev_xx]
    GO
    
    
    -- Relocate TempDB files
    
    USE master;
    GO
    ALTER DATABASE tempdb 
    MODIFY FILE (NAME = tempdev, FILENAME = 'Q:\MSSQL\DATA\tempdev.mdf');
    GO
    ALTER DATABASE tempdb 
    MODIFY FILE (NAME = tempdev_01, FILENAME = 'Q:\MSSQL\DATA\tempdev_01.mdf');
    GO
    ALTER DATABASE  tempdb 
    MODIFY FILE (NAME = templog, FILENAME = 'J:\MSSQL\LOG\templog.ldf');
    GO
    
    -- Restart SQL Server
    -- Confirm the location of TempDB files
    
    SELECT name as 'File Name', physical_name as 'File Directory'
    FROM sys.master_files
    WHERE database_id = DB_ID('tempdb');
    GO

    EPOアプリケーションサービスを開始する

    SQL Serverインスタンスが正常であることが確認されると、すべてのアプリケーションサービスが開始されました。開始されたアプリケーションサービスは次のとおりです。

    1. McAfee ePolicyOrchestrator4.6.8アプリケーションサーバー
    2. McAfee ePolicyOrchestrator4.6.8イベントパーサー
    3. McAfee ePolicyOrchestrator4.6.8サーバー

    テーブルにデータが入力されていることを確認する

    スクリプトはリスト13で、プロセス全体が完了した後、テーブルEPOEventsと子テーブルにデータが入力されていることを確認しています。

    リスト13:TempDBの再配置

    USE [ePO4_SVR-EPO-02]
    GO
    SELECT COUNT(*) EPOEvents_CNT FROM EPOEvents;
    SELECT COUNT(*) HIP8_EventInfo_CNT FROM HIP8_EventInfo;
    SELECT COUNT(*) HIP8_IPSEventParameter_CNT FROM HIP8_IPSEventParameter;
    SELECT COUNT(*) SCOR_EVENTS_CNT FROM SCOR_EVENTS;

    変更タスクの投稿

    変更後のタスクの概要

    1ジョブCustom_PurgeEPOイベント 100日以内にキャプチャされたイベントの数を維持するために作成されました。この仕事が常に成功するようにすることが重要です。

    2以前にEPOデータベースサーバーに割り当てられていた余分なスペース、特にドライブI(現在は1 TB)を再利用できます。

    3バックアップジョブCustom_Daily_Backup 変更中に作成されました。このジョブによって作成されたバックアップは、バックアップセットを I:/ MSSQL / Backup /にドロップします。 。ドライブIをシステムから削除する場合は、このパスを変更する必要があります。また、グループバックアップポリシーに従ってこれらのバックアップを保存する必要があります。

    付録

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

    付録II

    JOBCUSTOM_PURGEEPOイベント

    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. SQLiteのUnixタイムスタンプから日付/時刻を取得する

    2. Dictionary <string、int>をストアドプロシージャT-SQLに渡します

    3. Spring Integrationとは何ですか?

    4. Oracleでregexp_replaceによってコンマ区切りのリストから重複を削除するにはどうすればよいですか?