SQLShackを使用したSQLデータベースの整合性チェックの自動化

SQLデータベースの整合性チェックは、データベース管理者にとって最も重要かつ重要なタスクの1つです。 データベースの整合性タスクは、すべてのデータベースオブジェクトとインデックスの構造的整合性と割り当てをチェックします。 整合性チェックは、DBCC CheckDBコマンドを使用して実行できます。 CheckDBコマンドは、データベース内の破損を識別するために使用されます。 このコマンドは、データベースに対して次の操作を実行します。

  1. すべてのテーブルとビューでDBCC CHECKTABLEを実行
  2. データベースでDBCC CHECKCATALOGを実行
  3. データベースでDBCC CHECKALLOCを実行
  4. service brokerデータを検証
  5. インデックス付きビューの内容を検証

通常、Dbaはデータベース内の破損を識別するカスタムスクリプトを作成します。 ただし、複数のデータベースで作業している場合は、DBCC CheckDBコマンドによって生成されたログを確認するのが面倒になります。 そのため、すべてのデータベースで実行されるSQLストアドプロシージャを作成し、一貫性エラーが見つかった場合は、詳細をDBAチームに送信します。

前回の記事”Windowsタスクスケジューラを使用したSQLデータベースのバックアップの自動化”では、SQL server express editionで復元されたSQLデータベースの完全および差分バッ この記事では、SQL Server express editionで作成されたSQLデータベースの整合性チェックを自動化する方法について説明します。 実証するために、ここからサンプルデータベースをダウンロードしました。 SQL Server Express editionをインストールし、次のコマンドを使用してデータベースを復元しました:

1
2
3
4
5
6
7

USE
GO
RESTORE DATABASE FROM DISK=N’C:\SQL バックアップ\Democorruptmetadata2008R2.BAK’
WITH FILE=1,
N’Democorruptmetadata’をN’に移動しますC:\Program ファイル\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\DemoCorruptMetadata.mdf’,
N’Democorruptmetadata_Log’をN’に移動します。C:\Program ファイル\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\Democorruptmetadata_Log.ldf’,
NOUNLOAD,STATS= 5

データベースが復元されたら、dbcc CheckDBコマンドを実行してエラーを表示しましょう。

1
2
3
4
5

set nocount on
GO
use master
GO
dbcc checkdb(DemoCorruptMetadata)with all_errormsgs,no_infomsgs

SQLデータベースの整合性エラー

上の図に示すように、データベースが破損しており、整合性チェックコマンドでエラーが報告されています。 整合性チェックを実行するために、

  1. すべてのSQLデータベースで整合性チェックを実行し、整合性エラーが見つかった場合は、それらのエラーを一時テーブル
  2. :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85

    USE master
    GO
    CREATE PROCEDURE Sp_db_integrity_check
    AS
    BEGIN
    DECLARE @DBName VARCHAR(150)
    DECLARE @dbcccommand NVARCHAR(max)
    DECLARE @DBcount INT
    DECLARE @i INT = 0
    CREATE TABLE #errormsgs
    (
    error INT NULL,
    level INT NULL,
    state INT NULL,
    messagetext VARCHAR (7000) NULL,
    repairlevel INT NULL,
    status INT NULL,
    dbid INT NULL,
    dbfragid INT NULL,
    objectid INT NULL,
    indexid INT NULL,
    partitionid INT NULL,
    allocunitid INT NULL,
    riddbid INT NULL,
    ridpruid INT NULL,
    INT NULL,
    page INT NULL,
    slot INT NULL,
    refdbid INT NULL,
    refpruid INT NULL,
    reffile INT NULL,
    refpage INT NULL,
    refslot INT NULL,
    allocation INT NULL,
    )
    CREATE TABLE #userdatabases
    (
    (500)
    )
    #userdatabases
    に挿入sysから名前
    を選択します。データベース
    ここでdatabase_id> 4
    SET@DBcount=(Select Count(1)
    FROM#userdatabases)
    WHILE(@DBcount>@i)
    BEGIN
    SET@DBName=(SELECT TOP1NAME
    FROM#userdatabases)
    SET@dbcccommand=’dbcc CHECKDB(‘+@DBNAME
    +’)with no_infomsgs,all_errormsgs,tableresults’
    insert into#errormsgs
    EXEC(‘DBCC CHECKDB(‘+@DBNAME+
    ‘)with no_infomsgs,all_errormsgs,tableresults’)
    #userdatabasesから削除
    where name= @DBName
    SET@i=@i+1
    END
    DROP TABLE#userdatabases
    END
    –Select MessageText from#errormsgs
    DECLARE@subject NVARCHAR(max)
    DECLARE@tableHTML nvarchar(max)
    set@subject=’サーバーのデータベース一貫性チェックレポート: ‘
    + @@サーバー名
    SET@tableHTML=
    ‘ <html><Body><style type=”text/css”>table{font-size:9.0pt;font-family:verdana;text-align:left;}tr{text-align:left;}h3{display:block;font-size:15.0pt;font-size:15.0pt;}h3{display:block;font-size:15.0pt;}h3{display:block;font-size:15.0pt;}h3{display:block;font-size:15.0pt;}h3{display:block;font-size:; font-weight:bold;font-family:verdana;text-align:left; }</style><H3>サーバー上のデータベース一貫性チェックの要約’
    + @@サーバー名+'</H3>’+N'<テーブルの境界線=”1″>’
    + N'<tr><th>MessageText</th><th>破損したデータベース</th></tr>’
    + Cast((SELECT Isnull(messagetext,”)AS’TD’,”,Isnull(
    Db_Name(dbid),”)AS’TD’,”,Isnull(repairlevel,”)AS’TD’
    ,”FROM#errormsgs FOR xml path(‘tr’),root)AS NVARCHAR(
    max))
    EXEC msdb..Sp_send_dbmail
    @profile_name=’DBMailProfile’,
    @recipients=’ni*********[email protected]’,
    @subject=@subject,
    @importance=’High’,
    @body=@tableHTML,
    @body_format=’HTML’;

    ご存知のように、SQL Server Express editionではデータベースメールはサポートされていませんが、T-SQLクエリを使用してデータベースメールを構成できます。 この記事”SQL Server Express editionでのデータベースメールの構成”を読んで、プロセスを詳細に理解することができます。

    SQL Server Express editionはSQL Serverエージェントをサポートしていないため、Windowsタスクschedularを使用します。 Windows schedularはバッチファイルを実行できるため、SQLCMDコマンドを使用してストアドプロシージャを実行するバッチファイルを作成しました。 バッチファイルのコードは次のとおりです。

    1
    sqlcmd-S Nisarg-PC\SQLExpress-Q”sp_db_integrity_checkを実行する”-D DBATools

    テキストエディタでコマンドを指定し、ファイルを*として保存します。batファイル。 次に、windows task schedularを使用してタスクを作成しましょう。 コントロールパネルを開きます管理者ツールを開きますタスクスケジューラを開きます。 タスクschedularで、基本タスクの作成をクリックします。 最初の画面で、タスクの名前と説明を指定します。

    基本タスク画面の作成

    基本タスク画面の作成

    データベースの整合性チェックは毎週実行する必要がありますので、タスクトリガー画面でweeklyを指定します。

    タスクトリガー画面

    タスクトリガー画面

    スクリプトは毎週日曜日の午前1:00に実行される必要があるため、開始テキストボックスに01:00:00を指定します。 ジョブは毎週1回実行する必要があるため、Recur every textboxに1を指定します。 曜日のリストから日曜日を選択します。

    週間スケジュール設定画面

    週間スケジュール設定画面

    データベースの破損を確認するバッチスクリプトを実行しているので、アクション画面でプログラムの開始オプションを選

    タスクアクション画面

    タスクアクション画面

    スタート画面で、バッチファイルのフルパスを指定します。 ディレクトリを参照してファイルを見つけることができます。 私たちの場合、バッチファイルはCで作成されています:\DatabaseScriptsなので、バッチファイルのフルパスを提供しました。 スケジュールを作成したユーザーは、バッチファイルが作成されたディレクトリに対する読み取り/書き込みアクセス権を持っている必要があります。 [次へ]をクリックします。

    プログラム起動画面

    プログラムの起動画面

    概要画面では、作成したタスクの詳細を確認できます。 完了をクリックします。

    概要画面

    概要画面

    タスクschedularウィンドウでタスクを表示できます。 次に、構成されたタスクをテストしましょう。 これを行うには、Check Database integrityを右クリックし、Runをクリックします。 または、右のパンから”実行”という名前のリンクをクリックします。

    タスク履歴の表示

    整合性チェックプロセスが開始されます。

    DBCC CheckDBプロセスが開始されます

    プロセスは正常に完了しました。 タスクschedularのタスク履歴タブから詳細を確認できます。

    タスク実行履歴

    破損したSQLデータベースを復元したため、データベースの整合性エラーのメールが届きました。 メールは次の画像のようになります。

    整合性エラーメール

    概要

    この記事では、Windowsタスクschedularでスケジュールされたバッチスクリプトを使用してデータベースの破損を識別する方法を説明しました。 この記事は、sql server express editionで作成または復元されたSQLデータベースのデータベース保守タスクを自動化するエントリレベルのデータベース管理者に役立ちます。 次回の記事では、WINDOWSタスクスケジューラを使用してSQL Server express editionで作成されたSQLデータベースのインデックスメンテナンスを自動化する方法を学習します。 お楽しみに!

    • 著者
    • 最近の投稿
    ニサルグ-ウパディヤイ
    Nisarg Upadhyayは、SQL Serverデータベース管理者であり、SQL Server管理で8年以上の経験を持ち、Oracle10gデータベース管理で2年以上の経験を持つMicrosoft認定プロフェッショナルです。
    データベース設計、パフォーマンスチューニング、バックアップとリカバリ、HAとDRのセットアップ、データベースの移行とアップグレード 彼はGanpat大学からB.Techを完了しました。 彼はnisargupadhyay87@outlookに到達することができます。com(コムコム)

    ニサルグ-ウパディヤイ
    Nisarg Upadhyayによる最新の投稿(すべてを見る)
    • 表をSQLデータベースの別のファイルグループに移動する方法-2021年12月14日
    • Oracle19c用のODBCドライバの構成-2021年12月9日
    • ODBCドライバを使用したSQL ServerとPostgreSQLの間のリンクサーバーの構成-2021年12月14日6, 2021

Write a Comment

メールアドレスが公開されることはありません。