gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 03:17:18 25 4
gpt4 key购买 nike

我已经搜索了几个解决方案。其中之一如下:

事业
该语句的远程映射是必需的,但无法实现,因为 global_names 应设置为 TRUE 才能实现

行动
如果可能,发出 alter session set global_names = true

但我不明白为什么我需要设置 global_names 参数......为什么远程映射使用 global_names 参数?拜托,你能解释一下吗?

P.S 我知道设置 global_names 参数会产生全局命名规则,数据库链接名称必须与远程数据库名称相同..而且它还会将域名附加到数据库名称中,例如 . 还有什么?

最佳答案

答案在这里讨论: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

– 让我们在 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,可以在系统级别或 session 级别进行(考虑有时 session 级别不可用)

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

  • – 在 DB2 上
    Create database link DB1 connect to <username> identified by <password>
    using ‘DB1’;

    现在它应该可以工作了,但我应该提到创建数据库链接可能不是可取的,

    因为它不安全(你应该猜为什么,因为如果你这样做,你将能够
    通过数据库链接与某个用户连接到 DB1 ......如果对你来说无关紧要,那么使用它J)。

    方案二:
  • 在本地数据库上创建临时表。
  • 在临时表中插入行。
  • 将临时表中的临时行插入到远程数据库中。
  • 删除临时行。
    请注意,此解决方案比第一个解决方案慢。但它也解决了问题,而且更加安全。
  • 关于oracle - ORA-02069 global_names 参数必须为此操作设置为 TRUE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4688685/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com