在内部平台上安装某应用时,会执行init.sql文件,其中会对database所有表进行drop和重建;安装后,使用该应用,然后,
卸载该应用时,会执行end.sql,其中会直接执行drop database和create databse。
遇到的诡异问题:
1,卸载应用时,代码执行drop database时,页面挂死,貌似执行drop database异常(暂未深入分析),但重启平台后,要卸载的应用已从页面消失。
2,临时解决卸载挂死的问题起见,将end.sql中的drop database和create databse语句删除,此时,卸载正常,但再安装应用时,执行到init.sql中的某个drop tablse语句时,页面同样挂死。(该drop 语句前面有多个类似语句却正常,将该语句尝试删除后,紧跟着后面的drop语句也会引起页面挂死)
综上现象判断,使用应用时,可能对数据库有某些操作,导致卸载或再安装时,sql语句操作数据库异常。
问题是使用应用的哪些情况可能引发后续操作数据异常。

解决方案 »

  1.   

    检查一下当时是否有其它程序在访问该数据库。 drop database 需要等所有加锁的表都释放后再会执行。
      

  2.   

    多谢指点!应用程序操作时有通过mybatis方式对该database的使用,具体不清楚是哪些对数据库的访问语句会引发问题。
    不过,我现在准备卸载该应用程序了,那么是否可以采用下面两种方式解决:1,不论是否有表被使用,强制drop db。
    或2,如果确定是因为加锁的表引起的话,我进一步分析下是哪些表加锁,把加锁动作去掉。
    这样先试试。