개발/데이터베이스
oracle_fdw 연결확인 및 문제 발생시 점검/해결 방법
피터JK
2025. 4. 16. 14:31
728x90
✅ 1. Oracle 연결 상태 점검 방법
① Foreign server 등록 확인
SELECT srvname, srvoptions
FROM pg_foreign_server
WHERE srvname = 'oracle_server'; -- 서버 이름 확인
dbserver=//host:port/service 형식인지 확인
② 사용자 매핑 확인
SELECT * FROM pg_user_mappings
WHERE srvid = (SELECT oid FROM pg_foreign_server WHERE srvname = 'oracle_server');
user, password 제대로 설정되어 있는지 확인
③ 실제 연결 테스트 (foreign table SELECT)
SELECT * FROM foreign_table_name LIMIT 1;
- 정상 동작하면 연결 OK
- 오류 발생 시 로그 또는 오류 메시지 참고
❗ 오류 발생 시 트러블슈팅 팁
🔸 [1] ERROR: could not connect to Oracle: ORA-xxxxx
이건 거의 대부분 접속 정보 오류이다.
✔️ 점검 리스트
- dbserver=//호스트:포트/서비스이름 형식이 맞는지?
- Oracle DB 쪽 tnsnames.ora와 비교
- Oracle에서 직접 SQL*Plus로 접속 시도해서 되는지 확인:
- sqlplus oracle_user/oracle_password@//host:port/service
🔸 [2] ERROR: could not load library "oracle_fdw": ...
이건 oracle_fdw가 PostgreSQL에 제대로 설치 안 됐을 때 발생.
✔️ 점검 리스트
- make + make install 제대로 했는지?
- oracle_fdw.so 가 PostgreSQL lib 폴더에 존재하는지?
find /usr/lib/postgresql -name oracle_fdw.so
- Oracle Instant Client 설치되어 있고 환경변수 설정됐는지?
export ORACLE_HOME=/path/to/instantclient
export LD_LIBRARY_PATH=$ORACLE_HOME
PostgreSQL을 해당 환경에서 재시작해줘야 반영됩니다.
🔸 [3] ERROR: could not convert Oracle type ... to PostgreSQL type
이건 Oracle 쪽 컬럼 타입이 PostgreSQL에서 매핑되지 않을 때 발생합니다.
✔️ 해결 방법
- foreign table 만들 때 컬럼 타입을 PostgreSQL에 맞게 수동 지정
- 예: NUMBER(38,0) → bigint, VARCHAR2 → text 등
🔸 [4] segmentation fault or server closed the connection unexpectedly
이건 라이브러리 충돌, 환경변수 문제일 수 있습니다.
✔️ 조치
- oracle_fdw 빌드 시 PostgreSQL과 Oracle Client 버전 호환 확인
- LD_LIBRARY_PATH가 제대로 설정되지 않았을 가능성 높음
- PostgreSQL 서버 로그 확인 (/var/log/postgresql/postgresql-XX-main.log 등)
✅ 로그 파일 꼭 확인하세요
PostgreSQL 로그 위치 예시:
# Ubuntu/Debian
/var/log/postgresql/postgresql-14-main.log
# CentOS/RHEL
/var/lib/pgsql/14/data/log
오류 메시지 상세하게 기록돼 있습니다.
💡 추가 팁
- foreign table 대신 IMPORT FOREIGN SCHEMA로 자동 생성 가능:
IMPORT FOREIGN SCHEMA "HR"
FROM SERVER oracle_server
INTO public;
단, Oracle에서 권한이 있는 테이블만 가져온다.
728x90