Oracle이 Informix에 연결된 경우 원격 에이전트 오류에 대한 RPC 연결이 끊어졌습니다.

StackOverflow https://stackoverflow.com/questions/964455

  •  12-09-2019
  •  | 
  •  

문제

Informix에서 데이터를 가져와 Oracle의 테이블에 삽입하고 원본 테이블의 플래그를 업데이트하는 간단한 데이터 가져오기/업데이트 프로그램에 문제가 있습니다.설정은 이렇습니다

Pro*C program calls a PL/SQL procedure
The procedure 
  opens a cursor on Informix, 
  loops through each row
    insert the data into an oracle table
    commit
    update the "new data" flag in Informix (i.e. stop a re-import)
    commit

특정 Oracle 오류를 중지하려면 두 개의 커밋이 필요합니다(어느 것인지 잊어버렸지만 업데이트되는 테이블이 두 개의 데이터베이스에 있고 단일 커밋으로 이를 처리할 수 없기 때문입니다).이 코드는 소스 테이블의 레코드 수가 적은 경우(5-10) 잘 작동하지만 레코드 수가 1000개를 초과하는 경우에는 작동하지 않습니다.Oracle 로그 디렉터리의 경고 로그에는 "원격 에이전트에 대한 RPC 연결이 끊어졌습니다"라는 오류가 표시됩니다.Informix 디렉토리에는 해당 오류가 없으므로 드라이버에 문제가 있는 것으로 의심됩니다.우리는 Red Hat에서 unixODBC 드라이버와 함께 Oracle 10.2를 사용하고 있습니다.

해결 방법이나 실제로 해결 방법에 대한 아이디어가 있는 사람이 있습니까?이 오류 메시지에 대한 유용한 정보는 없는 것 같습니다. 대부분의 페이지에는 "Oracle 문제가 아닙니다"라는 문구만 나와 있습니다.

도움이 되었습니까?

해결책

일반적으로 COMMIT는 열린 커서를 닫습니다.Informix의 커서를 WITH HOLD 커서로 만들어야 할 수도 있습니다(ESQL/C 전문 용어 - ODBC로 변환해야 함).버퍼링으로 인해 몇 개의 행이 작동할 수도 있습니다.단일 페치 작업은 Informix에서 여러 개의(아마도 10개 이상) 레코드를 수집할 수 있으며, 더 많은 것을 위해 데이터베이스로 돌아가야 할 때(커서가 닫힐 때)에만 문제를 알 수 있습니다.

나는 이것을 설명하는 것이 완전히 마음에 들지 않습니다.UPDATE와 COMMIT는 커서를 닫힌 것으로 표시해야 합니다.

Informix ODBC 드라이버(다른 공급업체의 Informix용 ODBC 드라이버와 반대)를 사용한다고 가정하면 프로그램이 시작되기 전에 환경에서 SQLIDEBUG=2:xyz를 설정하여 이를 디버깅할 수 있습니다.그러면 이름이 'xyz_###'으로 시작하는 파일이 생성됩니다. 여기서 '###'은 일련의 숫자(16진수일 수 있음)입니다.이 파일은 다음으로 해석될 수 있습니다. sqliprint.이는 귀하의 애플리케이션과 Informix 데이터베이스 서버 사이에 전달된 정보를 보여주고, 유선을 통해 전송된 데이터의 그룹화 등을 보여줄 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top