在工作中用到了db2数据库, 由于对数据库不熟悉, 所以记录下在db2数据库使用过程中的问题和解决方法,以供以后查看.
问题表现: 数据库中出现了相同名称的两个表:
双击打开表, 发现里面的数据内容是一样的.
尝试drop表, 发现drop其中一个后,另一个就不能drop了.而且, drop了一个表后, 另一个表也不能用了.
排查过程:
1.尝试创建原表, 然后将其中一表改名, 然后删除另一个表, 报错:
2. 尝试经过排查发现删除一个表后, 再删另一个表时, 系统提示该表不存在.
3. 在网上查找了半天, 没有发现解决方案, 考虑通过查找所有表名的方式查看是否真的不存在这个表.结果用select语句差找不到该表.
4.考虑到scheme中的表信息都是来自sysibm下的systables表, 决定到该表中查看数据. 双击打开该表, 搜索"tb_product", 发现找到一条记录:
5.经过仔细对比发现, 该表名前多了一个空格字符.
原因分析: 创建表时由于手误, 在sql语句中表名前多敲了一个空格.而db2在展示表名时可能会将多余空格去除, 所以出现相同表名的表. 而删除时按照没有空格的表名来删除表时就没办法影响到systables表中的数据, 所以出现了表不能删除的问题.
解决方法: 由于默认scheme是db2admin, 所以不能直接在systables表中删除数据, 所以,通过sql来drop表名中带空格的表.
只剩下一个.