我在一家使用Weblogic应用程序和Oracle 11g数据库的公司工作。
我们有很多测试机来测试应用程序。每台机器都连接到同一个数据库实例,但使用不同的模式。
例如,机器编号1使用模式test1
并且有自己的一组表,例如test1.payment
,test1.customer
等。机器编号2使用模式test2
和还有表格test2.payment
,test2.customer
等
通常,如果我们访问架构test1
上的数据库并应用以下查询
select * from all_objects where object_name = 'PAYMENT'
我们会得到一行,其中object_name ='PAYMENT'和owner ='TEST1'
有一天,第2号测试机器上的应用程序无法以错误消息There is more than one owner for type FOO, in the database
开头,其中FOO
是假名。
我使用此SQL
检查了数据库中的类型FOO
select * from all_objects where object_name = 'FOO'
并获取所有者来自每个模式的行,并认为这是根本原因。
我不允许编辑导致问题的应用程序源代码部分。所以我想在数据库站点修复它。但DBA将缺席一段时间,我没有DBA权限,但我可以访问所有模式test1
,test2
,...
问题是:
为什么select * from all_objects where object_name = 'FOO'
会返回其他模式中的行,以及如何使它只返回当前模式中的一行?