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;
연결 어쨌든 하락하는 경우 :
INSERT 실패보다 약간 이상한 네트워크가있을 가능성이 큽니다. INSERT가 실패한 경우에도 여전히 관련 오류가 발생합니다 (테스트 할 수 있습니다 - 가정하지 마십시오!) – Ben
이것은 분산 트랜잭션이므로 첫 번째 단계는'alert.log'에서 더 자세한 정보를 찾는 것입니다. ** 원격 서버 **. 그러면 트랜잭션이 실패한 이유를 이해할 수있는 충분한 정보를 얻을 수 있습니다. – APC
우리는 단지 alert.log를 세부 사항을받은 우리는 점점 : 'TNS-12535을 : TNS : 505 TNS-00505 : 12560 메인 ERR 코드를 NT : 작업이 NS 차 ERR 코드를 타임 아웃 작업이 시간 초과 nt 보조 오류 코드 : 110 nt OS 오류 코드 : 0' 로컬 DB에, 원격 서버의 alert.log에 아무 것도 없습니다. 그래서 우리는 그것이 지역 절차에있는 것이라고 생각하는 경향이 있습니다. 나는 2 시간이 지난 후에 시간 초과가 정상이라고 생각한다. – detoro84