SanalOrtam.net
Yapay Zekâ ve Yazılım

Oracle'dan PostgreSQL'e geçiş: Ora2Pg ile adım adım yol haritası

Lisans maliyetinden kurtulmak isteyen kurumların gözdesi PostgreSQL'e geçişte en çok kullanılan araç Ora2Pg. Kurulumdan maliyet tahminine, veri tipi farklarından sık yapılan hatalara kadar pratik bir rehber.

Oracle'dan PostgreSQL'e geçiş: Ora2Pg ile adım adım yol haritası

Eğitim verdiğim dönemde "PostgreSQL'e geçiş" başlığı daha çok merak konusuydu. Bugün ise birçok kurumun gündeminde. Geçişin en çok kullanılan aracı da hâlâ aynı: Ora2Pg. Tek fark, eskiden Perl modüllerini elle derleyerek kurduğumuz bu araç artık çok daha olgun.

1. Kurulum

Ora2Pg Perl ile yazılmıştır ve Oracle'a bağlanmak için DBD::Oracle modülüne, o da Oracle Instant Client'a (Basic ve SDK paketleri) ihtiyaç duyar. Birçok Linux dağıtımında paket olarak bulunur; bulunmazsa:

tar xzf ora2pg-x.y.tar.gz && cd ora2pg-x.y
perl Makefile.PL && make && sudo make install

Kurulumdan önce ORACLE_HOME ve LD_LIBRARY_PATH ortam değişkenlerinin Instant Client'ı gösterdiğinden emin olun.

2. Proje yapısını oluşturmak

ora2pg --project_base /gecis --init_project satis_projesi

Bu komut şema, veri ve kaynak kod için klasörleri ve bir ora2pg.conf dosyasını hazırlar. Konfigürasyonda en önemli ayarlar:

ORACLE_DSN   dbi:Oracle:host=10.0.0.20;sid=ORCL;port=1521
ORACLE_USER  gecis_okuyucu
ORACLE_PWD   ********
SCHEMA       SATIS

3. Önce rapor, sonra iş

Geçişe başlamadan önce ne kadar iş olduğunu ölçün:

ora2pg -c ora2pg.conf -t SHOW_REPORT --estimate_cost

Rapor; tablo, view, paket, prosedür ve trigger sayılarını ve otomatik çevrilemeyecek kod için tahmini adam-gün maliyetini verir. Yönetime sunulacak ilk belge genellikle budur.

4. Şema ve veri aktarımı

TYPE ayarını değiştirerek sırayla dışa aktarım yapılır: TABLE, SEQUENCE, VIEW, TRIGGER, FUNCTION, PROCEDURE, PACKAGE ve en sonda veri için COPY. Üretilen SQL dosyaları psql ile yüklenir:

psql -d yenidb -f schema/tables/table.sql

Büyük tablolarda yabancı anahtarları sona bırakmak ya da DEFER_FKEY 1 ile ertelemek yükleme süresini kısaltır.

5. Sizi bekleyen sürprizler

Oracle PostgreSQL Not
NUMBER(10) integer / bigint Ölçeksiz NUMBER'ları numeric bırakmak performansı düşürür
VARCHAR2(n) varchar(n) / text
DATE timestamp(0) Oracle DATE saat de tutar!
CLOB / BLOB text / bytea
SYSDATE now() / LOCALTIMESTAMP
seq.NEXTVAL nextval('seq')
ROWNUM <= 10 LIMIT 10
CONNECT BY WITH RECURSIVE
(+) dış birleştirme LEFT JOIN

En sinsi fark: Oracle boş metni ('') NULL kabul eder, PostgreSQL etmez. WHERE kolon IS NULL ile yazılmış eski sorgular geçişten sonra farklı sonuç döndürebilir. Test senaryolarınıza mutlaka ekleyin.

Oracle'a özgü NVL, DECODE, ADD_MONTHS, DUAL gibi yapılar için orafce eklentisi büyük kolaylık sağlar; ama uzun vadede kodu PostgreSQL'in kendi karşılıklarına (COALESCE, CASE vb.) çevirmek daha sağlıklıdır.

6. Geçiş sonrası

  • Tüm tablolar için ANALYZE çalıştırın.
  • Satır sayılarını ve kritik toplamları iki tarafta karşılaştırın.
  • Uygulamanın en ağır 20 sorgusunu EXPLAIN ANALYZE ile gözden geçirin; Oracle'da hızlı olan bir sorgu farklı bir indekse ihtiyaç duyabilir.

Geçişin en zor kısmı veri değil, PL/SQL paketleridir. Kod miktarı fazlaysa geçişi tek seferde değil, modül modül planlamak riskleri azaltır.

Kaynak: Ora2Pg resmi sitesi ve belgeleri

TH // yazarTaner HacıoğluYazılım ERP Müdürü

Yorumlar (0)

Yorum yazın

Gönderiler onaylandıktan sonra yayımlanır.

// aynı bölümden

Bunlar da ilginizi çekebilir