【发布时间】:2015-09-14 15:25:43
【问题描述】:
查询是这样的
select 1 from dual@link1
union
select 1 from dual@link2
然后我得到了只读访问错误。
我在所有这 3 个数据库中都有用户,他们都是只读用户,所以当我执行查询“select 1 from dual@link1”时,我得到了只读错误,然后我尝试将查询更改为
set transaction read only;
select 1 from dual@link1;
然后就解决了。
然后我尝试了如下查询:
select 1 from dual@link1
union
select 1 from dual@link2
又出错了,我不知道为什么 1 个链接有效,但 2 个链接无效。
有人知道吗?
【问题讨论】:
-
你到底得到了什么错误(包括ORA错误代码和完整的txt,如果有的话还有堆栈)?数据库链接和用户是如何定义的 - 你可以添加他们的创建 DDL 和任何用户授予的问题(当然是屏蔽密码)?
-
如果你
set transaction read only并单独运行第二部分select 1 from dual@link2会发生什么;这也有效吗?如果您在没有set transaction的情况下单独运行 select 怎么办 - 看起来第一部分仍然错误?目前尚不清楚您看到的问题是否与第二个查询/链接有关,或者仅当您将两个查询结合在一起时才会发生。 Link2 的 DB 上可能有一个登录触发器试图写一些东西吗? -
这是在java jdbc调用中,我记得oracle错误代码是ora-16000。
-
当我运行其中任何一个时,两者都可以工作,只有当我在一个查询中运行它们时,它才会工作。奇怪的是,当在 pl/sql 或 sql plus 中运行它们时,它可以工作,用户是 DBA 创建的只读用户,我不能授予它任何权限,DBA 也不会。
-
我们有许多不同名称的 oracle 实例,如果我不运行 set transaction 只读,它们都不会在某些数据库上工作,但有些会工作,它们都是相同的,我们的用户都是只读用户,现在有些oracle,我可以运行带有多个链接的联合,有些不能,但是然后使用pl / sql或sqlplus,一切正常,不知道我应该在java中做什么解决这个问题。