2013-04-10 55 views
0

我有包含2個架構「架構-1」,「架構-2」的「PROD-1」數據庫 我創建了專用dblink「DBLINK-1 「在兩個模式&他們指向不同的目標。 這裏是我的配置在相同數據庫的不同架構中使用的相同DBLink名稱 - 使Procs失效

DB名稱 - >源架構 - >目標DB - >目標模式 - > DBLINK名稱

PROD-1 - >架構 - 1 - > TPRD-1 - > TSchema-1 - > DBLINK-1

PROD -1 - >模式-2 - > TPRD -2 - > TSchema -2 - > DBLINK-1

我用這DBLINK在過程和部署在兩種模式-1 & Schema-2 當我在Schema-1中編譯過程時,它是invali約會Schema-2 proc &反之亦然。 這裏是樣品PROC

CREATE OR REPLACE procedure test_dblink 

is v_cnt number;

begin 
    select count(*) into v_cnt from [email protected]; 

end;

按我的理解,DBLINK-1是爲私人DBLINK架構-1 &模式-2;因此它不應該相互衝突。然而,當我在兩個模式中同時執行這些程序時,一個程序成功執行&另一個人正在等待第一個完成然後完成。

這是可能會發生

  1. 架構-1 PROC開始第一和PROC狀態是有效的。 Schema-2 proc正在等待
  2. Schema-1 proc現已完成。 Schema-2 proc出現等待模式&使Schema-1中的DBLink-1失效。因此Schema-1 proc現在處於無效狀態
  3. Schema-2 proc運行並完成。模式2 PROC現在是有效的

我的問題是,我該如何管理兩個不同的架構相同的DB同DBLINK沒有這個矛盾呢?

欣賞你幫

+0

這是不好的做法,以不同的模式命名對象相同,但是......你是對的 - dblinks是私人對象。你是從用戶自己創建程序嗎? (我的意思是,你在運行'create procedure'時登錄爲schema-1?) – haki 2013-04-11 07:22:33

+0

Hello Haki,謝謝你的迴應。最後,我通過使用Oracle創建P1票證來發現問題。錯誤7395995 – Lava 2013-04-17 19:22:48

回答

0

我們解決了使用同義詞。爲您的數據庫鏈接使用唯一的名稱。然後在每個模式中爲您使用的每個遠程對象創建同義詞。這樣,您仍然可以在兩種模式中使用相同的PL/SQL代碼。

相關問題