oracle 条件为true,oracle – 此操作必须将ORA-02069 global_names参数设置为TRUE

答案在这里讨论:

http://dba010.wordpress.com/2011/01/05/oracle-errorsora/#ORA-02069

如果链接不起作用:

错误:

ORA-02069:此操作必须将global_names参数设置为TRUE

原因:

您正尝试使用本地函数在远程数据库上进行DML操作.

这是“Oracle Bug”,它应该可以工作,但事实并非如此.

示例(为了更好地理解):

– 假设我们有两个数据库DB1和DB2

– 在DB1上我们有函数fun1

create function fun1 return number is

begin

return 1;

end;

– 在DB1上,我们有一个引用DB2的数据库链接,为简单起见,称为DB2.

– 检查它是否有效.

select *

from dual@DB2

– 如果输出如下,那么它可以工作.

DUMMY

-----

X

-Let在DB2中创建测试表(连接到DB2数据库)

create table tesTable(

id number,

testColumn number

);

– 让我们做一些DML操作,这会导致ORA-02069错误.

insert into testable@DB2(id,testColumn)

values(1, fun1);

“ORA-02069: global_names parameter must be set to TRUE for this operation”

现在,当您已经知道在什么情况下发生此错误时,让我们编写解决方案.它有两个解决方案:

解决方案一:

>将global_names参数设置为true,可以在系统级别或会话级别上进行(请考虑有时会话级别不可用)

– 在DB1上

alter session set global_names=true;

>在远程数据库上创建数据库链接,在我们的例子中是DB2,它将引用数据库DB1(使链接名称与数据库全局名称相同,因为将global_names参数设置为true需要它).

– 在DB2上

Create database link DB1 connect to identified by

using ‘DB1’;

现在它应该工作,但我应该提到创建数据库链接可能不是更好,

因为它不安全(你应该猜到为什么,因为如果你这样做,你将能够

通过数据库链接与某些用户连接到DB1 …如果对您没有关系,则使用它J).

解决方案二:

>在本地数据库上创建临时表.>将行插入临时表.>将临时表从临时表插入远程数据库.>删除临时行.请注意,此解决方案比第一个解决方案慢.但它也解决了这个问题并且更加安全.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值