(本文档仅供参考)
问题
oracle数据源管理添加表操作,有两个用户,两个用户权限都是DBA,然后用户A可以正常添加表,用户B不能正常添加表。排除了用户权限不一样的问题,因为查看了下,确实是一样的,还有什么原因能否参考分析?
解决方案
其实问题是数据库相关的问题,直接找数据库DBA分析会更快解决。此问题分析步骤仅供借鉴,不一定可以解决其他的数据源管理添加表报错:
1、确定两个数据库用户的数据库权限是否一致。
2、权限一致的情况下,检查
方法1:根据指定用户名获得对应用户所拥有权限的表
SELECT table_name, owner FROM all_tables WHERE owner = 'SCOTT';
方法2:通过tab视图获得当前登录用户所有表和视图,通过tabletype过滤获得所有表
SELECT * FROM tab WHERE tabtype = 'TABLE';
3、确定表是属于当前用户的情况下还是添加报错,我们再次分析发现是因为这个用户对于all_tab_columns,查询看看是否能查到数据 :select * from all_tab_columns
4、在第3步骤驱动了,当前用户查询all_tab_columns看不到任何数据,这时候,需要找DBA进一步确认,是否是没有权限。
5、最终给解决了,原来这个stg用户下有个表就叫all_table_column,所以jdbc调用接口的时候没去查询系统字典表这个视图。
问题原因:检查无法正常添加表的用户是否是创建了和 数据库系统表同样的名称,不建议这样设置,因为对于数据库来说都有属于数据库的关键字,关键字相同会引发一些接口调用获取信息无法正常。
解决方案:移除和系统表相同名称的表或者关键字。