`

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

阅读更多

 

以如下环境为例子:
数据库A :global_name为 OrcA
数据库B :global_name为 OrcB
在OrcA中建立dblink连接到OrcB,dblink命名为to_OrcB;
 在OrcB中创建表T,拥有一个number的id字段;
 在OrcA中创建sequence(seq_1);并创建一个function(fun_1),fun_1仅返回1;
来看看发生02069错误的情况:
执行:
 insert intoT@to_OrcB(id) values(seq_1.nextval);
 insert intoT@to_OrcB(id) values(fun_1);
  
 都会发生 ORA-02069: global_names parameter must be set to TRUE for this operation。(注:update、delete一样)
可知:通过DBLink更新远程数据的时候,如果使用到本地的sequence、函数、过程、包等将会发生ORA-02069
根据错误信息:
 执行 alter session set GLOBAL_NAMES = true;
 再次执行:insert intoT@to_OrcB(id) values(seq_1.nextval);
 发生如下错误:ORA-02085: database link to_OrcB connects to OrcB。
  删除DBLink to_OrcB.
 创建名字为OrcB的dbLink连接到OrcB.
 执行:insert intoT@OrcB(id) values(seq_1.nextval);
ORA-02019: connection description for remote database not found
ORA-02063: preceding line from OrcB
 现在登录OrcB,创建反向dblink连接到OrcA,注意DBLink的名字必须为OrcA;
  这时执行:
   insert intoT@OrcB(id) values(seq_1.nextval);
  insert intoT@OrcB(id) values(fun_1);
   成功! 

总结:当发生 ORA-02069错误时,要建立一个反向的dblink,且两个dblink的名字要与global_name一致;
   在执行SQL前,必须先执行alter session set GLOBAL_NAMES = true;
上面方法的缺点:
 设置繁琐,如果A、B两个数据库的global_name相同时,无法创建与global_name相同的dblink。
 其次,如果数据A有多个用户要更新数据库B中的一个用户,这个反向DBLink该如何建立呢?

另一种的方法:    
使用游标,一条条更新远程对象,更新远程数据的DML中不要引用本地用户对象,而是使用变量来代替。
    如insert intoT@to_OrcB(id) values(seq_1.nextval)可以改为
    declare
     i number;
    begin
      select seq_1.nextval into i from dual;
      insert intoT@to_OrcB(id) values(i);
  end;

 

分享到:
评论

相关推荐

    ORA-04052p5731178_92080_WINNT.zip

    ORA-00604: 递归SQL层1出现错误 ORA-03106: 致命的双工通信协议错误 ORA-02063: 紧接着line(源于dblink) 以及 ORA-04052: 在查找远程对象时出错 ORA-00604: 递归SQL层1出现错误 ORA-03120: 双工转换例行程序:整数...

    ORA-00904: "WM_CONCAT": 标识符无效

    在Oracle数据库中,"ORA-00904"是一个常见的错误代码,它表示尝试引用一个不存在或无效的标识符。在这个场景下,错误信息提到的是"WM_CONCAT"函数,这表明在Oracle 19c数据库环境中,用户尝试使用WM_CONCAT函数,但...

    oracle报错大全(珍藏版)

    #### ORA-00116: SERVICE_NAMES Parameter Not Set 未设置SERVICE_NAMES参数。这可能是由于配置错误或服务管理器的问题。 #### ORA-00117: SERVICE_NAMES Parameter Value Not Valid SERVICE_NAMES参数值无效。这...

    如何处理错误ORA-29275:部分多字节字符

    ### 如何处理错误ORA-29275:部分多字节字符 #### 问题背景与描述 在Oracle数据库操作过程中,用户可能会遇到一个特定的错误提示——ORA-29275:部分多字节字符。这一错误通常出现在执行查询`SELECT * FROM V$...

    Oracle 报错ORA-00845 MEMORY_TARGET not supported on this system

    Oracle数据库在运行过程中,经常会遇到各种错误代码,错误代码ORA-00845是其中的一个,它是指“MEMORY_TARGET not supported on this system”。这个错误一般发生在尝试在不支持MEMORY_TARGET参数的系统上设置该参数...

    ORA-32001:请求写入spfile,但没有使用spfile的解决方法

    ORA-32001:write to spfile requested but no spfile is in use请求写入spfile,但没有使用spfile的解决方法 在输入以下语句中报了这样的错误: SQL>alter system set control_files=’/u01/app/oracle/oradata/prod/...

    ora-01033:oracle initialization or shutdown in progress 解决方法

    ### ora-01033: Oracle Initialization or Shutdown in Progress 解决方法 #### 一、问题背景及原因 **标题**: “ora-01033: Oracle initialization or shutdown in progress 解决方法” **描述**: “ora-01033: ...

    Oracle 授权 ORA-00990: 权限缺失或无效

    在Oracle数据库管理中,"ORA-00990: 权限缺失或无效"是一个常见的错误代码,它表示用户尝试执行的操作没有足够的权限。这个错误通常发生在试图访问、修改或者管理数据库对象(如表、视图、索引等)时。在本篇文章中...

    ORA-12154: TNS: 无法解析指定的连接标识符的解决方法

    ORA-12154: TNS: 无法解析指定的连接标识符的解决方法

    oracle特有的错误:ORA-01036:非法的变量名/编号

    在Oracle数据库系统中,"ORA-01036:非法的变量名/编号"是一个常见的错误,通常出现在PL/SQL代码或者SQL查询语句中,当你尝试使用一个不正确或者未定义的变量时,Oracle数据库会抛出这个错误。这个错误可能是由于...

    oracle网络配置(listener_ora-sqlnet_ora-tnsnames_ora).mht

    oracle网络配置(listener_ora-sqlnet_ora-tnsnames_ora).mht

    ORA-00060: 等待资源时检测到死锁--oracle 数据库表死锁异常

    在Oracle数据库系统中,"ORA-00060: 等待资源时检测到死锁" 是一个常见的错误提示,它表明两个或多个事务在执行过程中陷入了无法继续进行的状态,因为彼此都在等待对方释放资源。这种情况通常发生在并发操作中,比如...

    oracle ora-各种常见java.sql.SQLException归纳

    ORA-00904 是一个常见的错误信息,通常发生在 SQL 语句中引用了一个不存在的列名。这种错误通常是由于开发者在编写 SQL 语句时,忘记了某个列名或写错了列名,导致 Oracle 无法找到该列名。解决这个错误的方法是,...

    oracle12c ORA-01017: 用户名/口令无效; 登录被拒绝 解决方案

    oracle12c程序连接时异常: ORA-01017: 用户名/口令无效; 登录被拒绝 的解决方案。

    oracle ORA-03113 "end_of_file on communication channel"

    ORA-03113 "end_of_file on communication channel" ORA-03113 "end_of_file on communication channel" ORA-03113 "end_of_file on communication channel

    oracle错误代码大全(超详细)

    ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出最大进程数 () ORA-00021: 会话附属于其它某些进程;无法转换会话 ...

    Oracle错误代码大全

    * ORA-00001: 违反唯一约束条件 * ORA-00017: 请求会话以设置跟踪事件 * ORA-00018: 超出最大会话数 * ORA-00019: 超出最大会话许可数 * ORA-00020: 超出最大进程数 * ORA-00021: 会话附属于其它某些进程;无法转换...

    CLOB 字段类型报错 ORA-01704: 文字字符串过长的解决

    然而,当你尝试向CLOB字段插入数据时,如果超过了Oracle规定的最大限制,就会遇到“ORA-01704: 文字字符串过长”的错误。这个错误通常意味着你试图插入的字符串超过了Oracle数据库允许的最大长度,对于VARCHAR2类型...

    Oracle错误码大全

    ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出最大进程数 () ORA-00021: 会话附属于其它某些进程;无法转换...

Global site tag (gtag.js) - Google Analytics