Podsumowanie finansowe dla decydentów
| Prosta (< 100 GB) | Średnia (100 GB – 1 TB) | Złożona / Enterprise | |
|---|---|---|---|
| Czas realizacji | 4-8 tyg. | 8-14 tyg. | 14 tyg. – 12 mies. |
| Koszt projektu | 100-200 tys. PLN | 250-500 tys. PLN | 500 tys. – 3 mln PLN |
| Po dofinansowaniu MAP | 30-60 tys. PLN | 75-150 tys. PLN | 150-900 tys. PLN |
| Roczne oszczędności na licencji Oracle | $100-215 tys. | $215-430 tys. | $430 tys. – $1M+ |
| Zwrot z inwestycji | < 3 mies. | < 4 mies. | 3-6 mies. |
Dofinansowanie MAP pokrywa 70-80% kosztów partnera. Dedykowana ścieżka Oracle MAP oferuje dodatkowe kredyty ponad standardowy program. Szczegóły poniżej.
Ten artykuł jest skierowany do organizacji średniej wielkości, dużych firm i sektora publicznego, czyli podmiotów z wieloma instancjami Oracle, złożoną logiką w PL/SQL i potrzebą migracji bez przestojów. Jeśli szukasz ogólnego przewodnika po migracji do AWS (nie tylko bazy danych), zobacz kompletny przewodnik migracji do chmury AWS.
Dlaczego firmy odchodzą od Oracle na PostgreSQL
Koszty licencji Oracle – rzeczywista skala problemu
| Komponent | Koszt roczny (typowe wdrożenie klasy korporacyjnej) |
|---|---|
| Oracle Database Enterprise Edition | $47 500/procesor |
| Wsparcie roczne (22% licencji) | $10 450/procesor |
| Real Application Clusters (RAC) | $23 000/procesor |
| Partitioning Option | $11 500/procesor |
| Advanced Security | $15 000/procesor |
| Typowy serwer 2-socket (2×8 cores = 16 cores × 0.5 factor) | $107 450 – $214 900/rok |
Przy dwóch takich serwerach (typowa konfiguracja dla średniej firmy z HA) to ponad $400 000 rocznie – samych licencji, bez hardware, DBA i kolokacji. Aurora PostgreSQL db.r6g.2xlarge (8 vCPU, 64 GB RAM, Multi-AZ) oferuje porównywalną wydajność za ~$1 400/mies. = $16 800/rok. Brak limitu użytkowników. Brak ekspozycji na audyt.
Audyt Oracle LMS – główny wyzwalacz decyzji
Audyty Oracle License Management Services są bezwzględne i coraz częstsze. Szczególnie narażone są firmy, które:
- Zwirtualizowały środowisko na VMware bez wykupienia licencji na pełną szafę serwerową
- Uruchomiły Oracle Standard Edition na serwerach z >2 socketami
- Wdrożyły RAC lub Data Guard bez odpowiedniej opcji licencyjnej
Typowy efekt? Żądanie dopłaty $500K–$2M+ za „niezgodne użycie”. Widzieliśmy to u klientów z sektora bankowego – sześcio- i siedmiocyfrowe roszczenia po tym, jak VMware sprawl wymknął się spod kontroli. Instytucje publiczne są narażone w równym stopniu, szczególnie gdy Oracle forsuje audyt przed odnowieniem kontraktu.
Migracja na PostgreSQL eliminuje dźwignię audytową Oracle. Nie ma licencji – nie ma z czym być niezgodnym.
Uzależnienie od dostawcy i brak elastyczności
Oracle licencjonuje per-procesor, co oznacza, że każde skalowanie w górę podwaja koszty z dnia na dzień. Nie ma modelu rozliczeń za faktyczne użycie (Aurora rozlicza per-sekunda). Oracle na AWS nadal wymaga BYOL – przenosisz się do chmury, ale problem licencyjny jedzie z Tobą. Do tego brak natywnej integracji z IAM, CloudWatch czy Secrets Manager bez dodatkowych warstw konfiguracyjnych.
PostgreSQL – dlaczego akurat teraz
PostgreSQL dojrzał dramatycznie. Wersja 16 natywnie obsługuje partycjonowanie tabel, zapytania równoległe, replikację logiczną i JSON/JSONB – możliwości, które kiedyś stanowiły przewagę Oracle.
Na AWS konkretnie:
- Aurora PostgreSQL dostarcza 3-5× przepustowość standardowego PostgreSQL z automatycznym przełączaniem awaryjnym i do 15 replikami odczytu. To w pełni zarządzana usługa – łatki, kopie zapasowe i wysoka dostępność są obsługiwane za Ciebie.
- Natywna integracja z ekosystemem – uwierzytelnianie bazy przez IAM, automatyczna rotacja sekretów przez Secrets Manager, observability na poziomie zapytań przez Performance Insights
- Zero kosztów licencyjnych – płacisz za moc obliczeniową i storage, nic więcej
Dla branż regulowanych (KNF w Polsce, BaFin w Niemczech, FCA w UK) certyfikaty Aurora (ISO 27001, SOC 2, PCI DSS, C5 dla rynku DACH) oznaczają, że nie zamieniasz zgodności Oracle na lukę gdzie indziej.
Oracle vs PostgreSQL – kluczowe różnice techniczne
Typy danych – mapowanie
| Oracle | PostgreSQL | Uwagi |
|---|---|---|
| NUMBER(p,s) | NUMERIC(p,s) / INTEGER / BIGINT | SCT mapuje automatycznie |
| VARCHAR2(n) | VARCHAR(n) / TEXT | TEXT w PostgreSQL nie ma limitu wydajnościowego |
| DATE | TIMESTAMP | Oracle DATE zawiera czas! PostgreSQL DATE nie |
| CLOB | TEXT | W PostgreSQL TEXT nie ma limitu 4 GB |
| BLOB | BYTEA / Large Object | BYTEA do ~1 GB, Large Object dla większych |
| RAW | BYTEA | – |
| LONG | TEXT | Wycofany w Oracle, proste mapowanie |
| XMLTYPE | XML | Natywny typ XML w PostgreSQL |
| INTERVAL YEAR TO MONTH | INTERVAL | PostgreSQL INTERVAL jest bardziej elastyczny |
| ROWID | ctid (wewnętrzny) | Nie polegaj na ROWID, użyj klucza głównego |
PL/SQL vs PL/pgSQL – kluczowe różnice składniowe
| Aspekt | Oracle PL/SQL | PostgreSQL PL/pgSQL |
|---|---|---|
| Pakiety (packages) | ✅ Natywne | ❌ Brak – użyj schematów + rozszerzeń |
| Wyjątki | EXCEPTION WHEN | EXCEPTION WHEN (zbliżona składnia) |
| Kursory | CURSOR, REF CURSOR, SYS_REFCURSOR | CURSOR, REFCURSOR |
| Sekwencje | sequence.NEXTVAL | nextval(‘sequence’) |
| CONNECT BY (hierarchie) | ✅ Natywne | Użyj WITH RECURSIVE (CTE) |
| DECODE() | ✅ Natywne | Użyj CASE WHEN |
| NVL() | ✅ Natywne | COALESCE() |
| SYSDATE | ✅ | CURRENT_TIMESTAMP / NOW() |
| Transakcje autonomiczne | PRAGMA AUTONOMOUS_TRANSACTION | dblink lub pg_background (obejście) |
| Operacje masowe | FORALL, BULK COLLECT | UNNEST + operacje na tablicach |
| Odświeżanie zmaterializowanych widoków | ON COMMIT / ON DEMAND | CREATE MATERIALIZED VIEW + pg_cron |
Funkcjonalności Oracle bez bezpośredniego odpowiednika
| Funkcja Oracle | Alternatywa w PostgreSQL | Złożoność migracji |
|---|---|---|
| Oracle RAC (klastrowanie multi-node) | Aurora Multi-AZ + repliki odczytu | Niska (Aurora zarządza wysoką dostępnością) |
| Oracle Data Guard | Aurora Global Database / replikacja logiczna | Niska |
| Oracle Advanced Compression | pg_lz4, kompresja TOAST, partycjonowanie | Średnia |
| Oracle Flashback | Odtwarzanie punktowe (PITR) + pg_audit | Niska |
| Oracle MODEL clause | Funkcje okna + CTE | Średnia (wymaga przepisania) |
| Oracle Database Links | postgres_fdw / dblink | Niska |
| Oracle Advanced Queuing | Amazon SQS/SNS lub pg_notify | Średnia |
| Oracle Spatial | PostGIS (rozszerzenie) | Niska |
Migracja krok po kroku – proces 8-fazowy
Krok 1: Assessment i raport konwersji (SCT)
Uruchamiamy AWS Schema Conversion Tool (SCT) na źródłowej bazie Oracle. SCT generuje raport oceny (Assessment Report) z:
- Procentem obiektów do automatycznej konwersji (typowo 60-85%)
- Listą obiektów wymagających ręcznej interwencji (kolor czerwony/pomarańczowy)
- Szacowanym nakładem pracy na konwersję ręczną
Wynik: Dokument z podziałem obiektów na kategorie: konwersja automatyczna, ręczna prosta, ręczna złożona. To podstawa wyceny projektu.
Czas: 2-5 dni (zależy od rozmiaru schematu)
Krok 2: Wybór docelowego silnika – Aurora PostgreSQL vs RDS PostgreSQL
| Kryterium | Aurora PostgreSQL | RDS PostgreSQL |
|---|---|---|
| Wydajność | 3-5× standardowego PG | Standardowa |
| Storage | Automatyczne skalowanie do 128 TB | EBS, ręczne skalowanie |
| HA | Wbudowane Multi-AZ (6 kopii w 3 AZ) | Multi-AZ opcjonalne (+koszt) |
| Repliki odczytu | Do 15 | Do 15 |
| Koszt | ~20% droższy niż RDS | Niższy bazowy koszt |
| Przełączenie awaryjne | 10-20 sekund | 60-120 sekund |
| Rekomendacja | Duże firmy, duże bazy, wymagania wysokiej dostępności | Mniejsze bazy, dev/staging, priorytet niższy koszt |
Dla migracji Oracle Enterprise Edition z RAC: Aurora PostgreSQL jest naturalnym wyborem, bo dostarcza wysoką dostępność bez złożoności Oracle RAC.
Krok 3: Konwersja schematu
AWS SCT automatycznie konwertuje:
- Tabele, indeksy, ograniczenia (constraints), sekwencje
- Proste widoki i wyzwalacze (triggers)
- Procedury składowane z podstawową logiką
Ręczna konwersja wymagana dla:
- Pakietów PL/SQL (PostgreSQL nie ma odpowiednika pakietów – rozbijamy na schematy + funkcje)
- Hierarchii CONNECT BY → WITH RECURSIVE CTE
- Wbudowanych funkcji Oracle (DECODE → CASE, NVL → COALESCE)
- Transakcji autonomicznych
- Zaawansowanego przetwarzania masowego (FORALL → operacje na tablicach)
Wskazówka: Nie konwertuj 1:1. Często lepiej przepisać procedurę, wykorzystując natywne mechanizmy PostgreSQL (funkcje okna, LATERAL joins, agregacja tablic), niż naśladować wzorzec z Oracle.
Wsparcie AI w konwersji ręcznej: Narzędzia oparte na LLM (Amazon Q Developer, GitHub Copilot) potrafią przetłumaczyć 70-90% „czerwonych” obiektów ze SCT – pakiety PL/SQL, hierarchie CONNECT BY, złożone kursory. Inżynier weryfikuje i dostosowuje wynik, zamiast pisać od zera. W naszych projektach skraca to fazę konwersji ręcznej o 40-60%.
Czas: 1-4 tygodnie (zależy od ilości PL/SQL; ze wsparciem AI bliżej dolnej granicy)
Krok 4: Migracja danych – AWS DMS
AWS Database Migration Service obsługuje dwa tryby:
Full Load: Jednorazowe przeniesienie wszystkich danych. Odpowiednie dla baz < 100 GB lub gdy dopuszczalny jest dłuższy przestój (godziny).
Full Load + CDC (Change Data Capture): Początkowe pełne ładowanie, a następnie ciągła replikacja zmian. Minimalizuje przestój do minut. Wymaga:
- Oracle LogMiner lub Binary Reader na źródle
- Supplemental logging włączony na Oracle
- Odpowiednie uprawnienia (EXECUTE_CATALOG_ROLE)
Konfiguracja DMS:
- Replication Instance: dms.r5.xlarge (min. dla produkcyjnych migracji)
- Networking: VPN lub Direct Connect do Oracle source
- Table mapping: per-schema, z transformacjami (lowercase w PostgreSQL!)
Czas: Pełne ładowanie 100 GB = 4-8 godzin (zależy od sieci). Opóźnienie CDC: <5 sekund.
Krok 5: Migracja kodu aplikacji
Zmiany w aplikacji, które prawie zawsze są wymagane:
- Connection string: Oracle TNS → PostgreSQL libpq format
- Driver: OCI/JDBC Oracle → npgsql/psycopg2/pg-promise
- Rozróżnianie wielkości liter: Oracle domyślnie uppercase → PostgreSQL lowercase (chyba że w cudzysłowie)
- Składnia sekwencji:
seq.NEXTVAL→nextval('seq') - DUAL table:
SELECT 1 FROM DUAL→SELECT 1 - Obsługa dat: Oracle DATE zawiera czas → PostgreSQL rozdziela DATE i TIMESTAMP
- Składnia outer join: Oracle
(+)→ ANSILEFT/RIGHT JOIN - ROWNUM: →
LIMIT/OFFSETlub funkcja oknaROW_NUMBER()
Aplikacje oparte na ORM (Hibernate, Entity Framework, Django): Zmiana jest minimalna, bo ORM abstrakcyjnie obsługuje różnice dialektów. Zmiana konfiguracji + testy regresji.
Aplikacje z surowym SQL: Wymagają przeglądu każdego zapytania. Narzędzia jak orafce (rozszerzenie PostgreSQL emulujące funkcje Oracle) mogą tymczasowo zniwelować różnice.
Krok 6: Testowanie i walidacja
Trzy warstwy testów:
1. Walidacja danych:
- Porównanie liczby wierszy (źródło vs cel)
- Sumy kontrolne na krytycznych tabelach
- Weryfikacja losowych rekordów
- AWS DMS Data Validation task (automatyczny)
2. Testy funkcjonalne:
- Uruchomienie pełnego zestawu testów regresji aplikacji przeciwko nowej bazie
- Porównanie wyników zapytań (Oracle vs PostgreSQL) dla krytycznych raportów
- Test procedur składowanych z przypadkami brzegowymi
3. Testy wydajnościowe:
- Porównanie czasu odpowiedzi 50 najczęstszych zapytań
- Test obciążeniowy z produkcyjnym profilem ruchu
- Analiza planów wykonania – optymalizator PostgreSQL zachowuje się inaczej niż Oracle CBO
Wsparcie AI w walidacji: Generowanie przypadków testowych dla procedur składowanych (na podstawie schematu i logiki biznesowej), automatyczne porównanie wyników zapytań Oracle vs PostgreSQL na próbkach danych oraz identyfikacja regresji wydajnościowych. LLM analizuje plany wykonania i sugeruje brakujące indeksy. W praktyce skraca fazę testowania o 30-40%.
Czas: 2-4 tygodnie (nie skracaj, to najczęstszy punkt zawalenia projektu)
Krok 7: Cutover – przełączenie produkcji
Strategia minimalnego przestoju (DMS CDC):
- DMS replikuje zmiany w czasie rzeczywistym (opóźnienie CDC <5s)
- Wstrzymanie zapisu na Oracle (okno serwisowe)
- Poczekanie, aż DMS dociągnie ostatnie zmiany (opóźnienie = 0)
- Przełączenie connection string w aplikacji na Aurora/RDS
- Walidacja – testy dymne
- Otwarcie ruchu
Typowy przestój: 5-30 minut (czas na dociągnięcie opóźnienia + przełączenie + test dymny)
Plan wycofania: Utrzymanie Oracle w trybie read-only przez 48-72h po przełączeniu. Jeśli pojawi się krytyczny problem, wycofanie = przełączenie connection string z powrotem. Odwrotna replikacja DMS opcjonalna.
Krok 8: Stabilizacja i optymalizacja
Pierwsze 2-4 tygodnie po przełączeniu:
- Strojenie wydajności: Dostosowanie
work_mem,shared_buffers,effective_cache_sizedo profilu obciążenia - Optymalizacja indeksów: PostgreSQL może potrzebować innych indeksów niż Oracle (indeksy częściowe, GIN dla JSONB)
- Pula połączeń: PgBouncer lub RDS Proxy (Aurora ma limit połączeń zależny od klasy instancji)
- Monitoring: Performance Insights, Enhanced Monitoring, alarmy CloudWatch na CPU, IOPS, połączenia
- Wygaszenie Oracle: Po 30 dniach stabilnej pracy – wyłączenie Oracle, anulowanie wsparcia
Narzędzia AWS do migracji Oracle → PostgreSQL
AWS Schema Conversion Tool (SCT)
SCT analizuje schemat Oracle i generuje odpowiedniki w PostgreSQL – DDL tabel plus procedury PL/pgSQL. Traktuj go jako pierwszy przebieg: radzi sobie z prostymi konwersjami, żeby Twoi inżynierowie mogli skupić się na trudnych przypadkach.
Generuje raport oceny z kolorowym oznaczeniem: zielony to konwersja automatyczna, żółty wymaga drobnych poprawek, czerwony oznacza, że ktoś musi usiąść i przemyśleć logikę. Z naszego doświadczenia 60-85% obiektów ląduje w zielonej lub żółtej kategorii.
Gdzie SCT zawodzi: pakiety PL/SQL konwertuje „płasko” (tracisz enkapsulację), hierarchie CONNECT BY wymagają ręcznego przepisania na CTE, a niektóre funkcje analityczne specyficzne dla Oracle potrzebują ludzkiego oka. Ale za tę cenę (bezpłatny – część zestawu narzędzi AWS) to obowiązkowy punkt wyjścia.
AWS Database Migration Service (DMS)
DMS przenosi właściwe dane. Obsługuje jednorazowe pełne ładowanie i – co ważniejsze – ciągłą replikację przez CDC (Change Data Capture). To dzięki CDC osiągasz minimalny przestój przy finalnym przełączeniu.
Kilka rzeczy do skonfigurowania po stronie Oracle: supplemental logging musi być włączony, potrzebujesz dostępu przez Binary Reader lub LogMiner, a instancja replikacyjna powinna mieć mniej więcej 1 vCPU na 50 GB ładowanych danych (lub na 100 tabel pod CDC).
Po stronie PostgreSQL: slot replikacji logicznej dla konfiguracji Multi-AZ i session_replication_role = replica podczas początkowego ładowania, żeby wyzwalacze nie wchodziły w drogę.
Koszt operacyjny jest umiarkowany – mniej więcej $0.018/h za vCPU instancji replikacyjnej plus transfer danych.
ora2pg – opcja open-source
Narzędzie napisane w Perl, które obsługuje konwersję schematu i danych bez jakiejkolwiek zależności od AWS. Przydaje się dla mniejszych baz, środowisk docelowych on-premise, albo sytuacji gdzie chcesz pełną kontrolę nad każdą decyzją konwersyjną.
Mniej odpowiedni dla dużych organizacji z setkami procedur składowanych (heurystyki SCT sprawdzają się lepiej na dużą skalę) i nie obsługuje CDC – więc do replikacji na żywo i tak potrzebujesz DMS.
Kiedy NIE używać:
- Duże organizacje z setkami procedur składowanych (SCT ma lepsze heurystyki)
- Gdy potrzebujesz CDC (ora2pg tego nie obsługuje – użyj DMS)
Jak AWS MAP finansuje migrację Oracle → PostgreSQL
Co to jest AWS Migration Acceleration Program (MAP)
MAP to program dofinansowania AWS skierowany do organizacji migrujących z on-premise lub konkurencyjnych platform. Obejmuje trzy fazy:
| Faza | Co pokrywa | Typowe dofinansowanie |
|---|---|---|
| Assess | Audyt środowiska, business case, plan migracji | 50-100% kosztów assessment |
| Mobilize | Budowa fundamentów (landing zone, governance, PoC) | 50-80% kosztów partnera |
| Migrate & Modernize | Właściwa migracja | 70-80% kosztów partnera |
MAP dla migracji Oracle – dedykowana ścieżka
AWS prowadzi dedykowaną ścieżkę MAP dla migracji baz danych Oracle z budżetem wyższym niż standardowy program. To nie jest szeroko reklamowane, ale istnieje, bo AWS ma strategiczny interes w przeciąganiu workload z Oracle na swoją platformę.
Co ścieżka Oracle dodaje ponad standardowy MAP:
- Dodatkowe kredyty na narzędzia, wydłużone testy i podnoszenie kompetencji zespołu
- Wyższe pułapy dofinansowania dla złożonych środowisk z wieloma bazami
- Bonusy „okna szans” (Windows of Opportunity) gdy migrujesz przed datą odnowienia licencji Oracle – bo odnowienie to punkt dźwigni i AWS o tym wie
Kto się kwalifikuje
Poprzeczka nie jest tak wysoko, jak mogłoby się wydawać:
- Aktywne środowisko Oracle (on-premise, kolokacja lub EC2 z BYOL)
- Minimalna wielkość projektu: typowo od $50K wartości zaangażowania partnera (to wyklucza trywialne jednoinstancyjne migracje, ale większość scenariuszy korporacyjnych przechodzi swobodnie)
- Cel musi być natywną usługą AWS (Aurora PostgreSQL lub RDS PostgreSQL)
- Potrzebujesz certyfikowanego partnera MAP do złożenia wniosku. My zajmujemy się tym od A do Z.
Ile realnie można uzyskać
| Scenariusz | Koszt projektu | MAP pokrywa | Płacisz |
|---|---|---|---|
| 1 instancja Oracle SE, 50 GB, proste procedury | 120 000 PLN | ~80 000 PLN (67%) | ~40 000 PLN |
| 3 instancje Oracle EE, 500 GB, złożony PL/SQL | 450 000 PLN | ~320 000 PLN (71%) | ~130 000 PLN |
| Enterprise: 10+ instancji, 2+ TB, RAC | 1 200 000 PLN | ~900 000 PLN (75%) | ~300 000 PLN |
Poza pokryciem honorarium partnera typowo otrzymujesz 1-3 miesiące kredytów AWS na infrastrukturę docelową, dostęp do AWS Solution Architects na czas projektu i (przy największych migracjach) bezpośrednie wsparcie AWS Professional Services.
Proces kwalifikacji – co potrzebujemy od Ciebie
- Inwentaryzacja baz Oracle – ile instancji, jakie rozmiary, orientacyjna liczba procedur
- Zarys uzasadnienia biznesowego – choćby na serwetce: oszczędności licencyjne vs koszt migracji
- Data odnowienia licencji Oracle – to decyduje o pilności i może odblokować dodatkowe dofinansowanie
- Rozmowa – składamy wniosek MAP w Twoim imieniu i prowadzimy cały cykl życia dofinansowania do zakończenia projektu
Najczęstsze wyzwania migracji Oracle → PostgreSQL
1. Procedury składowane z logiką biznesową
Problem: Bazy Oracle w dużych organizacjach mają setki procedur PL/SQL implementujących logikę biznesową – kalkulacje, walidacje, workflow. SCT konwertuje 60-70% automatycznie. Reszta wymaga ludzkiej głowy.
Jak to rozwiązujemy:
Zaczynamy od priorytetyzacji. Raport Oracle AWR pokazuje, które procedury są faktycznie wywoływane w produkcji – często połowa istniejących procedur to martwy kod.
Kluczowa zasada: przepisujemy, nie tłumaczymy. PostgreSQL ma lepsze funkcje okna, CTE i operacje na tablicach – wykorzystujemy je zamiast naśladować wzorce Oracle, które powstały z ograniczeń tamtego silnika.
Dla okresu przejściowego działa rozszerzenie orafce – tymczasowy pomost emulujący NVL2, DECODE i inne funkcje specyficzne dla Oracle. Docelowo chcesz się tego pozbyć, ale na start zmniejsza liczbę zmian wymaganych jednocześnie.
Każda skonwertowana procedura przechodzi test z wynikami Oracle jako wartość referencyjna. Bez wyjątków.
Wsparcie AI (Amazon Q, Copilot): Modele językowe konwertują PL/SQL → PL/pgSQL z kontekstem schematu docelowego. Inżynier weryfikuje i poprawia wynik zamiast pisać od zera. W naszych projektach redukuje to nakład na konwersję ręczną o 40-60% i eliminuje typowe błędy składniowe, które ludzie popełniają przy ręcznym przepisywaniu.
2. Wydajność po migracji
Problem: Zapytania, które działały w 50ms na Oracle, potrafią trwać 5s na PostgreSQL. Inny optymalizator, inne statystyki, inne indeksy.
Rozwiązanie:
pg_stat_statements– identyfikacja najwolniejszych zapytańEXPLAIN (ANALYZE, BUFFERS)– porównanie planów wykonania- Dodatkowe indeksy: PostgreSQL korzysta z indeksów częściowych, indeksów na wyrażeniach, indeksów pokrywających
- Dostrojenie
random_page_cost(dla SSD: 1.1 zamiast domyślnego 4.0) - Pula połączeń: PgBouncer w trybie transakcyjnym (Oracle obsługuje tysiące połączeń natywnie, PostgreSQL potrzebuje poolera)
3. Funkcje Oracle bez bezpośredniego odpowiednika
Problem: CONNECT BY, MODEL clause, MERGE z zaawansowaną logiką, transakcje autonomiczne.
Rozwiązanie per funkcja:
| Funkcja Oracle | Rozwiązanie PostgreSQL | Nakład pracy |
|---|---|---|
| CONNECT BY | WITH RECURSIVE CTE | Niski (wzorzec jest prosty, ale wymaga testów) |
| MODEL clause | Funkcje okna + LATERAL | Średni (wymaga zrozumienia logiki biznesowej) |
| MERGE (upsert) | INSERT … ON CONFLICT | Niski |
| Transakcja autonomiczna | dblink do self lub pg_background | Średni (zmiana architektury) |
| DBMS_SCHEDULER | pg_cron lub AWS EventBridge + Lambda | Niski |
| DBMS_OUTPUT | RAISE NOTICE | Niski |
| UTL_FILE | rozszerzenie aws_s3 (Aurora) lub COPY | Niski |
4. Zmiana mentalności zespołu DBA
Problem: Zespoły przyzwyczajone do Oracle (AWR, ASH, Enterprise Manager) muszą nauczyć się nowego zestawu narzędzi.
Rozwiązanie:
- AWS Performance Insights = odpowiednik Oracle ASH (Active Session History)
- pg_stat_statements = odpowiednik Oracle V$SQL
- pgBadger = odpowiednik raportu Oracle AWR
- Szkolenie 2-3 dniowe dla zespołu DBA (pokrywane z budżetu MAP)
5. Integracje zewnętrzne
Problem: Systemy raportowe (BI), ETL (Informatica, SSIS, Talend) i inne aplikacje łączą się bezpośrednio do Oracle.
Rozwiązanie:
- Faza assessment identyfikuje WSZYSTKIE połączenia do Oracle (netstat, AWR, audyt Oracle)
- Plan przełączenia obejmuje przełączenie każdej integracji
- Praca równoległa: DMS utrzymuje Oracle w trybie read-only jako zabezpieczenie dla systemów, które nie mogą się przełączyć natychmiast
Timeline i koszty migracji Oracle → PostgreSQL
Według rozmiaru bazy i złożoności
| Scenariusz | Rozmiar DB | Procedury PL/SQL | Timeline | Koszt projektu | Z MAP |
|---|---|---|---|---|---|
| Prosty | < 100 GB | < 50 prostych | 4-8 tyg. | 100 000-200 000 PLN | 30 000-60 000 PLN |
| Średni | 100 GB-1 TB | 50-200, część złożonych | 8-14 tyg. | 250 000-500 000 PLN | 75 000-150 000 PLN |
| Złożony | > 1 TB | 200+, złożona logika biznesowa | 14-24 tyg. | 500 000-1 200 000 PLN | 150 000-360 000 PLN |
| Enterprise multi-DB | Wiele instancji, 5+ TB łącznie | 500+, RAC, Data Guard | 6-12 mies. | 1 000 000-3 000 000 PLN | 300 000-900 000 PLN |
Powyższe koszty uwzględniają wsparcie AI w konwersji kodu (Amazon Q Developer, Copilot). Bez wsparcia AI konwersja ręczna zajmowałaby o 40-60% dłużej – szczególnie widoczne w scenariuszach „Złożony” i „Enterprise”, gdzie większość budżetu to praca nad procedurami składowanymi.
Co wpływa na timeline
| Czynnik | Wpływ na czas | Dlaczego |
|---|---|---|
| Ilość PL/SQL | +2-8 tyg. na 100 złożonych procedur | Ręczna konwersja + testy |
| Wymaganie braku przestoju | +2-3 tyg. | Konfiguracja CDC, testy przełączenia, praca równoległa |
| Integracje zewnętrzne | +1-3 tyg. na 5 integracji | Koordynacja z zewnętrznymi zespołami |
| Brak testów regresji | +3-4 tyg. | Trzeba napisać testy od zera |
| Cel multi-region | +2-4 tyg. | Konfiguracja Aurora Global Database, testy DR |
Oszczędności po migracji – zwrot z inwestycji
Typowa firma z 2 instancjami Oracle EE (2-socket każda):
| Pozycja | Oracle (roczny koszt) | Aurora PostgreSQL (roczny koszt) | Oszczędność |
|---|---|---|---|
| Licencja + wsparcie | $215 000 × 2 = $430 000 | $0 | $430 000 |
| Infrastruktura | $48 000 (serwery on-premise) | $40 000 (2× db.r6g.2xlarge Multi-AZ, RI) | $8 000 |
| Nakład pracy DBA | $120 000 (1.5 etatu) | $80 000 (1 etat – mniej pracy ręcznej) | $40 000 |
| Suma roczna | $598 000 | $120 000 | $478 000/rok |
Przy koszcie migracji $150 000 (po MAP) – zwrot z inwestycji w 4 miesiące.
Sektor publiczny – specyficzne aspekty
Dlaczego instytucje publiczne migrują z Oracle
- Zamówienia publiczne: Kierunek open-source redukuje uzależnienie od dostawcy (wymóg wielu przetargów)
- Audyty NIK: Kwestionowanie wydatków na licencje komercyjne, gdy istnieją alternatywy open-source
- NIS2 / KSC: Wymogi cyberbezpieczeństwa łatwiej spełnić na w pełni zarządzanej usłudze (Aurora) niż samodzielnie utrzymywanym Oracle
- Budżetowanie roczne: Model rozliczania za użycie w AWS lepiej pasuje do rocznego cyklu budżetowego niż wieloletnie licencje Oracle
AWS w sektorze publicznym PL
- Najbliższe regiony AWS: eu-central-1 (Frankfurt) i eu-west-1 (Irlandia) – opóźnienie do Polski <30ms
- Zgodność z RODO – dane w UE
- AWS Artifact – certyfikaty zgodności (ISO 27001, SOC 2, C5)
- Umowy ramowe – możliwość zakupu AWS przez dystrybutorów z umów ramowych
Najczęściej zadawane pytania
Ile trwa migracja Oracle do PostgreSQL?
Od 4-8 tygodni dla prostych baz (< 100 GB, mało PL/SQL) do 6-12 miesięcy dla dużych organizacji z wieloma instancjami, złożoną logiką biznesową w procedurach składowanych i wymaganiami braku przestojów. Najczęstszy scenariusz (średnia baza 100 GB–1 TB) to 8-14 tygodni.
Czy AWS SCT konwertuje PL/SQL automatycznie?
AWS SCT automatycznie konwertuje 60-85% obiektów schematu (tabele, indeksy, proste procedury). Złożone konstrukcje PL/SQL (pakiety, CONNECT BY, transakcje autonomiczne, MODEL clause) wymagają ręcznej konwersji. SCT generuje raport oceny (Assessment Report), który precyzyjnie wskazuje, co wymaga pracy ręcznej.
Jaki jest koszt migracji Oracle do PostgreSQL na AWS?
Koszt projektu: 100 000-1 200 000 PLN (zależy od rozmiaru bazy i złożoności PL/SQL). Dofinansowanie AWS MAP pokrywa 70-80% kosztów partnera, co obniża efektywny koszt do 30 000-360 000 PLN. Roczne oszczędności na licencjach Oracle typowo wynoszą $200 000-$500 000 – zwrot z inwestycji po 3-6 miesiącach.
Czy migracja wymaga przestoju?
Nie. Przy użyciu AWS DMS z CDC (Change Data Capture) migracja odbywa się z minimalnym przestojem 5-30 minut – czas potrzebny na dociągnięcie ostatnich zmian i przełączenie connection string. DMS replikuje zmiany w czasie rzeczywistym z opóźnieniem poniżej 5 sekund.
Aurora PostgreSQL czy RDS PostgreSQL – co wybrać po migracji z Oracle?
Aurora PostgreSQL dla dużych organizacji: 3-5× wydajność standardowego PG, automatyczne przełączenie awaryjne w 10-20s, storage do 128 TB, do 15 replik odczytu. RDS PostgreSQL dla mniejszych baz i środowisk dev/staging, gdzie niższy koszt bazowy jest priorytetem. Przy migracji z Oracle Enterprise Edition z RAC – Aurora jest naturalnym odpowiednikiem.
Co to jest AWS MAP i jak pomaga w migracji Oracle?
AWS Migration Acceleration Program (MAP) to program dofinansowania pokrywający 70-80% kosztów zaangażowania partnera migracyjnego. Dla migracji Oracle istnieje dedykowana ścieżka z podwyższonym budżetem. Kwalifikują się organizacje z aktywnym środowiskiem Oracle migrujące na usługi AWS (Aurora/RDS PostgreSQL). Partner MAP (np. Devopsity) składa wniosek i zarządza budżetem w imieniu klienta.
Następne kroki – bezpłatna ocena migracji
Każda migracja Oracle → PostgreSQL zaczyna się od oceny środowiska. Analizujemy Twoje bazy (schematy, złożoność PL/SQL, wolumeny danych, punkty integracji) i wracamy z konkretem:
- Raport konwersji SCT – co konwertuje się automatycznie, co wymaga pracy inżynieryjnej
- Realistyczny kosztorys i harmonogram – konkretne widełki, w tym projekcja dofinansowania MAP
- Rekomendacja architektury – Aurora vs RDS, Multi-AZ, repliki odczytu, strategia poolingu
- Plan przełączenia – jak przejść z minimalnym wpływem na biznes
Realizowaliśmy wyjścia z Oracle dla firm z sektora finansowego, ubezpieczeniowego i administracji publicznej w Polsce. Niezależnie czy zbliża się odnowienie licencji za sześć miesięcy, czy na biurku leży już pismo z audytu LMS – pierwszy krok to zrozumienie, z czym mamy do czynienia.
Rozważasz odejście od Oracle?
Umów bezpłatną 30-minutową rozmowę. Wstępnie ocenimy złożoność migracji i sprawdzimy, czy Twój projekt kwalifikuje się do dofinansowania AWS MAP (typowo 70-80% kosztów).