浏览 2097 次 / [ 天下网闻 ] DISCUZ个别长期未登录老用户积分不能更新问题的处理办法
  • 发布时间 2017-08-02 15:53
  • 本主题不是求助,而是一个经验分享,但本版却只有“求助”分类……
    一、问题简述:
    早期注册用户一枚,由于长期未使用,被系统纳入存档表,后来用户回归,能正常登录论坛,但发现无论是自己发帖、他人评分、后台加分都不能更新积分,所有统计数据不是显示为“0”就是显示为空或“-”……查询Discuz社区也未得到相关问题的解决办法,只能自己瞎子摸象慢慢排查……
    二、问题排查:
    本站系统正常,几十万会员中就这一例出现问题,以前即使是已在存档表中的会员,只要再次登录,即可激活恢复正常功能,因此,没有啥头绪,但问题可以肯定是出在用户存档表数据上,由于DZ后台的用户分表并未提供可逆的操作途径,靠手工合并或还原数据库将是件很危险的事情,于是我便考虑对数据库中有关这个会员的单一记录先行分析一下,这时发现,这个会员同时在主表和存档表中都有记录,复查其它存档表用户,以及有激活历史的用户,并未发现有两表重复记录的情况,于是该用户重复记录显然就是造成积分不能更新的重大嫌疑,后台查寻后发现只有这个用户在存档表和主表中都能查到,并且两表的查寻结果完全一致并且同步(比方说更改主表的用户组,存档表中也会同步改变),这就说明系统的判断出现问题,其实这个用户已经被激活在主表中了。存档表中的记录只是一个镜像,但就是因有这个镜像,系统判定这个用户依然是存档的非激活用户…………
    三、问题处理:
    有了结果,处理起来却仍然没方向,只能死马当活马医,首先想到的就是删除存档表中的这个镜像,便去后台查寻存档表后执行用户删除(留了一手,仅删除用户,未勾选删除该用户的其它数据及UC数据),结果,意料中的悲剧产生了,主表中该用户的查寻也消失了,论坛中该用户的所有帖子也都不见了,这下彻底不用纠结了,看来只能重新建一个用户并准备向该会员道歉了……
    四、意外结局:
    先试试在后台用同样的用户名新建用户,预计会被拒绝,因为UC中该用户并未被删除,结果果然是这样,但是弹出的提示中却有另一句话让我眼睛一亮:“该用户名已存在,并处于非激活状态,需要立即激活该会员吗?”,为这句话,这几天我已是找遍整个后台了,却没想到居然隐藏在这么个死地里,真可谓置之死地而后生了,立马点击确认,系统弹出“新用户已创建成功”………………?"新用户”???,难道并不是“激活”么?,赶紧查寻——欣喜在这一个来临:一个完整地继承了原同名ID/UID的“新用户”重生了,用户资料、用户帖子全部都在,虽然统计数据全部归“0”,但数据更新已恢复正常。

    后语:这只是一个非常规处置案例,偶尔撞见,原理讲不明白,仅供有类似情况的朋友参考,精简步骤如下:
    1、查寻主表和存档表,若发现两表均有该用户记录,继续……
    2、删除存档表中的用户,注意保留UC及全部用户数据(估计随便删除哪个表中的记录结果都一样,没试),查看用户资料,若已显示无该用户,继续……
    3、后台添加新用户,需与已删除的同名,应能弹出“激活”有关的提示窗,确认,继续……
    4、检查用户恢复情况,该用户下的所有帖子、资料都应该恢复如初,积分更新恢复正常……完成。