问题标签 [dbcc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
618 浏览

sql-server - dbcc checkdb cause my Availability Group to failover

During maintenance plan on primary node of an Availability group, a client database has been found corrupted... After some investigation: SQL SERVER generate its DUMP STACK, this cause sql instance to freeze and the Availability group try to failover. This cause 10 minute of connection issue...

Is this the correct scenario for a maintenace plan on a Always on Availability groups?

Some logs below:

Thanks in advance!

0 投票
0 回答
143 浏览

sql-server - 重新播种数据库中的所有表时,身份种子在 0 和 1 之间混合

**更新(2017 年 5 月 18 日)**

我发现问题并没有我想象的那么大。这仅在部署模式后发生,并且在初始阶段迁移错误。唯一需要部署模式的情况是新数据库是否有新的或修改。然后,一旦迁移工具开始,它必须成功填充整个数据库(大约需要 20 分钟),因此错误数 * 完成所需的时间 = 修复所有错误的总时间,这可能需要几个小时。但是,如果这种情况发生,那就有点令人不安了。如果迁移成功,并且没有对架构进行任何修改,那么下面的场景就不会麻烦了。这些修改不会经常发生,可能每月一次或两次。不过,我仍然对其他类型的解决方案感兴趣。

**原始帖子(2017 年 5 月 17 日)**

我已经查看了以下相关的 Stack Overflow 问题,但没有人回答我正在经历的问题。

为什么在 SQL Server 2008 R2 中设置当前标识值对我不起作用?

无法截断表,因为它被 FOREIGN KEY 约束引用?

背景故事

我的任务是迁移数据库,涉及表的重组,确保它具有数据完整性,并简化架构。本次迁移由c#应用程序执行,调用存储过程,添加业务逻辑等。每天早上5点,有一个任务调度器清空除审计表之外的所有数据,并取回所有刷新的数据(如果原数据已更新)。迁移工具是幂等的,这样可以删除和重新创建数据库,运行迁移工具后一切恢复正常(有刷新数据)。此外,迁移工具首先通过引用表导入相关数据,以确保不会发生违反约束的情况,并且它还会选择那些索引 ID,而不是任何旧的遗留 ID。每个表也有 IDENTITY (1,1)

为了确保刷新数据库,我必须执行 DELETE FROM 操作。截断表不起作用,因为会违反外键约束。所以我这样做的方式是关闭约束,从数据中删除,重新打开约束,然后重新设置值。

所以当我的程序运行时,它会执行以下几行:

但是,如果数据库实例是全新安装的,并且我运行迁移工具并出现错误,则会出现问题,因为某些表不会被填充。由于少数表插入了记录,而其他表没有插入记录;这意味着,如果我在迁移工具中再次运行上述代码,插入记录的表的下一个种子值将是 ID=1,而未触及表的种子值将为空(并且第一个插入将从 ID=0 开始)。这是因为这会覆盖 IDENTITY (1,1)。如果我要在没有插入记录的表上运行 DBCC CHECKIDENT,例如

您会得到以下信息:

检查身份信息:当前身份值“NULL”,当前列值“NULL”。

无论您做什么,都不能将身份值“NULL”重新设置为任何其他数字。

这成为一个严重的问题,因为每次迁移工具运行时,我都会遇到外键约束违规,因为引用的表中不存在某些索引。这也有一个多米诺骨牌效应,如果一个表的索引不正确(ID = 0),所有引用该表的表都将违反约束 - 跳过导入,并且这些表上的索引将是 ID = 0 以及下一个我们运行迁移工具的时间。

HACK 解决方案:

我希望所有表都从 ID=1 开始,而不是 0。所以到目前为止,确保它运行的唯一可能方法是从干净的状态中清除数据库(删除并重新创建),评论去掉上面的四个命令代码,运行迁移工具,希望填充所有表成功,回到代码,取消注释四个命令代码,将工具部署到任务调度器中。

问题

有什么方法DBCC CHECKIDENT可以返回我的 c# 应用程序可以识别的值,或者可能找到/忽略所有尚未插入的表,以便我只能重新设置已插入的表?或者我应该尝试跟踪运行了哪些表,并查看迁移工具是否可以在下次运行时忽略这些表?如果是这种情况,那么最好的方法是什么?

0 投票
1 回答
71 浏览

sql-server - SQL Server 数据页中缺少字节

不知道如何正确调用标题。但是,我试图了解数据页的存储方式。我创建了简单的表:

然后我通过以下命令获得了 PageFID 和 PagePID:

然后是实际的数据页:

所以现在我看到了:

插槽 0 偏移量 0x60 长度 21

记录类型 = PRIMARY_RECORD 记录属性 = NULL_BITMAP
记录大小 = 21

内存转储@0x000000287DD7A060

0000000000000000: 10001200 01000000 61736461 73642020 20200200 ........ asdasd .. 0000000000000014: 00
.

插槽 0 列 1 偏移量 0x4 长度 4 长度(物理) 4

编号 = 1

插槽 0 列 2 偏移量 0x8 长度 10 长度(物理) 10

v = asdasd

插槽 1 偏移量 0x75 长度 21

记录类型 = PRIMARY_RECORD 记录属性 = NULL_BITMAP
记录大小 = 21

内存转储@0x000000287DD7A075

0000000000000000: 10001200 01000000 61736461 73642020 20200200 ........ asdasd .. 0000000000000014: 00
.

插槽 1 列 1 偏移量 0x4 长度 4 长度(物理) 4

编号 = 1

插槽 1 列 2 偏移量 0x8 长度 10 长度(物理) 10

v = asdasd

插槽 2 偏移量 0x8a 长度 21

记录类型 = PRIMARY_RECORD 记录属性 = NULL_BITMAP
记录大小 = 21

内存转储@0x000000287DD7A08A

0000000000000000: 10001200 01000000 61736461 73642020 20200200 ........ asdasd .. 0000000000000014: 00

所以记录的长度是 21 字节。但是 INT 是 4 个字节,而 CHAR(10) 是 10 个字节。4+10=14。其他 7 个字节的用途是什么?

0 投票
1 回答
77 浏览

sql-server - Sql Server 页面结构。什么是 Fdata 长度?

我试图了解 Sql Server 数据页的结构。这是 Dmitri Korotkevitch 的 Pro SQL Server Internals 的屏幕截图, 在此处输入图像描述 我创建了 3 个表:

  1. 1 个 INT 列
  2. 2 个 INT 列
  3. 4 个 INT 列

所有列都不为空

然后我跑

并获得以下 Fdata 长度值:

  1. 带 1 列 - 0800 = 0008 = 8 = 4 + 1x4
  2. 有 2 列 - 0c00 = 00c0 = 12 = 4 + 2x4
  3. 有 4 列 - 1400 = 0014 = 20 = 4 + 4x4

在这里,我列出了“输出中的值”=“交换值”=“十进制值”

已编辑:据我了解,它是 Const_4 + Nbr_of_Columns * Size_Of_Columns。这个 Const_4 是什么?

0 投票
1 回答
982 浏览

sql-server - 没有空列时设置空位图

我正在学习 PAGE 结构,目前我被困在 NULL 位图上。

所以目前没有 NULL 值,让我们看看 DBCC 信息:

在此处输入图像描述 所以我对以下部分感兴趣 30000800 01000000 03005002

  • 30 - 比特A
  • 00 - 位 B
  • 0800 - F数据长度
  • 01000000 - 固定数据 (ID = 1)
  • 0300 - 列数
  • 50 - 空位图

为什么是 50 而不是 00?记录中没有 NULL 值...

0 投票
4 回答
12610 浏览

sql-server - DBCC CHECKIDENT(myTable, RESEED,1) 从 2 重新播种

在 SQL Server 2012 中,以下查询从 2 而不是 1 为标识列设定种子myTable_id。为什么?myTable_id也是PK。

备注

  1. 插入的数据是对的,唯一的问题是新插入的数据是从2而不是1开始的。
  2. 在上面的 sql 代码中,如果我DBCC CHECKIDENT(myTable, RESEED,0)正确使用标识列从 1 开始。
  3. 以下是该myTable_id列在 SSMS 中的快照:

在此处输入图像描述

0 投票
1 回答
757 浏览

sql-server - DBCC CheckDb - 在 VB.NET 中获取 sql 消息

我正在使用此代码检查我的数据库是否存在错误:

但是,你看,这个命令只生成 SQL 消息。

有什么方法可以检索 .net 中的消息?
我可以在 a 中显示消息MessageBox吗?

我研究过InfoMessage,但我仍然无法理解如何应用它/使用它。

0 投票
1 回答
237 浏览

sql-server - DBCC CheckDb-有什么方法可以检测vb.net的错误?

我正在使用以下代码检查我的数据库是否有任何问题/需要故障排除:

现在,该DBCC CHECKDB命令可能会产生如下结果:

CHECKDB found 0 allocation errors and 15 consistency errors in database 'mydb

可以修复以下 SQL 查询:

但是在通过我的应用程序执行以下查询之前,有没有办法知道是否DBCC CHECKDB真的返回了任何错误?因为没有任何错误,修复数据库将毫无用处……

有什么帮助吗?

我脑海中闪过的一个想法

我正在考虑将字符串从strBuilder文本框中获取。将检查文本框是否有以下行的可用性CHECKDB found 0 allocation errors and 15 consistency errors in database..

但这仍然是不可能的,因为那条线有时会有所不同。例如

CHECKDB found 0 allocation errors and 15 consistency errors

CHECKDB found 1 allocation errors and 14 consistency errors

有更好的主意吗?

0 投票
0 回答
115 浏览

sql-server - SQL Server:跟踪标志 5556 它是什么?

我在我们的生产服务器上运行了 tracestatus,发现 5556 跟踪标志已打开。

dbcc 结果

我搜索了网络和文档,但找不到它是什么。有谁知道它是干什么用的?

版本:Microsoft SQL Server 2016 (SP1),文件流打开。

0 投票
0 回答
1424 浏览

sql-server - MS SQL DBCC CHECKDB 页 ID (1:xxx) 包含不正确的页 ID

首先,是的,我知道有两个选项1)是恢复或2)运行允许数据丢失的DBCC。但我想了解究竟是什么损坏了以及可能的数据丢失是什么。从 DBCC CHECKDB 这些是唯一的错误


Msg 8909, Level 16, State 1, Line 1 Table error: Object ID 0, index ID -1, partition ID 0, alloc unit ID 0 (type Unknown), page ID (1:24694884) contains a wrong page ID in its页眉。页眉中的 PageId = (0:0)。Msg 8909, Level 16, State 1, Line 1 Table error: Object ID 0, index ID -1, partition ID 0, alloc unit ID 0 (type Unknown), page ID (1:24694885) contains a wrong page ID in its页眉。页眉中的 PageId = (0:0)。Msg 8909, Level 16, State 1, Line 1 Table error: Object ID 0, index ID -1, partition ID 0, alloc unit ID 0 (type Unknown), page ID (1:24694886) contains a wrong page ID in its页眉。页眉中的 PageId = (0:0)。消息 8909,级别 16,状态 1,第 1 行表错误:对象 ID 0,索引 ID -1,分区 ID 0,分配单元 ID 0(未知类型),页面 ID(1:24694887) 在其页眉中包含不正确的页 ID。页眉中的 PageId = (0:0)。消息 8939,级别 16,状态 5,第 1 行表错误:对象 ID 0,索引 ID -1,分区 ID 0,分配单元 ID 0(未知类型),页面 (1:24694888)。测试 (m_headerVersion == HEADER_7_0) 失败。值为 0 和 1。消息 8939,级别 16,状态 6,第 1 行表错误:对象 ID 0,索引 ID -1,分区 ID 0,分配单元 ID 0(类型未知),页面 (1:24694888)。测试 ((m_type >= DATA_PAGE && m_type <= UNDOFILE_HEADER_PAGE) || (m_type == UNKNOWN_PAGE && level == BASIC_HEADER)) 失败。值为 0 和 0。消息 8939,级别 16,状态 7,第 1 行表错误:对象 ID 0,索引 ID -1,分区 ID 0,分配单元 ID 0(类型未知),页面 (1:24694888)。测试 (m_freeData >= PageHeaderOverhead () && m_freeData < = (UINT)PAGESIZE - m_slotCnt * sizeof (Slot)) 失败。值为 0 和 8192。Service Broker 消息 9675,状态 1:分析的消息类型:14.Service Broker 消息 9676,状态 1:分析的服务合同:6.Service Broker 消息 9667,状态 1:分析的服务:3.Service Broker 消息9668,状态 1:已分析服务队列:3. Service Broker Msg 9669,状态 1:已分析对话端点:0. Service Broker Msg 9674,状态 1:已分析对话组:0. Service Broker Msg 9670,状态 1:远程服务绑定已分析:0. Service Broker Msg 9605,状态 1:已分析对话优先级:0. CHECKDB 发现 0 个分配错误和 7 个与任何单个对象无关的一致性错误。


然后很好然后

消息 8978,级别 16,状态 1,行 1 表错误:对象 ID 1880468102,索引 ID 10,分区 ID 72057774144880640,分配单元 ID 72057774266253312(类型行内数据)。页面 (1:2720992) 缺少上一页 (1:24661767) 的引用。可能的连锁问题。消息 8978,级别 16,状态 1,行 1 表错误:对象 ID 1880468102,索引 ID 13,分区 ID 72057774145011712,分配单元 ID 72057774266384384(类型行内数据)。页面 (1:17132104) 缺少上一页 (1:24694888) 的引用。可能的连锁问题。消息 8939,级别 16,状态 98,第 1 行表错误:对象 ID 1880468102,索引 ID 10,分区 ID 72057774144880640,分配单元 ID 72057774266253312(行内数据类型),页面(1:24661767)。测试 (IS_OFF (BUF_IOERR, pBUF->bstat)) 失败。值为 133129 和 -4。消息 8928,第 16 级,状态 1,第 1 行对象 ID 1880468102,索引 ID 10,分区 ID 72057774144880640,分配单元 ID 72057774266253312(行内数据类型):无法处理页面 (1:24661767)。有关详细信息,请参阅其他错误。消息 8976,级别 16,状态 1,行 1 表错误:对象 ID 1880468102,索引 ID 10,分区 ID 72057774144880640,分配单元 ID 72057774266253312(类型行内数据)。页面 (1:24661767) 未在扫描中看到,尽管其父 (1:2927950) 和前一个 (1:11145041) 引用它。检查任何以前的错误。消息 8939,级别 16,状态 98,第 1 行表错误:对象 ID 1880468102,索引 ID 1,分区 ID 72057774144749568,分配单元 ID 72057774266056704(类型行内数据),页面 (1:24694883)。测试 (IS_OFF (BUF_IOERR, pBUF->bstat)) 失败。值为 133129 和 -4。消息 8928,级别 16,状态 1,第 1 行对象 ID 1880468102,索引 ID 1,分区 ID 72057774144749568,分配单元 ID 72057774266056704(行内数据类型):无法处理页面 (1:24694883)。有关详细信息,请参阅其他错误。消息 8928,级别 16,状态 1,行 1 对象 ID 1880468102,索引 ID 1,分区 ID 72057774144749568,分配单元 ID 72057774266056704(行内数据类型):无法处理页面 (1:24694884)。有关详细信息,请参阅其他错误。消息 8928,级别 16,状态 1,行 1 对象 ID 1880468102,索引 ID 1,分区 ID 72057774144749568,分配单元 ID 72057774266056704(行内数据类型):无法处理页面 (1:24694885)。有关详细信息,请参阅其他错误。消息 8928,级别 16,状态 1,行 1 对象 ID 1880468102,索引 ID 1,分区 ID 72057774144749568,分配单元 ID 72057774266056704(行内数据类型):页面(1:24694886) 无法处理。有关详细信息,请参阅其他错误。消息 8928,级别 16,状态 1,行 1 对象 ID 1880468102,索引 ID 1,分区 ID 72057774144749568,分配单元 ID 72057774266056704(行内数据类型):无法处理页面 (1:24694887)。有关详细信息,请参阅其他错误。消息 8928,级别 16,状态 1,行 1 对象 ID 1880468102,索引 ID 13,分区 ID 72057774145011712,分配单元 ID 72057774266384384(行内数据类型):无法处理页面 (1:24694888)。有关详细信息,请参阅其他错误。消息 8976,级别 16,状态 1,行 1 表错误:对象 ID 1880468102,索引 ID 1,分区 ID 72057774144749568,分配单元 ID 72057774266056704(类型行内数据)。页面 (1:24694883) 未在扫描中看到,尽管其父级 (1:24696205) 和前一个 (1:24694882) 引用它。检查任何以前的错误。消息 8980,级别 16,状态 1,行 1 表错误:对象 ID 1880468102,索引 ID 1,分区 ID 72057774144749568,分配单元 ID 72057774266056704(类型行内数据)。索引节点页面 (1:24696205),插槽 57 引用子页面 (1:24694884) 和前一个子页面 (1:24694883),但没有遇到。消息 8980,级别 16,状态 1,行 1 表错误:对象 ID 1880468102,索引 ID 1,分区 ID 72057774144749568,分配单元 ID 72057774266056704(类型行内数据)。索引节点页面 (1:24696205),槽 58 引用子页面 (1:24694885) 和前一个子页面 (1:24694884),但没有遇到。消息 8980,级别 16,状态 1,行 1 表错误:对象 ID 1880468102,索引 ID 1,分区 ID 72057774144749568,分配单元 ID 72057774266056704(类型行内数据)。索引节点页面(1:24696205),插槽 59 指的是子页面 (1:24694886) 和上一个子页面 (1:24694885),但没有遇到它们。消息 8980,级别 16,状态 1,行 1 表错误:对象 ID 1880468102,索引 ID 1,分区 ID 72057774144749568,分配单元 ID 72057774266056704(类型行内数据)。索引节点页面 (1:24696205),插槽 60 指的是子页面 (1:24694887) 和前一个子页面 (1:24694886),但没有遇到。消息 8976,级别 16,状态 1,行 1 表错误:对象 ID 1880468102,索引 ID 13,分区 ID 72057774145011712,分配单元 ID 72057774266384384(类型行内数据)。虽然页面 (1:1) 的父 (1:2934717) 和上一个 (1:17132103) 引用了它,但在扫描中没有看到页面 (1:1)。检查任何以前的错误。消息 8978,级别 16,状态 1,第 1 行表错误:对象 ID 1880468102,索引 ID 1,分区 ID 72057774144749568,分配单元 ID 72057774266056704(键入行内数据)。页面 (1:24694920) 缺少上一页 (1:24694887) 的引用。可能的连锁问题。'tb_ExternSale' 的 DBCC 结果。对象“tb_ExternSale”的 2665693 页中有 96199140 行。CHECKDB 在表“tb_ExternSale”(对象 ID 1880468102)中发现 0 个分配错误和 19 个一致性错误。

--

第一部分的页面指的是 tb_ExternSale 表存在问题的相同页面。假设 tb_ExternSale 数据是唯一具有数据等损坏的数据是否正确?是否可以识别行?

谢谢帕维尔