日期:2014-05-18  浏览次数:20423 次

数据库数据偶然丢失的问题
最近公司的数据库经常出现一个这样的问题, 比如我今天操作了20条记录到某一个表中, 然而到了明天或者后天 数据记录突然之间就少了几条。

环境如下: win 2003 SQL 2000 安装有一套加密软件 其他的东西都是一些杀毒的呀, 和一些工具吧。 


大家有遇到我这种, 经常数据丢失掉的情况么?

------解决方案--------------------
90%以上是程序哪里有bug,最近有无修改程序?

------解决方案--------------------
临时在目标表上建个触发器,跟踪一下什么程序,什么主机名删除的.
------解决方案--------------------
应该是加密过期做的手脚。。初步怀疑
------解决方案--------------------
有没有触发器这些自动触发的东西啊!
------解决方案--------------------
软件有两种更新方式,就拿我会的PB来说,更新有DELETE AND INSERT与UPDATE两种,当然数据库内部更新也是DELETE AND INSERT,我那数据窗口就是选择了DELETE AND INSERT有时候会掉数据,最后才查出来,也是建立了个触发器,选择为UPDATE后,到现在没有反应过掉数据情况
------解决方案--------------------
不是数据库问题的而是程序本身的问题。
------解决方案--------------------
跟踪一下程序对SQL的执行语句。
------解决方案--------------------
你这个问题相对于一些语句问题的确不好查找,但是本身SQLServer是不会出现这种问题(最起码几率几乎为0),那么你可以做的就是检查相关功能:
1、有没有触发器,之前我们公司出现过一个现象,开发人员插入数据没报错,但是查表就是没数据,而我发现插入两条数据,SQLServer【消息】那个地方显示影响行数2行,重复显示了两遍,引起了我的怀疑,按道理插入一次无论多少数据都只会显示一次,为什么显示两次?检查表的时候的确发现了一个触发器,插一次删一次。
2、其他语句有没有没写好或者没考虑到的地方使得执行了删除操作?因为有些语句,特别是where语句中,如果没写好,可能会存在特定条件的数据才删除。导致了其他数据没问题但是偶尔出现一些数据丢失。
3、有没有做DBCC CHECKDB()或者其他DBCC命令,然后使用了类似repari_allow_data_loss这样的选项。
4、杀毒软件是不会操作你数据库的数据的,要删也是删除数据文件或者日志文件这些。
5、如果上面都没问题,那么很可能问题出在加密软件的bug中。除非你清楚了解加密软件的逻辑,否则不要轻易下定论说加密软件没问题,加密其实就是在修改数据的存储结构,而这些修改是否完全不改动数据?不敢保证。而且由于数据的长度问题,往往有可能会造成数据截断等出现。
希望上面的思路能帮你解决问题。