【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博客

相关推荐
ningmengjing_1 小时前
Redis 从入门到实战:Python操作全攻略
数据库·redis·python
隔窗听雨眠2 小时前
OceanBase旁路导入与自增主键冲突深度解析:原理、排查与解决方案
java·服务器·数据库
ZCBUS实时计算2 小时前
政务海量分库分表汇聚实战:基于 3 节点 ZCBUS 集群完成医保 10TB 数据实时整合
大数据·数据库·数据仓库·sql·dba·etl·政务
名不经传的养虾人2 小时前
从0到1:企业级AI项目迭代日记 Vol.81|工具调用前,先过一道审批门
数据库·人工智能·ai编程·ai工作流·企业ai
Databend2 小时前
Databend 产品更新:从 Spatial Index Join 到 Eval 数据管道
大数据·数据库·sql
数据知道2 小时前
SQL 注入从入门到精通:手工注入 + sqlmap 自动化
网络·数据库·sql·网络安全·自动化
lilian2332 小时前
Harmony os 技术实战|拼豆制图06:收藏 ID、生成记录与重启恢复怎么不打架
android·java·数据库·harmonyos
2601_955759623 小时前
ClaudeAPI成本中心与业务标签设计指南
android·java·数据库
仙人球部落 揞殺3 小时前
Sql Server查询性能优化之走出索引的误区
数据库·性能优化