DBCC CheckDBでエラーを発生させる方法を知っている人はいますか?私はスクリプトをテストしていて、エラーを返すために、最も簡単なモードでDBCC Checkdbが必要です。修復しようとしているときや、シングルユーザーモードにしようとしているときも...
使用しているシンプルなdbcc checkdbコマンドは、バッチファイルの一部であり、次のとおりです。
OSQL -S MYPC -E -d MyDB -l 10 -Q "DBCC CHECKDB(AG_DB_STORESQL)" -b -o c:\MyFolder\MSSQL_DB_CHECK.Log
エラーが見つからない場合、スクリプトは終了します。エラーが見つかった場合、スクリプトはREPAIR_REBUILDオプションを使用してエラーを修正しようとし、失敗した場合、スクリプトはREPAIR_ALLOW_DATA_LOSSオプションを使用してエラーを修正しようとします。明らかに、スクリプトを修復しようとする前に、DBをシングルユーザーモードにしようとします(これもエラートラップです)。
したがって、私が探しているのは、DBCC CheckDBがエラーを返すようにする方法です。
DBCC CheckDBでエラーを発生させる方法を知っている人はいますか?
lethaldbcc writepage ({'dbname' | dbid}, fileid, pageid, offset, length, data [, directORbufferpool])
ON a TEST(NON- PROD)の完全なサンドボックス環境
DBCC WRITEPAGEの目的は次のとおりです。
- DBCC CHECKDBの自動テストとSQL Serverチームによる修復を可能にするため。
- デモやテストのために破損を設計するため。
- ライブの破損したデータベースを手動で編集することにより、最後のディザスタリカバリを可能にします。
"The Guru"とは別に Paul Randal 、 @ SteveStedman は優れています 一連のデータベース破損の課題 (解決策あり-しかし、後で参照自分で対処してみてください)。
この目的でストアドプロシージャを作成できます。
CREATE PROCEDURE CheckDBRaiseError(@db varchar(255)) AS
SET NOCOUNT ON
IF OBJECT_ID('TEMPDB..#CheckDB') IS NOT NULL DROP TABLE #CheckDB
CREATE TABLE #CheckDB
([Error] int, [Level] int, [State] int,
[MessageText] varchar(7000), [RepairLevel] int, [Status] int,
[DbId] int, [ObjectID] int, [IndexId] int, [PartitionId] int,
[AllocUnitId] int, [File] int, [Page] int, [Slot] int,
[RefFile] int, [RefPage] int, [RefSlot] int, [Allocation] int);
INSERT INTO #CheckDB
EXEC ('DBCC CHECKDB('+@db+') WITH TABLERESULTS')
DECLARE @Result varchar(4000)
SELECT TOP 1 @Result = MessageText FROM #CheckDB WHERE MessageText LIKE 'CHECKDB%allocation errors%'
IF @Result NOT LIKE '%0 allocation errors and 0 con%'
RAISERROR('DBCC Error: %s', 20, 1, @Result) WITH LOG
次に、コマンドラインを次のように更新します
OSQL -S MYPC -E -d MyDB -l 10 -Q "EXEC CheckDBRaiseError 'AG_DB_STORESQL'" -b -o c:\MyFolder\MSSQL_DB_CHECK.Log