SQLデータベースの整合性チェックは、データベース管理者にとって最も重要かつ重要なタスクの1つです。 データベースの整合性タスクは、すべてのデータベースオブジェクトとインデックスの構造的整合性と割り当てをチェックします。 整合性チェックは、DBCC CheckDBコマンドを使用して実行できます。 CheckDBコマンドは、データベース内の破損を識別するために使用されます。 このコマンドは、データベースに対して次の操作を実行します。
- すべてのテーブルとビューでDBCC CHECKTABLEを実行
- データベースでDBCC CHECKCATALOGを実行
- データベースでDBCC CHECKALLOCを実行
- service brokerデータを検証
- インデックス付きビューの内容を検証
通常、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データベースで整合性チェックを実行し、整合性エラーが見つかった場合は、それらのエラーを一時テーブル
- :
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485USE masterGOCREATE PROCEDURE Sp_db_integrity_checkASBEGINDECLARE @DBName VARCHAR(150)DECLARE @dbcccommand NVARCHAR(max)DECLARE @DBcount INTDECLARE @i INT = 0CREATE 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> 4SET@DBcount=(Select Count(1)FROM#userdatabases)WHILE(@DBcount>@i)BEGINSET@DBName=(SELECT TOP1NAMEFROM#userdatabases)SET@dbcccommand=’dbcc CHECKDB(‘+@DBNAME+’)with no_infomsgs,all_errormsgs,tableresults’insert into#errormsgsEXEC(‘DBCC CHECKDB(‘+@DBNAME+‘)with no_infomsgs,all_errormsgs,tableresults’)#userdatabasesから削除where name= @DBNameSET@i=@i+1ENDDROP TABLE#userdatabasesEND–Select MessageText from#errormsgsDECLARE@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コマンドを使用してストアドプロシージャを実行するバッチファイルを作成しました。 バッチファイルのコードは次のとおりです。
1sqlcmd-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をクリックします。 または、右のパンから”実行”という名前のリンクをクリックします。
整合性チェックプロセスが開始されます。
プロセスは正常に完了しました。 タスク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