跨資料庫數據同步時建立 Database Link,INSERT 操作拋出 ORA-02069: global_names parameter must be set to TRUE for this operation,本文揭示核心成因與一行代碼修復方案。
SDH,用戶 NM/NMGSGX,用戶 GS/GS-- 錯誤建法:DB Link 名稱自定義
CREATE DATABASE LINK testdb CONNECT TO nm IDENTIFIED BY nm USING 'sdh';
-- 查詢正常
SELECT * FROM a@testdb;
-- INSERT 失敗
INSERT INTO a@testdb SELECT * FROM a;
-- ORA-02069: global_names parameter must be set to TRUE for this operation
Oracle 要求:執行 DML(INSERT/UPDATE/DELETE)時,DB Link 名稱必須與目標資料庫的 GLOBAL_NAME(通常等同於 SID)完全一致。單純查詢不受此限制。
-- DB Link 名稱 = 目標端 SID (SDH)
CREATE DATABASE LINK sdh CONNECT TO nm IDENTIFIED BY nm USING 'sdh';
-- INSERT 成功
INSERT INTO a@sdh SELECT * FROM a;
SELECT * FROM GLOBAL_NAME;
若實例啟用了 GLOBAL_NAMES=TRUE(推薦生產環境開啟),DB Link 命名強制約束生效。
CREATE DATABASE LINK <target_sid> ...SHOW PARAMETER GLOBAL_NAMES 確認為 TRUEGLOBAL_NAME 為準建立 Link