【Oracle专栏】ORA-02069: global_names 参数

Oracle && OceanBase 相关文档,希望互相学习,共同进步

风123456789~-CSDN博客


1.背景

今天在测试过程时,往远端表中插入数据时,报错如下:

由于该报错是在dblink的情形下出现,以下实验用2个机子:本地、远端。

2. 实验

本地端:创建表 testa,

创建远端dblink: @affairs

远端: 创建表 testb

复制代码
本地  1)创建表: testa   2)创建dblink :AFFAIRS

create table testa
(kid varchar2(32),
info_id varchar2(32),
seqdate date default sysdate
)
;

insert into testa(kid,info_id)
select '1','info_1' from  dual union all
select '2','info_2' from  dual;
commit;

create public database link AFFAIRS
  connect to xxx identified by xxx
  using '192.168.3.12/orcl';

远端创建表:testb

create table testb
(kid varchar2(32),
info_id varchar2(32),
seqdate date default sysdate
);

2.2 测试正常插入

1)查看本地端数据、远端数据

复制代码
本地端查看:
select * from testa;
select * from testb@affairs;

2)将本地端数据插入远端

复制代码
--将本地端数据插入远端
insert into testb@affairs
select * from testa;
commit;

select * from testa;
select * from testb@affairs;

执行结果:插入成功

2.3 在本地端建立函数

复制代码
--本地端建立函数

CREATE OR REPLACE FUNCTION FUN_TEST(pEnum_name VARCHAR2) RETURN varchar2 IS
  vResult   varchar2(100);
  vCount    number;
BEGIN
   ---传入字符串最后出现的下划线及之后的截取,左补0
  vResult := '1'||LPAD(REGEXP_SUBSTR(pEnum_name, '\_[^_]*$'),10,'0');

  RETURN vResult;
END;

2.4 测试再次插入远端

1)查询函数

复制代码
select kid,FUN_TEST(info_id) from testa;

2)插入使用本地端函数 报错

复制代码
delete from testb@affairs;
commit;

insert into testb@affairs(kid,info_id)
select kid,FUN_TEST(info_id) from testa;
commit;

执行结果:删除成功,但是插入失败 问题复现

2.5 处理报错

1)在远端建立函数

复制代码
CREATE OR REPLACE FUNCTION FUN_TEST_b(pEnum_name VARCHAR2) RETURN varchar2 IS
  vResult   varchar2(100);
  vCount    number;
BEGIN
   ---传入字符串最后出现的下划线及之后的截取,左补0
  vResult := '1'||LPAD(REGEXP_SUBSTR(pEnum_name, '\_[^_]*$'),10,'0');

  RETURN vResult;
END;

2)插入使用远端函数 报错

复制代码
insert into testb@affairs(kid,info_id)
select kid,FUN_TEST_b(info_id) from testa;
commit;

执行结果:报错

3)插入使用本地dblink函数 报错

在远端建立本地库的dblink : out

复制代码
--远端建立本地 dblink
create public database link OUT
  connect to xxx identified by xxx
  using '192.168.3.11/orcl';

执行结果: 报错

4)插入使用远端dblink函数 ok

复制代码
insert into testb@affairs(kid,info_id)
select kid,FUN_TEST_b@Affairs(info_id) from testa;
commit;

select * from testa;
select * from testb@affairs;

执行结果: 不再报错,插入成功

此时,问题解决。

3.总结

ORACLE 报错:ORA-02069: 此操作的 global_names 参数必须设置为 TRUE。

通常发生在数据通过dblink传到另外一个的数据库中, insert into 远端表@dblink select column from 本地表 ,其中,column 中包含了序列或者函数,因为序列或者函数属于本地的,在insert执行时,是在dblink远端完成,此时需要从远端返回本地来引用序列或者函数进行处理。

此时,需要将global_names设为true,然后在远端创建一个指向本地的dblink,并且两个dblink名称要和对方数据库的global name一致。或者放在一端,本实验是放在远端 相同dblink。

实验验证:ok


项目管理--相关知识

项目管理-项目绩效域1/2-CSDN博客

项目管理-项目绩效域1/2_八大绩效域和十大管理有什么联系-CSDN博客

项目管理-项目绩效域2/2_绩效域 团不策划-CSDN博客

高项-案例分析万能答案(作业分享)-CSDN博客

项目管理-计算题公式【复习】_项目管理进度计算题公式:乐观-CSDN博客

项目管理-配置管理与变更-CSDN博客

项目管理-项目管理科学基础-CSDN博客

项目管理-高级项目管理-CSDN博客

项目管理-相关知识(组织通用治理、组织通用管理、法律法规与标准规范)-CSDN博客


Oracle其他文档,希望互相学习,共同进步

Oracle-找回误删的表数据(LogMiner 挖掘日志)_oracle日志挖掘恢复数据-CSDN博客

oracle 跟踪文件--审计日志_oracle审计日志-CSDN博客

ORA-12899报错,遇到数据表某字段长度奇怪现象:"Oracle字符型,长度50"但length查却没有50_varchar(50) oracle 超出截断-CSDN博客

EXP-00091: Exporting questionable statistics.解决方案-CSDN博客

Oracle 更换监听端口-CSDN博客

相关推荐
小徐不徐说1 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
论文复现现场2 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
Decay__3 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
心梦缘-雪雁4 小时前
SQL Server 查询数据存在哪个表里
数据库
lusklusklusk5 小时前
Python 巡检脚本:进程运行状态、数据库写入时效检查及邮件通知与告警
数据库·python·oracle
GeW5 小时前
产业新优势基础软件的人才底盘,从Linux与数据库开始
linux·数据库
SelectDB5 小时前
Doris Arrow Flight SQL 高速读取协议实战:与 Snowflake 客户端取数链路对照
大数据·数据库·数据分析
曼岛_6 小时前
[图解密码学]第4章 古典密码
java·数据库·密码学
瀚高PG实验室7 小时前
HGDB V9.0.5 .pgpass 免密登录提示 IsEncryptNon-base64 encoding 警告处理
数据库·postgresql·瀚高数据库
龙腾AI白云7 小时前
大模型检索增强生成(RAG)的技术原理与架构设计
数据库·python·机器学习·知识图谱