SqlServer插入数据不报错但查询不到数据

问题背景

近日,某使用SqlServer作为数据库的系统,由于服务器磁盘损坏修复后,部分数据一直无法入库,进一步跟踪收集现象,发现以下特点:

  • 这些数据抽取出来使用SQL直接入库,没有提示数据影响行数,数据库无法查询到这部分数据;
  • JDBC入库返回影响行数为-2;
  • 仅有部分数据无法入库,其他数据正常;

解决过程

根据现象通过搜索引擎查询类似情况,由于某些未知原因,难以查找到类似情况。
根据服务器异常时间点和系统时间点存在重合,假设数据库存在异常,以此反推查找证据,发现SqlServer存在dbcc命令可以检查数据库的表、数据库等,使用dbcc命令检查异常表如下:

DBCC CHECKTABLE('test_tb')
[42000] [Microsoft][SQL Server Native Client 10.0][SQL Server]表错误: 对象 ID 1467204327,索引 ID 1,分区 ID 72057594143178752,分配单元 ID 72057594181779456 (类型为 In-row data)。B 树链链接不匹配。(1:1348087)->next = (1:18684),但 (1:18684)->Prev = (1:1348146)(8936)
[42000] [Microsoft][SQL Server Native Client 10.0][SQL Server]表错误: 对象 ID 1467204327,索引 ID 1,分区 ID 72057594143178752,分配单元 ID 72057594181779456 (类型为 In-row data)。B 树链链接不匹配。(1:1348086)->next = (1:1065444),但 (1:1065444)->Prev = (1:1348148)(8936)
[42000] [Microsoft][SQL Server Native Client 10.0][SQL Server]表错误: 对象 ID 1467204327,索引 ID 1,分区 ID 72057594143178752,分配单元 ID 72057594181779456 (类型为 In-row data)。页 (1:1348148) 缺少上一页 (1:1348086) 对它的引用。可能是链链接有问题。 (8978)
[42000] [Microsoft][SQL Server Native Client 10.0][SQL Server]表错误: 对象 ID 1467204327,索引 ID 1,分区 ID 72057594143178752,分配单元 ID 72057594181779456 (类型为 In-row data)。页 (1:1348146) 缺少上一页 (1:1348087) 对它的引用。可能是链链接有问题。 (8978)
[01000] [Microsoft][SQL Server Native Client 10.0][SQL Server]test_tb的 DBCC 结果。 (2536)
[01000] [Microsoft][SQL Server Native Client 10.0][SQL Server]对象 'test_tb'409103 页中有 2629508 行。 (2593)
[01000] [Microsoft][SQL Server Native Client 10.0][SQL Server]CHECKTABLE 在表 'test_tb' (对象 ID 1467204327)中发现 0 个分配错误和 4 个一致性错误。 (8990)
[01000] [Microsoft][SQL Server Native Client 10.0][SQL Server]对于由 DBCC CHECKTABLE (Station_qh.dbo.test_tb)发现的错误,repair_rebuild 是最低的修复级别。 (8958)
[01000] [Microsoft][SQL Server Native Client 10.0][SQL Server]DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。 (2528)

根据上述信息,得到数据库异常的确切证据,根据dbcc命令提示进行修复后,异常消除。

吐槽

最后不得不专门增加章节吐槽现在的搜索引擎,想搜索资料解决问题越来越难。

你可能感兴趣的:(java,数据库相关,sqlserver,mssever,dbcc)