亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle存儲過程報錯ORA-02069: global_names parameter must be set to TRUE for this operation

發布時間:2020-07-05 03:55:31 來源:網絡 閱讀:1228 作者:hbxztc 欄目:關系型數據庫

今天開發給發郵件過來說一個存儲過程想通過dblink往目標庫insert數據,但報錯ORA-02069: global_names parameter must be set to TRUE for this operation,想讓我根據錯誤提示在數據庫上修改global_names參數修改為True。

先來看看官方文檔是如何介紹這個參數的:

GLOBAL_NAMES specifies whether a database link is required to have the same name as the database to which it connects.
If the value of GLOBAL_NAMES is false, then no check is performed. If you use or plan to use distributed processing, then Oracle recommends that you set this parameter to true to ensure the use of consistent naming conventions for databases and links in a networked environment.

從下面的查詢可以看出global_names參數可以在線進行修改的

zx@TEST>col name for a30
zx@TEST>select name,ISSES_MODIFIABLE,ISSYS_MODIFIABLE from v$parameter where name='global_names';

NAME			       ISSES_MODIFIABL ISSYS_MODIFIABLE
------------------------------ --------------- ---------------------------
global_names		       TRUE	       IMMEDIATE

看完了這個參數,再來看看開發的存儲過程代碼,其中insert語句中是用到了一個序列,所以導致了這個報錯。先在測試數據庫上創建了一個簡單的存儲過程來模擬現再這個問題

創建一個dblink

zx@TEST>create database link link_orcl connect to zx identified by "zx" using 'orcl';

Database link created.

zx@TEST>select * from dual@link_orcl;

DUM
---
X

先創建一個不帶序列的遠程insert的存儲過程

zx@TEST>create or replace procedure pro_a as
  2  begin
  3  insert into t2@link_orcl (c1) values('a');
  4  commit;
  5  end;
  6  /

Procedure created.

執行這個存儲過程,觀察結果,數據可以正常插入

zx@TEST>select * from t2@link_orcl;

no rows selected

zx@TEST>exec pro_a;

PL/SQL procedure successfully completed.

zx@TEST>select c1 from t2@link_orcl;

C1
---
a

創建一個序列,并修改上面的存儲過程

zx@TEST>create sequence seq_a;

Sequence created.

zx@TEST>create or replace procedure pro_a as
  2  begin
  3  insert into t2@link_orcl (c1,n1) values('a',seq_a.nextval);
  4  commit;
  5  end;
  6  /
  
Procedure created.

執行修改后的存儲過程,重現上面的錯誤ORA-02069

zx@TEST>exec pro_a;
BEGIN pro_a; END;

*
ERROR at line 1:
ORA-02069: global_names parameter must be set to TRUE for this operation
ORA-06512: at "ZX.PRO_A", line 3
ORA-06512: at line 1

先在session層面修改global_names參數,再次執行存儲過程,又出現了新的錯誤:說兩端的數據庫名不一致。

zx@TEST>alter session set global_names = true;

Session altered.

zx@TEST>exec pro_a;
BEGIN pro_a; END;

*
ERROR at line 1:
ORA-02085: database link LINK_ORCL connects to ORCL
ORA-06512: at "ZX.PRO_A", line 3
ORA-06512: at line 1

zx@TEST>!oerr ora 2085
02085, 00000, "database link %s connects to %s"
// *Cause: a database link connected to a database with a different name.
//  The connection is rejected.
// *Action: create a database link with the same name as the database it
//  connects to, or set global_names=false.

那現在問題來了,實際生產中源端和目標端的數據庫名肯定是不一致的,所以修改這個參數并不能解決這個問題。

只能想其他的辦法來繞過這個錯誤,這里給開發提了兩個建議:

1、把存儲過程部署到目標端來避免遠程insert中調用sequence

2、在源端存儲過程中引入臨時表,先把數據插入臨時表,再從臨時表插入到遠端表。


在MOS上搜到了一個相關文檔(ORA-02069 DURING REMOTE INSERT OF A LOCAL SEQUENCE (文檔 ID 1047673.6))跟我們的問題描述一致。


官方文檔:http://docs.oracle.com/cd/E11882_01/server.112/e40402/initparams098.htm#REFRN10065


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巴青县| 泸溪县| 石河子市| 天等县| 墨玉县| 宁国市| 慈利县| 孟州市| 横峰县| 乌海市| 湾仔区| 集贤县| 贡嘎县| 绥棱县| 扶风县| 成安县| 上虞市| 荣昌县| 平凉市| 博客| 普洱| 时尚| 台东县| 佳木斯市| 许昌市| 炎陵县| 黄陵县| 马公市| 香格里拉县| 凤冈县| 呈贡县| 汶上县| 永安市| 区。| 聊城市| 深泽县| 马尔康县| 锡林浩特市| 互助| 搜索| 武陟县|