2017-12-27 700 views
0

Oracle 데이타베이스에는 데이터베이스 링크를 통해 하나의 DB에서 다른 DB로 데이터를 복사하는 주기적으로 실행되는 큰 PL/SQL 프로 시저가 있습니다. 다음과 같은 오류 일부 시간 :ORA-03150 : 데이타베이스 링크 통신 채널의 파일 끝

execute immediate 'set constraints all deferred'; 

그런 절차가 나는 인해 어떤 점에서 실패 추측 일부 삽입 및 업데이트를 수행합니다

ORA-03150: end-of-file on communication channel for database link 
ORA-02063: preceding line from DBPREMOTE 
ORA-06512: at "DBLOCAL.JOB_NAME", line 710 
... 
ORA-06512: at line 1 

라인 (710)은 절차의 첫 번째 줄입니다 PK, 데이터가 유효하지 않거나 기타 이유로. 나는 그것이 실제로 실패하고 있기 때문에가 아니라, 첫 번째 것이므로 예외가 그 라인을 가리키고 있다고 생각한다. 그러나 나는 진짜 예외를 확실히 알지 못한다.

처리 할 수 ​​있도록 실제 예외를 얻을 수있는 기회가 있습니까?

FOR aLink IN (SELECT * FROM V$DBLINK) LOOP 
    DBMS_SESSION.CLOSE_DATABASE_LINK(aLink.DB_LINK); 
END LOOP; 

또는

DECLARE 
    DATABASE_LINK_IS_NOT_OPEN EXCEPTION; 
    PRAGMA EXCEPTION_INIT(DATABASE_LINK_IS_NOT_OPEN, -2081); 
BEGIN 
    DBMS_SESSION.CLOSE_DATABASE_LINK('DBPREMOTE '); 
EXCEPTION 
    WHEN DATABASE_LINK_IS_NOT_OPEN THEN 
     NULL; 
END; 

연결 어쨌든 하락하는 경우 :

+0

INSERT 실패보다 약간 이상한 네트워크가있을 가능성이 큽니다. INSERT가 실패한 경우에도 여전히 관련 오류가 발생합니다 (테스트 할 수 있습니다 - 가정하지 마십시오!) – Ben

+0

이것은 분산 트랜잭션이므로 첫 번째 단계는'alert.log'에서 더 자세한 정보를 찾는 것입니다. ** 원격 서버 **. 그러면 트랜잭션이 실패한 이유를 이해할 수있는 충분한 정보를 얻을 수 있습니다. – APC

+0

우리는 단지 alert.log를 세부 사항을받은 우리는 점점 : 'TNS-12535을 : TNS : 505 TNS-00505 : 12560 메인 ERR 코드를 NT : 작업이 NS 차 ERR 코드를 타임 아웃 작업이 시간 초과 nt 보조 오류 코드 : 110 nt OS 오류 코드 : 0' 로컬 DB에, 원격 서버의 alert.log에 아무 것도 없습니다. 그래서 우리는 그것이 지역 절차에있는 것이라고 생각하는 경향이 있습니다. 나는 2 시간이 지난 후에 시간 초과가 정상이라고 생각한다. – detoro84

답변

0

잠재적 인 해결 방법은이 같은 PL/SQL 절차에 사용 후 DB 링크를 닫습니다 수 , 당신은 당신의 네트워크 친구들과 이야기해야합니다. 아마도 방화벽 설정으로 연결을 끊을 수 있습니다. 그러나 다른 많은 이유가있을 수 있습니다.

+0

예,이 해결 방법으로 해결 될 수있는 연결 시간 초과 문제가 있지만 링크 시간 초과를 너무 느리게하는 절차가 있습니다. – detoro84