首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用DBCC CheckDb自动生成错误

使用DBCC CheckDb自动生成错误
EN

Database Administration用户
提问于 2016-04-13 17:26:14
回答 3查看 1.1K关注 0票数 5

有人知道我如何使DBCC CheckDB产生错误吗?我正在测试一个脚本,需要DBCC在最简单的模式下返回一个错误,同时尝试修复和尝试进入单用户模式.

我使用的简单dbcc checkdb命令thant是批处理文件的一部分,如下所示:

代码语言:javascript
复制
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返回错误的方法。

EN

回答 3

Database Administration用户

回答已采纳

发布于 2016-04-14 12:17:06

保罗·兰德尔已经创建了方便的损坏演示脚本。这些真的很好,对你有很大的帮助。请浏览以下链接

  • 损坏演示数据库和脚本
  • 使用DAC连接修复损坏的系统表
  • 各种服务器数据库损坏场景
票数 5
EN

Database Administration用户

发布于 2016-04-14 13:31:28

有人知道我如何使DBCC CheckDB产生错误吗?

在测试(非PROD)完全沙箱环境上使用致命性 dbcc writepage ({'dbname' | dbid}, fileid, pageid, offset, length, data [, directORbufferpool])

DBCC WRITEPAGE的目的是:

  • 允许对DBCC进行自动测试并由Server团队进行修复。
  • 为演示和测试设计腐败。
  • 通过手动编辑已损坏的数据库,允许进行最后的灾难恢复。

除了“Guru”保罗·兰德尔之外,@SteveStedman还有一个很好的数据库腐败的一系列挑战 (有解决方案--但是当您尝试自己解决这个问题时,请稍后参考它)。

票数 5
EN

Database Administration用户

发布于 2016-04-14 02:28:48

您可以为此目的创建一个存储产品:

代码语言:javascript
复制
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

然后将命令行更新为

代码语言:javascript
复制
OSQL -S MYPC -E -d MyDB -l 10 -Q "EXEC CheckDBRaiseError 'AG_DB_STORESQL'" -b -o c:\MyFolder\MSSQL_DB_CHECK.Log
票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/135195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档