我找到了几个解决方案,其中之一如下:
原因需要语句的远程Map,但无法实现,因为global_names应设置为TRUE才能实现远程Map
操作如果可能,发出更改会话集global_names = true
但是我不明白为什么要设置global_names参数......为什么远程Map要使用global_names参数?请你解释一下好吗?
我知道设置global_names参数会产生全局命名规则,即数据库链接名必须与远程数据库名相同。此外,它还会将域名附加到数据库名,如<DB_NAME>。<DB_DOMAIN>还有什么?
5条答案
按热度按时间axkjgtzd1#
答案在这里讨论:www.example.comhttp://dba010.wordpress.com/2011/01/05/oracle-errorsora/#ORA-02069
如果链接不起作用:
ORA-02069:对于此操作,global_names参数必须设置为TRUE
您正在尝试使用本地函数对远程数据库执行DML操作。
这是"甲骨文错误",它应该工作,但它没有。
现在,当你已经知道这个错误发生在什么情况下,让我们写解决方案。它有两个解决方案:
1.将global_names参数设置为true,可以在系统级或会话级完成(考虑到会话级有时不可用)
1.在远程数据库上创建数据库链接,在我们的例子中是在DB2上,它将引用数据库DB1(使链接名称与数据库全局名称相同,因为将global_names参数设置为true需要它)。
现在它应该可以工作了,但是我应该提到创建数据库链接可能不是更好,
因为它不安全(您应该猜到原因,因为如果这样做,您将能够通过数据库链接与某个用户连接到DB1 ......如果这对您来说无关紧要,那么就使用它J)。
1.在本地数据库上创建临时表。
1.在临时表中插入行。
1.将临时行从临时表插入远程数据库。
1.删除临时行。请注意,此解决方案比第一个解决方案慢。但它也解决了问题,而且安全得多。
ttcibm8c2#
kupa的回答提供了一个很好的解释和很好的解决方案,但是如果你不想或不能遵循解决方案一或二,我建议在这里查看解决方案二:http://dbtricks.com/?p=263.
这对我很有效,创建一个变量并将本地函数的值赋给它,然后在引用远程表的SQL语句中使用该变量。
希望这能像帮助我一样帮助别人!
huwehgph3#
引用this thread:
mbyulnm04#
如果您在远程SELECT语句上使用本地函数,请尝试在WHERE子句中添加**“rownum〈〉0”**。
nzkunb0c5#
尝试通过数据库链接访问远程表时出现相同错误。我的用例是本地数据库位于Docker中,它尝试使用其元数据构建原始链接数据库的子集。尝试获取远程表的列
生成ORA-02069。由于尝试使用
create table as select * ...
创建本地表,我被告知LONG
类型的某些列无法传输。实际上,我不需要*
,并且具有简单类型的具体列错误消失。