酒店管理系统 服务器:消息 666,级别 16,状态 1,行 1 用于重复组的系统生成唯一值超过了最大值。除去并重新创建索引可能会解决该错误;否则可使用其他聚集索引。

【事件始末】

今接到某客户来电,反馈使用的 某酒店管理系统,很多年了,正版软件!

突然发现所有报表系统功能打不开!

打开提示酒店管理系统 服务器:消息 666,级别 16,状态 1,行 1 用于重复组的系统生成唯一值超过了最大值。除去并重新创建索引可能会解决该错误;否则可使用其他聚集索引。

不管是还原老旧备份,还是重装软件问题依旧,无法自己解决。求助软件代理商,代理商装模作样搞了几个小时。然后把数据拷贝回去了,说是要研究一段时间,看看数据库是哪里坏了。

客户查询报表结算账期,情况比较紧急,于是求助我们。

出于对客户的尊重,连夜加班研究了1-2小时,也总是圆满解决问题了。

【问题分析】

我查询了SQL SERVER错误字典,发现微软SQL官方解释文档 并无此错误。

此错误极有可能是软件开发商伪造假装SQL内部报错,程序内 必然含有大量 检测单据数量,报表数量,以及使用时间等。

客户买的是正版软件,终身使用授权,只是1年交维护费了而已,意义在于什么,大家心知肚明吧。我就不明说了。

【解决心得】

经过大量排序跟踪数据库工具,发现程序 在输入密码账号后,

会读取一次 cyuserinfo 表,获取了v_regno1  ,v_regno2 ,v_regno3 表值后,经过计算。

如果不满足要求会修改 v_regno2 表值,应该是锁死操作吧

在此时程序已经完成限制检测了,正常进入软件主界面。

酒店管理系统 服务器:消息 666,级别 16,状态 1,行 1 用于重复组的系统生成唯一值超过了最大值。除去并重新创建索引可能会解决该错误;否则可使用其他聚集索引。

如果不点击报表系统,不会有任何反应和痕迹。点击报表系统后才会报错。

酒店管理系统 服务器:消息 666,级别 16,状态 1,行 1 用于重复组的系统生成唯一值超过了最大值。除去并重新创建索引可能会解决该错误;否则可使用其他聚集索引。

【大致解决思路】

1.第一位的当然是及时备份好数据,做了备份想怎么玩都可以,

2.断开所有客户端连接。禁止其他客户端在写入新的数据,防止回滚导致数据丢失。