2009-11-25 24 views
1

我有被無效定期,發現這個代碼包:是否在Oracle 10g中改變會話無效Pakage狀態?

ALTER SESSION CLOSE DATABASE LINK; 

可以這樣無效包的狀態?雖然我似乎無法複製它。

create or replace package body invalid_package_state_test is 

procedure test is 
TEMP VARCHAR2(1) := NULL; 

begin 
SELECT 'Y' INTO TEMP FROM [email protected]; 
DBMS_OUTPUT.PUT_LINE('Testing'); 


    EXECUTE IMMEDIATE 
    'ALTER SESSION CLOSE DATABASE LINK DW'; 
    EXCEPTION WHEN OTHERS 
    THEN 
     DBMS_OUTPUT.PUT_LINE('DBLink Not Open'); 
end test; 
end invalid_package_state_test; 

此外,有人可以解釋什麼時候需要ALTER SESSION CLOSE DATABASE LINK;

+0

唯一的原因,我可以看到的是,如果包引用的數據庫鏈接。 – 2009-11-25 06:48:26

回答

2

Q1。關閉數據庫鏈接是否使包無效化?

不知道,但如果讓我懷疑它會因爲「SELECT FROM [email protected]」,不是因爲ALTER。如果您在本地視圖後隱藏[email protected]會發生什麼情況?數據庫鏈接是不時創建/刪除,還是隻創建一次?

Q2。爲什麼關閉數據庫鏈接?

從文檔:

關閉數據庫鏈接

如果您在會話中訪問數據庫 鏈接,然後直到關閉 屆 鏈接保持打開狀態。鏈接在意義上是開放的 ,一個進程在每個 上都有效,通過 鏈接訪問遠程數據庫。這種情況有 以下後果:

如果20用戶打開的會話和訪問 相同的公共鏈接在本地 數據庫,然後20數據庫鏈接 連接處於打開狀態。

如果20個用戶打開會話,並且每個用戶訪問專用鏈接,則將打開20個數據庫鏈接連接。

如果一個用戶啓動一個會話,並且 訪問20個不同的鏈接,則會打開數據庫鏈接連接的20個 。

關閉會話後,在會話中處於活動狀態的鏈接 自動關閉 。您可能有 手動關閉鏈接。 例如,關閉鏈接時:

由 建立的網絡連接在 應用程序中很少使用。

用戶會話必須終止。

如果你想關閉鏈接,發出 下面的語句,其中鏈接名稱 指的是鏈接的名字:

ALTER SESSION CLOSE DATABASE LINK 鏈接名稱;

請注意,此聲明僅會關閉 當前會話中處於活動狀態的鏈接。

Source: Oracle 10gR2 docs