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

SQLServerでのデータベーステストの復元の自動化

    この記事では、データベースサーバーとデータベースの管理を担当するDBAまたはインフラストラクチャチームによって手動で実行されることが多いデータベース復元プロセスの自動化について説明します。

    この記事では、データベースのバックアップや復元などのデータベース管理タスクを自動化して、本番データベースの一貫性と信頼性を維持することの重要性についても説明します。

    さらに、実際のシナリオでデータベース復元タスクの自動化を計画および実装する方法に関するヒントがいくつかあります。

    データベーステストの復元とCheckDB(DBAパースペクティブ)

    データベース管理者またはインフラストラクチャチーム(データベースサーバー管理を担当)の観点から見たSQL Serverデータベースのバックアップと復元の重要性は、バックアップと復元を実行するだけではありません。これは、ディザスタリカバリ戦略(DR)は適切に実施されています。

    これは、データベースのバックアップと復元の操作が、他の整合性チェッカーメカニズムによってサポートされている場合、より効果的であることも意味します。

    DBCCCHECKDBコマンドの使用

    SQL Serverには、データベースの整合性をチェックするための便利なコマンドが用意されています。

    Microsoftのドキュメントによると、DBCC CHECKDBコマンドは、さまざまな操作を実行することにより、データベース内のすべてのオブジェクトの論理的および物理的な整合性をチェックするために使用されます。

    エラーなしでコマンドが正常に実行されたことは、データベースが安定した一貫性のある状態にあることを示しています。

    このコマンドは、目的のデータベースが接続されていれば、次のように簡単に実行できます。

    データベーステストの復元シナリオ

    DBAが本番データベースのバックアップを一貫して作成している実際のシナリオを考えてみましょう。

    ただし、バックアップを作成しても、データベースが正常に復元されない限り、DRとも呼ばれるデータベースのディザスタリカバリが実施されているとは限りません。

    したがって、データベースインシデントが発生した場合にデータを正常に復元できるようにするには、データベースをバックアップから復元する必要があります。

    本番データベースのバックアップは、テスト目的で本番サーバーに復元しないでください。

    では、DBAはどのようにしてバックアップがすべて正常であることを確認するのでしょうか。データベースの最新のバックアップを別のテストサーバーに復元するだけです。

    データベースのバックアップが正常に復元されたら、DBCC CHECKDBコマンドを実行して、復元されたデータベースの整合性と安定性を確認する必要があります。

    これは重要ですが時間のかかる作業であり、多くの注意が必要です。理想的には、組織の規則や規制によってこの特定のタスクの自動化が制限されていない限り、自動化する必要があります。

    データベーステストの復元の自動化

    次に、データベーステストの復元を自動化する方法を詳しく見ていきましょう。

    データベーステストの復元の計画

    ステップを簡単に自動化できるように、ステップを計画することが非常に重要です。計画では、SQLタスクの自動化の前提条件を満たす必要もあります。

    前提条件

    従来の方法を使用してSQLServerでデータベースの復元タスクを自動化する前に、次の前提条件が満たされていることを確認してください。

    1. 自動化は組織の規則や規制と競合しません
    2. このタスクを自動化する権限があります
    3. SQLエージェントが実行されています
    4. 復元が行われるデータベースサーバーが稼働している必要があります
    5. データベースのバックアッププロセスはすでに自動化されており、バックアップはバックアップドライブに送信されます
    6. バックアップドライブにはテストサーバーからアクセスできます

    手順の概要

    1. データベースのバックアップはサーバー上で実行されます
    2. このバックアップは、別のテストサーバーからアクセスできるバックアップドライブに保存されます
    3. バックアップの復元を実行するSQLジョブがテストサーバーでスケジュールされています
    4. 一度実行したSQLジョブの後に、復元されたデータベースでDBCC CheckDBを手動で実行できますが、自動化することもできます

    参考記事

    データベースバックアップタスクがすでに自動化されており、テストサーバーからアクセスできるバックアップドライブにバックアップが保存されていることを前提としているため、データベースバックアップタスクを自動化するには、SQLServerタスクの自動化の基本の記事を参照してください。

    データベースバックアップタスクの複製

    バックアップタスクが実行され、バックアップドライブにバックアップが作成されたと仮定します。

    このタスクを複製するために、 UniversityV7というサンプルデータベースを作成します。 次のように:

    -- (1) Create the UniversityV7 sample database
    CREATE DATABASE UniversityV7;
    GO
    
    USE UniversityV7
    
    CREATE TABLE [dbo].[Student] (
        [StudentId] INT           IDENTITY (1, 1) NOT NULL,
        [Name]      VARCHAR (30)  NULL,
        [Course]    VARCHAR (30)  NULL,
        [Marks]     INT           NULL,
        [ExamDate]  DATETIME2 (7) NULL,
        CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED ([StudentId] ASC)
    );
    GO
    
    INSERT INTO [dbo].[Student]
               ([Name]
               ,[Course]
               ,[Marks]
               ,[ExamDate])
         VALUES
               ('Asif'
               ,'Power BI Fundamentals'
               ,85
               ,'01 Jan 2019'),
    		   ('Mike'
               ,'Power BI Fundamentals'
               ,80
               ,'01 Jan 2019'),
    		   ('Sadaf'
               ,'Power BI Fundamentals'
               ,75
               ,'01 Jan 2019')
    		   
    GO

    このスクリプトを実行すると、サンプルデータベースが作成され、データが入力されます。

    次のスクリプトを実行してデータベースを確認します。

    SELECT [StudentId]
          ,[Name]
          ,[Course]
          ,[Marks]
          ,[ExamDate]
      FROM [UniversityV7].[dbo].[Student]

    出力は次のようになります。

    バックアップタスクが自動化されていると仮定しましょう。ただし、この手順をスキップするには、データベースバックアップを手動で作成し、テストサーバーからアクセスできるバックアップドライブに保存する必要があります。

    次のT-SQLスクリプトを実行して、データベースのバックアップタスクを複製します。

    -- Backup the UniversityV7 sample database using the date stamp
    DECLARE @BackupName VARCHAR(100)
    SET @BackupName=CONCAT('C:\Backup\UniversityV7-',FORMAT(GETDATE(),'yyyy-MM-dd'),'.bak')
    BACKUP DATABASE UniversityV7 TO [email protected] WITH COMPRESSION, INIT;
    GO

    データベースバックアップチェック

    バックアップを作成したフォルダに移動してデータベースのバックアップを確認し、バックアップファイルを表示します。

    別のSQLインスタンスに接続する

    次に、別のSQLインスタンスに接続して、テストサーバーをエミュレートしましょう。最初に確認するのは、SQLエージェントが実行されているかどうかです。

    SQLエージェントを起動します(実行されていない場合)

    SQLServerエージェントを右クリックします 開始をクリックします 以下に示すように:

    新しいジョブを作成する

    次に、ジョブを右クリックします 、[新しいジョブ…]をクリックします 次に、ジョブ名を「 Database Test Restore」と入力します。 」:

    次に、ステップを選択します 左側のナビゲーションメニューで、[新規]をクリックします 、 次に、「データベーステストの復元」と入力します。 ステップ名として「」:

    対応するドロップダウンリストでT-SQLタイプが選択されていることを確認した後、[コマンド]入力ボックスに次のT-SQLスクリプトを入力します。

    -- Restore the UniversityV7 sample database 
    RESTORE DATABASE UniversityV7 FROM DISK=N'C:\Backup\UniversityV7-2019-08-27.bak'
    WITH
    MOVE 'UniversityV7' TO 'C:\Program Files\Microsoft SQL Server\MSSQL12.SQLTAB\MSSQL\DATA\UniversityV7_Data.mdf',
    MOVE 'UniversityV7_Log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL12.SQLTAB\MSSQL\DATA\UniversityV7_Log.ldf'
    ,RECOVERY,REPLACE,STATS=10;
    GO

    パスC:\ Program Files \ Microsoft SQL Server \ MSSQL12.SQLNAME \ MSSQL \ DATA\UniversityV7_Data.mdfがで提供されていることに注意してください。 このスクリプト はデモのみを目的としています。 Y これをに置き換える必要があります 実際 テストSQLサーバーインスタンスのパス。

    最後に、[OK]をクリックします。

    ジョブを2分で実行するようにスケジュールします

    データベーステストの復元を右クリックします ジョブの下のジョブ プロパティ:をクリックします

    新規をクリックします 、 2分ごと(テスト)」と入力します 」、2分後に実行するようにスケジュールを設定します:

    数分後、テストサーバーに接続し、データベースを展開します UniversityV7であることを確認するノード データベースは、自動化されたSQL Serverタスク(ジョブ)によって正常に復元されました。

    DBCC CheckDBを自由に実行して、データベースの復元プロセスがすべて正常であることを確認してください。

    おめでとう!データベーステストの復元プロセスの自動化に成功しました。

    やるべきこと

    データベースのバックアップとテストの復元を自動化できるようになったので、スキルを向上させるために次のタスクを完了してみてください。

    1. 自動データベース復元プロセスの一部としてDBCCCheckDBを追加します
    2. あるサーバーでバックアップを自動化し、別のテストサーバーで復元する
    3. データベースのバックアップを自動化し、複数のデータベースの復元タスクをテストします


    1. androidsqliteで呼び出されないアップグレードメソッドについて

    2. DSTのためにOracleの日付比較が壊れています

    3. sarの防衛(およびそれを構成する方法)

    4. SQLiteREPLACEステートメント