sql server profiler去跟踪。

解决方案 »

  1.   

    8成是误报,给你几个提示
    1、sqlserver查询分析器查询的sql用 select * from xxx where  acctrule='01' ,而不要用select * from xxx,别太相信自己的眼睛
    2、确认select * from xxx_bak..xxx where acctrule='01' 有数据
      

  2.   

    谢谢各位!
    完美行动:
    发表于:2008-07-16 11:03:492楼 得分:0 
    sql server profiler去跟踪。 
    没有用过,能具体一点吗?
    另外这个问题是随机出现的,也就是说是不可再现的,我无法认为触发这个问题,所以不知道如何跟踪海阔天空
    8成是误报,给你几个提示 
    1、sqlserver查询分析器查询的sql用 select * from xxx where  acctrule='01' ,而不要用select * from xxx,别太相信自己的眼睛 
    2、确认select * from xxx_bak..xxx where acctrule='01' 有数据 
    1
    误报是不会的,我们的客户程序是pb写的带过滤条件的数据窗口,肯定带了where  acctrule='01' 
    而且我有个习惯就是删除前使用带相同where的select语句先检查是否真的要删这些数据,写入后也同样的where条件在目标表查询检查,不会是误报的
    2
    select * from xxx_bak..xxx where acctrule='01' 确实有数据,原来40条,删除重新写入会59条,后来莫名其妙的自己回到了40条
      

  3.   

    如果是个老问题,一针见血指出你的问题是很难的,提供个思路吧:sql server事务有种我们很少用的方式,叫做隐性事务,在隐性事务状态下,打开事务是自动的,但是提交事务需要写语句,在这种状态下,如果没有写提交和回滚事务的语句,那它的应用程序退出的时候会自动回滚事务,可能出现你说的现象。但是有个前提,你的程序的查询时设置的隔离级别应该是很低的,才能在其他客户端查到暂时的信息
      

  4.   

    这个问题好像之前有人提过,
    是个POS机的案例,
    当时也是没有好的处理方式.
    能否查查日志?
    使用log explorer检查一下那一段时间内做过些什么动作?
      

  5.   

    从备份库相同表取acctrule='01'的数据写回去,insert into xxx select * from xxx_bak..xxx where acctrule='01' 
    缺 commit
      

  6.   

    是否可以做个一段时间的Monitor,
    的确,这种非常规性的问题,
    很难track的.