CREATE UNIQUE INDEX 语句终止 有重复的键 修复

本文讲述了一个MSSQL 2008R2数据库故障案例,数据库大小26GB,因服务器问题导致很多表错误,DBCC命令无法完全修复。客户要求恢复数据使HISERP可直接使用,最终使用极佳SQL数据库物理修复工具配合DBCC完成修复,半小时内数据库快速上线,并指出此类故障常见原因。

数据类型 MSSQL 2008R2

数据大小 26 GB

故障检测 服务器出问题,导致数据库很多表错误 DBCC 命令无法修复。
消息 1505,级别 16,状态 1,第 1 行
因为发现对象名称 'dbo.tbCICostDetail' 和索引名称 'PK_tbCICostDetail_1' 有重复的键,所以 CREATE UNIQUE INDEX 语句终止。重复的键值为 (18305247)。
消息 1505,级别 16,状态 1,第 1 行
因为发现对象名称 'dbo.tbCICostDetail' 和索引名称 'PK_tbCICostDetail_1' 有重复的键,所以 CREATE UNIQUE INDEX 语句终止。重复的键值为 (18305247)。
tbCICostDetail的 DBCC 结果。
修复: 已为数据库 'ytDHP1' 中的对象 'dbo.tbCICostDetail, CT_tbCICostDetail_fq' 成功地重新生成了 Nonclustered 索引。
消息 8945,级别 16,状态 1,第 1 行
表错误: 将重新生成对象 ID 1817109564,索引 ID 1。
        无法修复此错误。
消息 8978,级别 16,状态 1,第 1 行
表错误: 对象 ID 1817109564,索引 ID 1,分区 ID 72057594200719360,分配单元 ID 72057594260553728 (类型为 In-row data)。页 (1:129918) 缺少上一页 (1:398304) 对它的引用。可能是链链接有问题。
        该错误已修复。
消息 8976,级别 16,状态 1,第 1 行
表错误: 对象 ID 1817109564,索引 ID 1,分区 ID 72057594200719360,分配单元 ID 72057594260553728 (类型为 In-row data)。在扫描过程中未发现页 (1:398304),但该页的父级 (1:163564) 和上一页 (1:333611) 都引用了它。请检查以前的错误消息。
        该错误已修复。
消息 8945,级别 16,状态 1,第 1 行
表错误: 将重新生成对象 ID 1817109564,索引 ID 2。
        无法修复此错误。
消息 8945,级别 16,状态 1,第 1 行
表错误: 将重新生成对象 ID 1817109564,索引 ID 3。
        该错误已修复。
对象 'tbCICostDetail' 的 170942 页中有 2858499 行。
CHECKTABLE 在表 'tbCICostDetail' (对象 ID 1817109564)中发现 0 个分配错误和 2 个一致性错误。
CHECKTABLE 在表 'tbCICostDetail' (对象 ID 1817109564)中修复了 0 个分配错误和 2 个一致性错误。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

客户要求 恢复数据库数据 修复好 HISERP可直接使用。

修复结果 文件传来后 使用极佳SQL数据库物理修复工具修正配合DBCC  修复数据库, 安装ERP测试,恢复后的数据库完全使用,没有任何问题。

半小时内修复OK 数据库快速上线。

 

此类故障一般是由于 数据库断电 非法关机 脏页未释放 磁盘问题导致。注意防范

 

posted on 2018-06-20 01:36  极佳数据库 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/SQL110/p/9201873.html

Msg 512, Level 16, State 1, Server 10_0_24_9, Procedure sp_sdm_bom_many_select, Line 69 子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作达式时,这种情况是不允许的。 语句终止。 Procedure execution failed [21000] [Microsoft][SQL Server Native Client 10.0][SQL Server]子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作达式时,这种情况是不允许的。 (512) [01000] [Microsoft][SQL Server Native Client 10.0][SQL Server]语句终止。 (3621) WHILE @i < @arrayLength BEGIN SET @i = @i + 1; SET @result = REVERSE( SUBSTRING( REVERSE(SUBSTRING(@arrayStr, 1, CHARINDEX(',', @arrayStr + ',', @i) - 1)), 1, CHARINDEX(',', REVERSE(@arrayStr + ',')) ) ); SET @qty = REVERSE( SUBSTRING( REVERSE(SUBSTRING(@qtyNum, 1, CHARINDEX(',', @qtyNum + ',', @i) - 1)), 1, CHARINDEX(',', REVERSE(@qtyNum + ',')) ) ); SET @customer = REVERSE( SUBSTRING( REVERSE(SUBSTRING(@customers, 1, CHARINDEX(',', @customers + ',', @i) - 1)), 1, CHARINDEX(',', REVERSE(@customers + ',')) ) ); SET @keysByInfoSingle = REVERSE( SUBSTRING( REVERSE(SUBSTRING(@keysByInfo, 1, CHARINDEX(',', @keysByInfo + ',', @i) - 1)), 1, CHARINDEX(',', REVERSE(@keysByInfo + ',')) ) ); -- 定义 CTE WITH cte_sdm_bom_relation AS ( -- 定位点部分 SELECT matcode, matcode_parent, CAST(qty AS DECIMAL(18, 2)) AS qty, -- 显式转换为 DECIMAL(18, 2) unit FROM sdm_bom_relation UNION ALL -- 递归部分 SELECT u.matcode, u.matcode_parent, CAST(CAST(u.qty AS DECIMAL(18, 2)) * CAST(t.qty AS DECIMAL(18, 2)) AS DECIMAL(18, 2)) AS qty, -- 确保类型一致 u.unit FROM sdm_bom_relation u INNER JOIN cte_sdm_bom_relation t ON u.matcode_parent = t.matcode ) -- 使用 CTE 的查询 INSERT INTO @many_bom_result (keys_by_info, customer, rootcode, matcode, matcode_parent, qty, unit, spec, class_code) SELECT @keysByInfoSingle, @customer, @result, bom_list_res.matcode, bom_list_res.matcode_parent, bom_list_res.qty * CAST(@qty AS DECIMAL(18, 2)) AS qty, bom_list_res.unit, bom_list_res.spec, bom_list_res.class_code FROM ( SELECT matcode, matcode_parent, qty, unit, (SELECT spec FROM sbm_materiel m WHERE cte_sdm_bom_relation.matcode = m.matcode) AS spec, (SELECT classification_code FROM sbm_materiel m WHERE cte_sdm_bom_relation.matcode = m.matcode) AS class_code FROM cte_sdm_bom_relation ) AS bom_list_res; END
最新发布
03-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值