Ora2pg
Ora2pg, Oracle’dan Postgresql göç (migration) yapabilen ücretsiz bir yazılımdır.
Özellikleri, çoğunlukla Oracle’a yönelik olsa da MySQL’ den tam exportu da destekler.
Özellikleri ;
- Export schema (tables, view, mview sequences, indexes, unique, P/F key, check
constraints.), - Export grup ve kullanıcı hakları,
- Export range/list partitions, sub partitions,
- İsimlerini belirterek sadece istenen tabloları export,
- Export predefined functions, triggers, procedures, packages package bodies,
- Verinin tamamını veya WHERE koşulu ile export,
- Oracle BLOB object (PG BYTEA.),
- Export Oracle views (PG tablo.),
- Export Oracle kullanıcı tanımlı types,
- Tüm platformları destekler (ms linux vb.),
- Oracle tablolarını PG foreign data wrapper tablo olarak export,
- Oracle veritabanı bileşenlerini raporlayabilir,
- Oracle veritabanından göç maliyetini değerlendirebilir,
- Oracle veritabanından göç zorluk seviyesini değerlendirebilir,
- Pentaho Data Integrator (eski ismi Kettle) ile kullanılabilir XML ktr dosyalarını
oluşturabilir.
Tüm özellikler için aşağıdaki linki ziyaret edebilirsiniz.
ora2pg.darold.net/documentation.html#FEATURES
Kurulum

Büyük veri göçlerinde tüm sunucuların aynı network sınıfında (arada routing NAT
vb. olmamalı, özellikle NAT yavaşlatır.) ve minimum 1GBPS hızda olması gerekir.
Kesinti süresi azalıp veri boyutu büyüdükçe min 10GBPS üstü network ve yüksek IOPS
kapasitesine ihtiyaç olabilir.
Adım 1
Oracle veritabanına bağlanabilmesi için oracle clienta ihtiyaç var.
# root kullanıcısı ile (192.168.56.1 ) mkdir /ora2pgsetup cd /ora2pgsetup wget https://download.oracle.com/otn_software/linux/ instantclient/213000/instantclient-basic-linux.x64-21.3.0.0.0.zip wget https://download.oracle.com/otn_software/linux/ instantclient/213000/instantclient-sqlplus-linux.x64-21.3.0.0.0.zip wget https://download.oracle.com/otn_software/linux/ instantclient/213000/instantclient-sdk-linux.x64-21.3.0.0.0.zip mkdir /opt/oracle unzip instantclient-basic-linux.x64-21.3.0.0.0.zip -d /opt/oracle unzip instantclient-sqlplus-linux.x64-21.3.0.0.0.zip -d /opt/oracle/ unzip instantclient-sdk-linux.x64-21.3.0.0.0.zip -d /opt/oracle
Adım 2
.profile’ lar düzenlenir. Kurulum sırasında da ora2pg’yi kullanırken de oracle
clienta ihtiyaç vardır. Bu yüzden profile’lar doğru ayarlanmalıdır aksi halde hata alınır.
(hem root hem de ora2pg’yi kullanacak standart kullanıcıların da .profile’ları
düzenlenmeli)
vim ~/.profile # Dosyasına aşağıdaki satırlar eklenir. export LD_LIBRARY_PATH=/opt/oracle/instantclient_21_3 export PATH=”/opt/oracle/instantclient_21_3:$PATH” export ORACLE_HOME=/opt/oracle/instantclient_21_3 # Mevcut oturumda geçerlilik kazanması için source ~/.profile # Kurulum testi which sqlplus #çıktının aşağıdaki gibi olması gerekir. /opt/oracle/instantclient_21_3/sqlplus
Oracle instant client kullanıldığı için ld_library_path ile oracle_home dizinleri
aynı olur.
Adım 3
ora2pg için gerekli paketler kurulur.
apt install libdbd-pg-perl apt install libdbi-perl apt install dpkg-dev apt install debhelper apt install gcc apt install build-essential apt install libaio1 apt install make apt install libpq-dev apt install postgresql-client
Not: ora2pg, postgresql veritabanı sunucusuna kurulacaksa postgresql-client’a gerek
yok.
Adım 4
ora2pg indirilerek kurulumu yapılır.
mkdir /ora2pgsetup/ora2pgsetup cd /ora2pgsetup/ora2pgsetup wget https://github.com/darold/ora2pg/archive/refs/heads/master.zip unzip ora2pg-master.zip cd ora2pg-master/ perl Makefile.PL make && make install
Ora2pg defaultta /etc/ora2pg/ora2pg.conf konfigurasyon dosyasından çalışır./usr/local/bin/ora2pg -c /etc/ora2pg/farklı_1_ora2pg.conf
ile farklı bir konfigurasyon dosyasından da çalıştırılabilir.
Adım 5
Önce clientlarla bağlantılar test edilir.
# Oracle bağlantı testi mehmed@dataera:~$ sql system/welcome1@10.71.5.121:1521/orcl.orcl SQLcl: Release 21.3 Production on Wed Jul 20 06:07:05 2022 Copyright (c) 1982, 2022, Oracle. All rights reserved. Connected to: Oracle Database 11g Release 11.2.0.4.0 - 64bit Production #192.168.56.61 IP’li postgresql veritabanı sunucusuna 5434 portundan bağlantı yapılır. psql -h 192.168.56.61 -p 5434 -d mx -U postgres -W Password: psql (14.4 (Ubuntu 14.4-1.pgdg20.04+1), server 13.6) Type “help” for help
Oracle :sql system/welcome1@10.71.5.121:1521/orcl.orclsql (sqlcli): Oracle’ın SQL Developer uygulamasının terminal versiyonudur. Sorgularda kolon formatlarını düzelterek çıktıyı ekrana yazar.system : Oracle veritabanında en yetkili kullanıcılardan biri.welcome1 : System kullanıcısının şifresi10.71.5.121 : Oracle veritabanı sunucusunun IP adresiorcl.orcl : instance/servis ismi
İki veritabanına da sorunsuz bağlantı yapıldığı görülür.
Adım 6
ora2pg.conf dosyasının düzenlenir.
# Default gelen konf dosyası kopyalanır. cp /etc/ora2pg/ora2pg.conf.dist /etc/ora2pg/ora2pg.conf # Bağlantı bilgileri ora2pg.conf dosyasına girilir. vim /etc/ora2pg/ora2pg.conf # Oracle bağlantı bilgileri. (sql/sqlplus ile bağlantı test edilmiş olmalı) ORACLE_DSN dbi:Oracle:host=10.71.5.121;sid=DB11G;port=1521 ORACLE_USER system ORACLE_PWD welcome1 Not: 12C ve üzerinde dbi:Oracle:host=IP;service_name=servis_ ismi;port=1521 # Postgresql bağlantı bilgileri (psql ile bağlantı test edilmiş olmalı). PG_DSN dbi:Pg:dbname=erpdb;host=192.168.56.61;port=5434 PG_USER postgres PG_PWD welcome1
Postgresql bağlantı bilgileri girilirse veriyi oracle’dan direk postgresql’e yazar.
Girilmezse bir dosyaya yazar sonrasında bu dosya postgresql sunucusuna gönderilir ve
import edilir.
ora2pg bağlantı testi yapılır.
Sorgu sonuçlarının hatasız gelmesi ora2pg’nin sağlıklı çalıştığını göstermektedir. Test
veritabanı olduğu için kurulumla birlikte gelen default schemalar bulunmakta.

Veri tipi değiştirme, tablo ismi değiştirme, encryption, SCN’ye göre veri aktarma, CDC
araçları için cdc_ready parametresi gibi bir çok özelliğe sahiptir.
ora2pg parametrelerinin tam listesini ora2pg.conf dosyasında ve https://ora2pg.darold.net/documentation.html resmi sitesinde bulabilirsiniz.
Örnek
Oracle’daki hr schema’sının tabloları postgresql’ de mx veritabanına kopyalanır.
Adım 1
mehmed@dataera:~$ vim /etc/ora2pg/ora2pg.conf EXPORT_SCHEMA 1 SCHEMA hr CREATE_SCHEMA 1 STOP_ON_ERROR 0 SKIP fkeys pkeys ukeys indexes checks TYPE TABLE OUTPUT_DIR /data
Değerleri ile ora2pg.conf dosyası güncellenir. Bağlantı bilgileri adım 6’da verilmişti.
Adım 2
ora2pg -t SHOW_REPORT -c /etc/ora2pg/ora2pg.conf –estimate_cost > /data/hr.ec.html ora2pg -c /../ora2pg.conf -t SHOW_REPORT --dump_as_html > /../hr.mg_as.html # Paralelizm 4 ile HR schemasının tabloları hr_tables_V01.sql dosyasına yazdırılır. ora2pg -c /../ora2pg.conf -t TABLE -o hr_tables_V01.sql -P 4 [========================>] 9/9 tables (100.0%) end of scanning. [========================>] 9/9 tables (100.0%) end of table export.
Rapor alınıp, schema export edilir. Bu export oracle’daki hr schema’sının postgresql’e
uyarlanmış (convert) halidir. Text editörle güncellenebilir.
hr_tables_V01.sql dosyasını /data dizininde oluşturur.
Not: PG_DSN bilgilerini girdiğimiz için oracle’dan veri kopyalanıp direk Postgresql’e
yazılır. Yani hr_tables_V01.sql dosyasında sadece metada bilgisi (create script)
vardır. Veri (insert/copy cümleleri) yoktur.
ora2pg çalıştırılırken verilen parametrelerle ora2pg.conf dosyasındakiler
çakışırsa, çalıştırırken verilen parametreler baskındır.
Adım 3
# ora2pg makinesinden Postgresql’e bağlanılır. psql -h 192.168.56.61 -d mx -U postgres -p 5434 -W mx=# \i /data/hr_tables_V01.sql SET CREATE SCHEMA ALTER SCHEMA SET CREATE TABLE .... mx=# show search_path; search_path ------------- hr, public mx=# \dt List of relations Schema | Name | Type | Owner --------+-------------+-------+---------- hr | countries | table | postgres .. (9 rows)
Postgresql’e hr scheması import edilip kontrolü sağlanır.
Her seferinde şifre girmemek için ;PGPASSWORD=”sifre” psql -h 192.168.56.61 -p 5434 -d mx -U
postgres -f /data/hr_tables_V01.sql
Adım 4
# 8 paralelizm ile hr schemasının tabloları postgresql’e kopyalanır. ora2pg -c /etc/ora2pg/ora2pg.conf -t COPY -P 8 > hr_schema_mig.log [===>] 9/9 tables (100.0%) end of scanning. ..... [===>] 228/227 rows (100.4%) on total estimated data (4 sec.avg:57 tuples/sec) # Veri aktarımı sonrası kaynak ve hedefin satır sayıları kontrol edilir. ora2pg -t TEST --count_rows -c /etc/ora2pg/ora2pg.conf -P 8 ora2pg -t TEST_DATA -c /etc/ora2pg/ora2pg.conf -P 8
Not: Saniyede ortalama 57 satır (tuple/row) kopyalanmış. Bu çok düşük bir rakam. Her
ne kadar çalıştığımız makinelerde SSD diskler olsa da oracle veritabanına VPN üzerinden
bağlı olduğumuz için performansı düşürmektedir.
Veri aktarılırken, IOPS performansı, memory miktarı, çekirdek sayısı ve ağ hızı
performansı direkt etkiler.
Bununla beraber Oracle/postgresql instance ve işletim sistemi ile birlikte
ora2pg.conf‘ta performans iyileştirmelerine ihtiyaç olabilir.
Performans, bu zincirdeki en zayıf halkaya bağlı olacaktır. Örneğin 128 çekirdek de olsa
paralelizm doğru ayarlanmazsa bir çekirdek %100 çalışırken diğer 127 çekirdek atıl (idle)
kalacaktır.
Not: Oracle’dan taşınacak objlerin istatistik bilgilerinin güncel olması gerekir.
Adım 5
# Rapor alınır. # view export ora2pg -c /etc/ora2pg/ora2pg.conf -t VIEW -o hr_views_V01.sql -P 4 # sequence export ora2pg -c /etc/ora2pg/ora2pg.conf -t SEQUENCE -o hr_sequences_V01.sql -P 4 mx=# \i /data/hr_views_V01.sql mx=# \i /data/hr_sequences_V01.sql
Diğer objeler de “-t” opsiyonu ile belirtilip export edilip, psql aracılığı ile import edilir.
