有人知道我如何使DBCC CheckDB产生错误吗?我正在测试一个脚本,需要DBCC在最简单的模式下返回一个错误,同时尝试修复和尝试进入单用户模式.
我使用的简单dbcc checkdb命令thant是批处理文件的一部分,如下所示:
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返回错误的方法。
发布于 2016-04-14 12:17:06
保罗·兰德尔已经创建了方便的损坏演示脚本。这些真的很好,对你有很大的帮助。请浏览以下链接
发布于 2016-04-14 13:31:28
有人知道我如何使DBCC CheckDB产生错误吗?
在测试(非PROD)完全沙箱环境上使用致命性 dbcc writepage ({'dbname' | dbid}, fileid, pageid, offset, length, data [, directORbufferpool])。
DBCC WRITEPAGE的目的是:
除了“Guru”保罗·兰德尔之外,@SteveStedman还有一个很好的数据库腐败的一系列挑战 (有解决方案--但是当您尝试自己解决这个问题时,请稍后参考它)。
发布于 2016-04-14 02:28:48
您可以为此目的创建一个存储产品:
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.Loghttps://dba.stackexchange.com/questions/135195
复制相似问题