이 포스트는 Ubuntu 환경 및 ubuntu docker 에서 Postgresql DB로 Oracle DB에 DB LINK를 걸어버리는 내용입니다!
Overview
- ubuntu에 Postgresql을 설치합니다.
- Oracle fdw를 설치합니다.
- Postgresql에 Oracle fdw 확장모듈을 설치합니다.
- Pstgresql에 외부 테이블을 정의합니다.
- 사용해봅시다!
Index
Postgresql 설치
- ubuntu 16:04 docker image를 다운받아 실행한 상태라는 전제하에 작성된 글입니다.
-
-
-
apt-get update 및 upgrade apt-get update 후 apt-get upgrade 를 통해 apt 모듈을 업데이트 해줍시다.
중간에 한번 물어보는데 Y를 눌러줍시다.
- posgtreasql install
apt-get install postgresql 을 입력해 설치를 진행해 줍시다.
중간에 한번 물어볼텐데 마찬가지로 Y를 눌러줍시다.
- dpkg -l |grep postgres 를 입력해 설치가 잘 되었는지 확인합시다.
요렇게 표시되면 잘 된겁니다.
- cat /etc/passwd | grep postgres 를 입력하여 관리자 계정이 잘 생성되어 있는지 확인합니다.
postgres 로 잘 생성되어 있습니다.
-
Postgresql 상태 확인 및 실행 /etc/init.d/postgresql status 을 입력해서 상태를 확인합시다.
보통 이렇게 종료되어 있습니다.
/etc/init.d/postgresql start 를 입력해 Postgresql을 실행한 후, psql -U postgres 를 입력하여 로그인 해 봅시다.
보시다시피 로그인이 되지 않습니다. 초기 비밀번호가 설정이 되어 있지 않아서 입니다.
로그인을 하기 위해, 설정을 변경하기 위해 apt-get install vim를 입력해 vi 에디터를 설치합시다.
중간에 물어보면 Y를 살포시 입력해주세요.
vi /etc/postgresql/9.5/main/pg_hba.conf 를 입력해서 설정 파일을 열어 줍시다. (pg_hba.conf는 Postgresql의 인증 관련 설정 파일입니다.) 열면 엄청나게 긴 내용이 있는데 우리는 전부 무시하고 맨 아래로 내려갑시다!
커서를 아래 사진에 빨간 박스 친 곳 으로 보낸 후 i를 눌러 인설트 모드로 변경, 내용을 peer에서 trust로 수정해 줍시다.
psql -U postgres 를 입력하여 로그인 해 봅시다.
이제 로그인이 됩니다! 보안을 위해서는 비밀번호를 설정해주고, Postgresql을 외부에서 조회할 수 있도록 설정파일의 변경이 필요합니다만, 그 부분은 다른 블로그를 찾아봐 주시고, 저는 바로 Oracle_fdw 설치로 가겠습니다. \q 를 입력하여 우분투로 돌아와 주세요.
-
-
-
- OCI 라이브러리 설치 Oracle fdw는 OCI(Oracle Call Interface)라이브러리를 사용하여 Oracle DB에 엑세스 합니다. 따라서 OCI 라이브러리를 설치해야 하죠. OCI는 OTN(Oracle Technology Network)에서 배포하고 있습니다.
oracle-instantclientxx.x-basic oracle-instantclientxx.x-devel oracle-instantclientxx.x-sqlplus 를 다운로드 해서 docker에 넣어 줍시다.
.rpm 파일은 RPM 패키지 매니저(RPM Package Manager←Red Hat Package Manager)는 원래 레드햇에서 사용되었던 패키지 파일로서 ubuntu 설치를 위해서는 alien이라는 모듈이 필요합니다. apt-get install alien dpkg-dev debhelper build-essential 을 입력하여 에일리언 패키지와 설치에 필요한 여타 모듈들을 설치해 줍시다.
사진은 짧지만 밑에 주루루루룩 올라옵니다. 중간에 Y 입력인 이제 아시죠?
이제 다운받은 rpm 파일들을 설치해 줍시다. alien -i xxx.rpm 입력하면 설치가 진행됩니다. basic -> devel -> sqlplus 순서로 설치합시다.
사진은 basic 설치입니다. 나머지도 하나씩 설치해줍시다. basic이 오래걸리고 나머지는 빠르게 설치되는 편입니다.
- Oracle_fdw 라이브러리 설치
Oracle fdw를 다운로드해 봅시다.
Oracle fdw는 github에서 다운로드 받아 docker에 넣어 줍시다.
zip 파일로 받으셨으면 압축을 풀어주세요. unzip 을 설치해서 압축을 풀어주시면 됩니다.
이제 Oracle fdw를 설치하면 되는데… 그에 앞서 선행 프로그램들을 설치해 줍시다.
이 4개의 파일들을 설치해 줍니다.
apt-get install python-psycopg2 apt-get install libpq-dev apt-get install postgresql-server-dev-all apt-get install postgresql-common Y눌러주시는건 아시죠?
Oracle fdw 폴더로 들어가서 make를 해 줍시다.
make: Nothing to be done for ‘all’. 요런 에러가 발생하면 make clean 을 해주신 후 make 해주세요.
위의 사진처럼 잘 make 되면 make install 해줍시다.
- Oracle_fdw EXTENSION
이제 사용하려는 데이터베이스에 대해 SQL의 CREATE EXTENSION 명령을 사용하여 oracle_fdw 확장 모듈을 설치해야 합니다.
그런데 postgresql에 들어가서 CREATE EXTENSION 명령을 사용하면 아래와 같은 에러가 발생하게 됩니다.
oracle_fdw.so를 로드할 libaio1가 없기 때문이므로 apt-get install libaio1를 입력해 인스톨 해 줍시다.
다시 postgresql로 들어가서 해봅시다!
잘 됩니다! 이제 사전 설치 작업은 종료되었습니다. 이제 아래에서 본격적으로 Db link를 연결하고 사용해 봅시다.
-
- 외부 서버 만들기
Oracle 데이터베이스에 액세스하기위한 연결 정보를 외부 서버 (oradb)로 정의합니다.
=# CREATE SERVER oradb FOREIGN DATA WRAPPER oracle_fdw -# OPTIONS (dbserver ‘//xxx.xxx.xxx.xxx:xxxx/XE’); 위 두줄을 입력하면 CREATE SERVER 라는 대답이 돌아오면 성공!
테스트 용 일반 데이터베이스 사용자 postgresql유저가 정의한 외부 서버를 사용할 수 있도록 권한을 부여합니다.
=# GRANT USAGE ON FOREIGN SERVER oradb TO postgresql유저; 위에 대로 입력하면 GRANT 라는 대답이 돌아오면 성공!
-
사용자 매핑 정의 위에서 만든 외부 서버(oradb)와 사용자(postgresql유저)의 매핑을 정의합니다. PostgreSQL에서 사용자(postgresql유저)가 외부 테이블에 액세스 할 때 위에서 정의한 oradb서버에서 ‘oracle유저id’와 ‘oracle유저pass’로 로그인하게 됩니다.
=# CREATE USER MAPPING FOR postgresql유저 SERVER oradb OPTIONS (USER ‘oracle유저id’ , PASSWORD ‘oracle유저pass’); 라고 위에 입력하면 CREATE USER MAPPING 라는 대답이 돌아오면 성공!
- 외부 테이블 정의
Oracle 데이터베이스에 테이블 뷰를 PostgreSQL을 외부 테이블로 정의합니다. Oracle 데이터베이스의 테이블 ORA_TEST1을 외부 테이블 pg_test1로 정의해 봅시다.
=> CREATE FOREIGN TABLE pg_test1 -> ( (> id int OPTIONS (key ‘true’) NOT NULL, (> etc varchar (100), (> colldate date (>) -> SERVER oradb112 OPTIONS (SCHEMA ‘oracle유저id’, TABLE ‘ORA_TEST1을’); 위에대로 (link를 붙일 오라클 table과 같은 형태로 선언하되 “OPTIONS (key ‘true’)”는 해당 열이 기본키임을 선언하는 부분이며 not null은 비면 안된다는 것.)선언을 해 주면 CREATE FOREIGN TABLE 대답이 돌아옵니다. 나중에 select 가 아닌 insert update delete를 사용할때는 반드시 “OPTIONS (key ‘true’)”을 사용하여 기본키를 선언해 놓은 상태여야 합니다.
- 외부 테이블 사용
위의 대로 모든게 갖추어 지셨다면 select insert update delete 등의 쿼리로 외부 테이블을 사용 할 수 있게 됩니다.
=> select * from _ora_test1; id | etc | colldate ——————+——+———— 030F00E82F00002F | test | 2019-06-20 030F00E802000002 | test | 2019-06-20 (2 rows)
- 외부 서버 만들기
Oracle 데이터베이스에 액세스하기위한 연결 정보를 외부 서버 (oradb)로 정의합니다.
이상으로 Postgresql 에서 Oracle 에 DB Link를 연결하는 방법에 대해 포스트해 보았습니다. 유익한 자료가 되셨길 바랍니다.