2009-11-25 3 views
1

나는 정기적으로 무효화 된 패키지를 가지고 있으며 코드에서 이것을 발견했다 :세션을 변경하면 Oracle 10g에서 Pakage States가 무효화됩니까?

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

만 이유입니다. –

답변

2

1x. 데이터베이스 링크를 닫으면 패키지가 무효화됩니까?

확실하지,하지만 만약 그렇다면 나는 때문에 "SELECT FROM [email protected]"때문이 아니라의 ALTER이 될 것입니다 생각한다. 로컬보기 뒤에서 [email protected]을 숨기면 어떻게됩니까? db 링크는 수시로 생성/삭제되거나 한 번만 생성됩니까?

질문 2. 왜 데이터베이스 링크를 닫아야합니까? 문서에서

: 당신이 세션을 닫을 때까지이 세션에서 데이터베이스 링크에 액세스하는 경우

닫기 데이터베이스

링크, 다음 링크가 열려 있습니다. 링크가 이라는 의미에서 프로세스가 을 통해 액세스 된 원격 데이터베이스 각각에 대해 활성화되어 있다는 의미로 링크가 열려 있습니다. 이러한 상황은 다음과 같은 결과가 있습니다

20 만약 사용자 열린 세션과 로컬 데이터베이스에 액세스 같은 공공 링크를, 다음 20 데이터베이스 링크 연결이 열려 있습니다.

20 명의 사용자가 세션을 열고 각 사용자가 개인 링크에 액세스하는 경우 20 데이터베이스 링크 연결이 열려 있습니다.

한 사용자가 세션을 시작하고 이 20 개의 다른 링크에 액세스하는 경우 20 데이터베이스 링크 연결이 열려 있습니다.

세션을 닫으면 해당 세션에서 활성화 된 링크가 자동으로 닫힙니다 ( ). 수동으로 링크를 닫으려면 경우가 있습니다. 예를 들어 다음과 같은 링크를 닫습니다. 링크로 설정된 네트워크 연결이 자주 사용되지 않습니다.

사용자 세션을 종료해야합니다.

당신이 LINKNAME 링크의 이름을 참조하는 다음 문을 발행, 링크를 종료하려면 다음

ALTER SESSION CLOSE 데이터베이스 링크 LINKNAME;

이 문은 현재 세션에서 활성화 된 링크 만 닫습니다. 패키지가 DB 링크를 참조하는 경우 내가 볼 수

Source: Oracle 10gR2 docs

관련 문제