以如下环境为例子:
数据库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-00604: 递归SQL层1出现错误 ORA-03106: 致命的双工通信协议错误 ORA-02063: 紧接着line(源于dblink) 以及 ORA-04052: 在查找远程对象时出错 ORA-00604: 递归SQL层1出现错误 ORA-03120: 双工转换例行程序:整数...
在Oracle数据库中,"ORA-00904"是一个常见的错误代码,它表示尝试引用一个不存在或无效的标识符。在这个场景下,错误信息提到的是"WM_CONCAT"函数,这表明在Oracle 19c数据库环境中,用户尝试使用WM_CONCAT函数,但...
#### ORA-00116: SERVICE_NAMES Parameter Not Set 未设置SERVICE_NAMES参数。这可能是由于配置错误或服务管理器的问题。 #### ORA-00117: SERVICE_NAMES Parameter Value Not Valid SERVICE_NAMES参数值无效。这...
### 如何处理错误ORA-29275:部分多字节字符 #### 问题背景与描述 在Oracle数据库操作过程中,用户可能会遇到一个特定的错误提示——ORA-29275:部分多字节字符。这一错误通常出现在执行查询`SELECT * FROM V$...
Oracle数据库在运行过程中,经常会遇到各种错误代码,错误代码ORA-00845是其中的一个,它是指“MEMORY_TARGET not supported on this system”。这个错误一般发生在尝试在不支持MEMORY_TARGET参数的系统上设置该参数...
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数据库管理中,"ORA-00990: 权限缺失或无效"是一个常见的错误代码,它表示用户尝试执行的操作没有足够的权限。这个错误通常发生在试图访问、修改或者管理数据库对象(如表、视图、索引等)时。在本篇文章中...
ORA-12154: TNS: 无法解析指定的连接标识符的解决方法
在Oracle数据库系统中,"ORA-01036:非法的变量名/编号"是一个常见的错误,通常出现在PL/SQL代码或者SQL查询语句中,当你尝试使用一个不正确或者未定义的变量时,Oracle数据库会抛出这个错误。这个错误可能是由于...
oracle网络配置(listener_ora-sqlnet_ora-tnsnames_ora).mht
在Oracle数据库系统中,"ORA-00060: 等待资源时检测到死锁" 是一个常见的错误提示,它表明两个或多个事务在执行过程中陷入了无法继续进行的状态,因为彼此都在等待对方释放资源。这种情况通常发生在并发操作中,比如...
ORA-00904 是一个常见的错误信息,通常发生在 SQL 语句中引用了一个不存在的列名。这种错误通常是由于开发者在编写 SQL 语句时,忘记了某个列名或写错了列名,导致 Oracle 无法找到该列名。解决这个错误的方法是,...
oracle12c程序连接时异常: ORA-01017: 用户名/口令无效; 登录被拒绝 的解决方案。
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-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出最大进程数 () ORA-00021: 会话附属于其它某些进程;无法转换会话 ...
* ORA-00001: 违反唯一约束条件 * ORA-00017: 请求会话以设置跟踪事件 * ORA-00018: 超出最大会话数 * ORA-00019: 超出最大会话许可数 * ORA-00020: 超出最大进程数 * ORA-00021: 会话附属于其它某些进程;无法转换...
然而,当你尝试向CLOB字段插入数据时,如果超过了Oracle规定的最大限制,就会遇到“ORA-01704: 文字字符串过长”的错误。这个错误通常意味着你试图插入的字符串超过了Oracle数据库允许的最大长度,对于VARCHAR2类型...
ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出最大进程数 () ORA-00021: 会话附属于其它某些进程;无法转换...