Oracle_fdw ile Oracle’dan PostgreSQL’e Veri Transferi

Zekiye AYDEMİR
3 min readNov 9, 2020

oracle_fdw eklentisi (extension), Oracle veri tabanındaki bir tabloyu PostgreSQL veri tabanında bir tablo olarak göstermenizi sağlayan açık kaynak bir Foreign Data Wrapper’dır(FDW). Böylece PostgreSQL üzerinden Oracle veri tabanı üzerinde bulunan tablomuza SELECT, INSERT, UPDATE ve DELETE işlemleri yapabiliriz, aşağıda örneklerini yapacağız.

Oracle Client Kurulumu

Oracle_fdw eklentisini kullanarak Oracle ile bağlantı kurabilmek için Oracle istemci(client) paketlerinin kurulması gerekir.

CentOS 7 üzerinde PostgreSQL 12 versiyonunun bulunduğu sunucuda http://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/index.html adresinden gerekli olan Oracle Instant Client paketini yüklüyoruz:

yum install http://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/getPackage/oracle-instantclient19.8-basic-19.8.0.0.0-1.x86_64.rpm

Oracle veri tabanına sunucudan erişimi kontrol etmek için sqlplus paketini aşağıdaki komutla kuruyoruz:

yum install http://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/getPackage/oracle-instantclient19.8-sqlplus-19.8.0.0.0-1.x86_64.rpm

Erişeceğimiz Oracle veri tabanı sunucusunun IP ve hostname bilgilerini /etc/hosts dosyasına aşağıdaki gibi ekliyoruz:

echo "192.168.195.191 ol7-19.localdomain  ol7-19" >> /etc/hosts

Sunucu üzerinden erişimi aşağıdaki aşağıdaki gibi test edebiliriz:

/usr/lib/oracle/19.8/client64/bin/sqlplus \
zekiye/password@ol7-19.localdomain:1521/cdb1

Oracle veri tabanı kullanıcısı olan “zekiye”, parolası “password”, Oracle veri tabanı sunucu hostname’i “ol7–19.localdomain”, Oracle veri tabanı portu 1521 ve cdb1 servisine erişiyor.

Erişim testinin başarılı olmasının ardından PostgreSQL işlemlerine geçebiliriz.

Oracle_fdw Extension Kurulumu

Oracle_fdw kurulumu için PostgreSQL 12 versiyonuna uygun olan PostgreSQL NonFree repoyu aşağıdaki gibi ekliyoruz:

yum install https://download.postgresql.org/pub/repos/yum/reporpms/non-free/EL-7-x86_64/pgdg-redhat-nonfree-repo-latest.noarch.rpm

oracle_fdw paketinin kurulumunu aşağıdaki gibi yapıyoruz:

yum install oracle_fdw12.x86_64

oracle_fdw eklentisini, superuser haklarına sahip bir kullanıcıyla veri tabanına bağlanarak aşağıdaki gibi oluşturuyoruz. Veri tabanındaki eklentilerin listesini \dx komutunu kullanarak görebiliriz:

su - postgres
psql -d <veritabanı> -U <kullanıcı>
CREATE EXTENSION oracle_fdw;
\dx

Oracle veri tabanına erişim için oradb adıyla foreign server’ı aşağıdaki gibi oluşturuyoruz. PostgreSQL kullanıcısı zaydemirpg ile Oracle veri tabanı kullanıcısı için eşleştirme (mapping) oluşturuyoruz. PostgreSQL veri tabanında cdb1pg adında yeni bir şema yaratıp Oracle veri tabanındaki “ZEKIYE” şemasındaki tablo yapısını bu şemaya aktarıyoruz.

CREATE SERVER oradb FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver '//ol7-19.localdomain:1521/cdb1');
CREATE USER MAPPING FOR zaydemirpg SERVER oradb OPTIONS (USER 'zekiye', PASSWORD 'password');
CREATE SCHEMA cdb1pg;
IMPORT FOREIGN SCHEMA "ZEKIYE" FROM SERVER oradb INTO cdb1pg;

Oracle veri tabanındaki “ZEKIYE” şemasının PostgreSQL veri tabanındaki cdb1pg şemasına aktarımın ardından Oracle erişim testinde sorguladığımız my_table ve people tablolarına PostgreSQL’de cdb1pg şemasında erişebiliyoruz.

Oracle veri tabanındaki tablolar üzerinde SELECT, UPDATE, DELETE ve INSERT işlemlerini aşağıdaki gibi gerçekleştirebiliriz. Foreign tabloların listesini \det+ komutu ile aşağıdaki gibi görebiliriz:

Son olarak, cdb1pg şemasındaki my_table tablosunu public.my_table adında yeni oluşturarak aşağıdaki gibi aktarabiliriz.

Bu yazımda oracle_fdw kurulumu ve kullanımından temel olarak bahsettim. Daha ayrıntılı bilgiyi projenin kendi sayfası olan https://github.com/laurenz/oracle_fdw sayfasında bulabilirsiniz.

--

--

Zekiye AYDEMİR

PostgreSQL Certified DBA | MongoDB Certified DBA | AWS Certified Admin