Oracle to Azure Database for PostgreSQL ograniczenia konwersji schematu serwera elastycznego

W tym artykule podsumowano znane ograniczenia, nieobsługiwane obiekty oraz kwestie związane z migracją podczas korzystania z funkcji konwersji schematu Oracle do Azure Database for PostgreSQL w programie Visual Studio Code.

Ograniczenia obsługi platformy

  • ARM64: Nieobsługiwane w systemie Windows lub Linux.

Konwersja schematu wymaga programu PostgreSQL 15 lub nowszego. Informacje o obsługiwanych systemach operacyjnych, w tym o systemie macOS 13 lub nowszym, znajdziesz w sekcji wymagania wstępne samouczka.

Nieobsługiwane i częściowo obsługiwane obiekty

W poniższych sekcjach opisano nieobsługiwane obiekty, konwersję częściową i funkcje, które wymagają ręcznego przeglądu. Wynik pojedynczego obiektu zależy od jego definicji źródłowej, zależności i wymagań wstępnych elementu docelowego.

Wykrywanie, wyodrębnianie, konwersja i wdrożenie opisują różne etapy. Obiekt można odnaleźć, ale wykluczyć z wyodrębniania lub wyodrębnić, ale nie przekonwertować. Przejrzyj wyniki odnajdywania dla zakresu źródłowego, raport konwersji HTML i Conversion Eksplorator obiektów w celu uzyskania wyników konwersji i notatek oraz Setup Experience reports dla wyników wdrożenia.

System Oracle i wbudowane schematy nie są wyodrębniane ani konwertowane. Obejmuje to schematy, takie jak SYS, , SYSTEMXDB, MDSYS, CTXSYS, i WMSYS.

Ważna

Przekonwertowany wynik sam w sobie nie stanowi powodzenia kompilacji, kompletnej implementacji, uwzględnienia we wdrożeniu ani równoważnego zachowania w czasie wykonywania. Kompilacja sprawdza składnię i strukturę, a nie dane ani zachowanie aplikacji. Przejrzyj zarówno przekonwertowane , jak i niekonwertowane obiekty oraz wykonaj oddzielne testy środowiska uruchomieniowego przed użyciem produkcyjnym.

Wyjście symbolu zastępczego

Gdy narzędzie nie może w pełni przekonwertować obiektu, może wygenerować DDL w miarę możliwości lub zastępcze DDL. Niektóre obiekty nie mają użytecznej definicji PostgreSQL.

Symbol zastępczy nie implementuje oryginalnej logiki biznesowej. Na przykład wygenerowana procedura, której ciało zgłasza błąd, może nadal widnieć jako Converted. Sprawdź wygenerowaną definicję i wszelkie notatki konwersji zamiast polegać tylko na stanie.

Obiekty zależne od symbolu zastępczego mogą wymagać ręcznych zmian lub zostać pominięte w wygenerowanym skrypcie wdrożeniowym. Przejrzyj te zależności w Conversion Eksplorator obiektów przed wdrożeniem.

Przypadki, które mogą wymagać ręcznego dokończenia, obejmują:

  • Transakcje autonomiczne. Konwersja procedur korzystających z PRAGMA AUTONOMOUS_TRANSACTION może zależeć od dblink. Brak wymaganych rozszerzeń lub nieobsługiwana logika transakcji mogą uniemożliwić pełną konwersję.
  • Nierozwiązane odniesienia. Brakujące lub nierozwiązane zależności mogą uniemożliwić pełną konwersję lub kompilację.
  • Instrukcje kontroli transakcji. Konstrukcje, takie jak ROLLBACK TO SAVEPOINT, nie zawsze dają się poprawnie przekonwertować.
  • Zaciemniony kod PL/SQL. Treść źródła nie jest dostępna do konwersji. Aby uzyskać więcej informacji, zobacz Wrapped PL/SQL.

Obiekty programowalne

Typ obiektu Limitation Co zrobić
Ciało pakietu Przekonwertowane definicje pakietów nie zapewniają równoważnej inicjalizacji stanu ani trwałości stanu między wywołaniami. Przetestuj stan współdzielony między wywołaniami, transakcjami i sesjami pod kątem zgodności z oczekiwaniami aplikacji.
Procedura, która używa PRAGMA AUTONOMOUS_TRANSACTION Konwersja może korzystać z oddzielnego połączenia za pośrednictwem dblink. Wygenerowana obsługa połączeń i logika transakcji wymagają przeglądu. Zainstaluj wymagane rozszerzenia przed konwersją. Przetestuj kontekst połączenia i sesji, widoczność danych, zatwierdzenia, wycofywanie i obsługę błędów.
Wyzwalacz (zdarzenie systemowe) Kompilacja wygenerowanego wyzwalacza nie zapewnia równoważnej obsługi zdarzeń bazy danych Oracle ani zdarzeń sesji. Jawnie przejrzyj LOGON, LOGOFF, STARTUP, SHUTDOWN i SERVERERROR wyzwalacze. Zweryfikuj zdarzenie docelowe, zakres i uprawnienia oraz ponownie zaimplementuj logikę, której element docelowy nie obsługuje.
Trigger (między edycjami) Mapowanie na zwykły wyzwalacz PostgreSQL wymaga przeglądu pod kątem utraty zakresu edycji Oracle. Przekonwertuj jedną wersję, sprawdź, kiedy wyzwalacz docelowy jest wyzwalany, i obsłuż wdrożenie wersji w procesie wydawniczym.
Treść Ciała typów można wyodrębnić, ale wyodrębnienie nie gwarantuje pełnej implementacji ich metod w PostgreSQL. Przejrzyj wygenerowane definicje metod typu i ich zależności. Ręcznie zaimplementuj dowolną brakującą logikę.
kod źródłowy Java, procedura składowana Java i klasa Java Nie wyodrębniono. Azure Database for PostgreSQL — elastyczny serwer nie umożliwia uruchamiania języka Java w bazie danych. Ponownie zapisz logikę w PL/pgSQL lub przenieś ją do warstwy aplikacji.
Zewnętrzna biblioteka C (CREATE LIBRARY) Nie wyodrębniono. Ponownie zapisz logikę w PL/pgSQL lub przenieś ją do warstwy aplikacji.
Zaszyfrowany kod PL/SQL Nie można odczytać treści wiadomości. Wygenerowane dane wyjściowe mogą zawierać symbole zastępcze, a nie oryginalną implementację. Aby uzyskać więcej informacji, zobacz Wrapped PL/SQL. Uzyskaj oryginalne nierozpakowane źródło przed rozpoczęciem konwersji lub ręcznie zaimplementuj brakującą logikę PostgreSQL.

Zaszyfrowany kod PL/SQL

Narzędzie nie może odczytać implementacji jednostek PL/SQL przechowywanych w postaci ukrytej (zaciemnionej) przy użyciu narzędzia Oracle wrap lub DBMS_DDL.WRAP. Może użyć dostępnych metadanych do wygenerowania elementu zastępczego, takiego jak rutyna, która zgłasza błąd po wywołaniu. Te dane wyjściowe nie rekonstruują oryginalnej logiki biznesowej.

Przejrzyj opakowane jednostki w Eksploratorze obiektów konwersji, nawet jeśli ich stan to Przekonwertowano. Sprawdź wygenerowane definicje, uwagi konwersji i zależności, aby zidentyfikować brakujące implementacje. Symbol zastępczy nie gwarantuje, że obiekty zależne zostaną skonwertowane lub wdrożone.

Uzyskaj oryginalne, nierozpakowane źródło przed rozpoczęciem konwersji. Jeśli konwersja została już ukończona, zaimplementuj i zweryfikuj brakującą logikę postgreSQL ręcznie. Ponowne uruchomienie ukończonej konwersji nie jest obsługiwane.

Obiekty danych i obiekty pamięci masowej

Typ obiektu Limitation Co zrobić
Operator zdefiniowany przez użytkownika (CREATE OPERATOR) Konwersja nie jest gwarantowana i może generować wynik zawierający symbole zastępcze. Przejrzyj wygenerowany operator i przetestuj go.
Indeks (mapa bitowa, sprzężenia mapy bitowej, globalnie partycjonowany lub domena) Nie wyodrębniono. Baza danych PostgreSQL nie używa map bitowych Oracle ani indeksów dziedzinowych. Przejrzyj zależności aplikacji dotyczące funkcji specyficznych dla indeksu, wybierz odpowiednie indeksy docelowe i przetestuj zachowanie i wydajność zapytań.
Dziennik widoku zmaterializowanego (MLOG$) Nie wyodrębniono. Zdefiniuj i przetestuj docelową strategię odświeżania zmaterializowanego widoku, w tym harmonogramy odświeżania i wymagania dotyczące aktualności danych.
Tabela zewnętrzna Nie wyodrębniono. Azure Database for PostgreSQL serwer elastyczny nie ma dostępu do systemu plików serwera, więc file_fdw nie jest dostępny. Załaduj plik do tabeli po stronie klienta przy użyciu \copy lub COPY ... FROM STDIN, z rozszerzeniem azure_storage lub za pośrednictwem aplikacji.
Zaawansowana tabela kolejkowania (AQ) Nie wyodrębniono. Usługa Oracle Advanced Queuing zawiera logikę aplikacji. Przeprojektuj go za pomocą kolejki komunikatów, rozszerzenia PostgreSQL lub usługi obsługi komunikatów Azure.
Tabela łańcucha bloków Nie wyodrębniono. Ponownie zaimplementuj wymaganie integralności w warstwie aplikacji.
Klaster i klaster haszujący Nie wyodrębnione. Utwórz ponownie jako zwykłą lub partycjonowaną tabelę.
Obiekt katalogu (CREATE DIRECTORY) Nie wyodrębnione. Obsługa dostępu do plików w warstwie aplikacji.
Typ indeksu zdefiniowany przez użytkownika (CREATE INDEXTYPE) Nie wyodrębniono. Utwórz ponownie metodę dostępu za pomocą indeksu rozszerzenia PostgreSQL, jeśli taki istnieje.
Połączenie z bazą danych Nie przekonwertowano. Aby uzyskać więcej informacji, zobacz Linki bazy danych. Utwórz ponownie przy użyciu foreign data wrapper.
Synonym Niektóre synonimy, w tym te, które odwołują się do pakietów, procedur lub sekwencji, mogą nie być konwertowane. Przejrzyj mapowania docelowe i zaktualizuj zależne sql, aby odwoływać się do odpowiednich obiektów PostgreSQL.
Kontekst aplikacji (CREATE CONTEXT, DBMS_SESSION.SET_CONTEXT) Nie wyodrębnione. Zamapuj kontekst na ustawienia sesji bazy danych PostgreSQL i odczytaj je przy użyciu polecenia current_setting().
Widok analityczny, wymiar atrybutu, hierarchia, wymiar OLAP, model eksploracji danych i zmaterializowana mapa stref Nie wyodrębniono. Nie mają one celu PostgreSQL. Ponownie skompiluj wymagane wyjście jako widoki lub funkcje lub usuń je.
Klauzula przechowywania LOB, zarejestrowany schemat XML (DBMS_XMLSCHEMA.REGISTERSCHEMA) i indeks powiązany ze schematem XML Nie wyodrębnione. Przemodeluj wymaganie dotyczące przechowywania lub weryfikacji dla obiektu docelowego.
plan Resource Manager i grupa konsumentów, profil SQL, plan bazowy SQL, edycja, profil tłumaczenia SQL, zasady zarządzania cyklem życia informacji, profil ograniczeń i obiekt Workspace Manager Nie wyodrębniono. Są to instancje Oracle, optymalizatory lub artefakty cyklu życia, które są poza zakresem. Utwórz je ponownie w warstwie aplikacji lub infrastruktury albo wdroż je w usłudze Azure Database for PostgreSQL.

Narzędzie nie konwertuje automatycznie linków do prywatnych i publicznych baz danych (CREATE DATABASE LINK, CREATE PUBLIC DATABASE LINK). Łącza do bazy danych przechowują poświadczenia i informacje o zdalnym punkcie końcowym, których nie da się bezpośrednio odwzorować w PostgreSQL.

Utwórz ponownie te linki w miejscu docelowym przy użyciu modułu foreign data wrapper PostgreSQL, takiego jak postgres_fdw lub oracle_fdw, lub refaktoryzuj połączenia na poziomie aplikacji. Przeszukaj źródło Oracle pod kątem @link odwołań, aby znaleźć każdą zależność, w tym odwołania wewnątrz synonimów i widoków.

Obiekty zabezpieczeń i tożsamości

Automatyczna konwersja obiektów zabezpieczeń i tożsamości nie jest obsługiwana. Zaplanuj i zweryfikuj użytkowników, role, uprawnienia i zasady ochrony danych oddzielnie od przekonwertowanego schematu DDL. Użyj inwentaryzacji źródeł Oracle, aby zidentyfikować wymagane mechanizmy kontroli dostępu. Listy wykrywania lub wyodrębnione metadane nie ustanawiają obsługi konwersji ani nie potwierdzają, że mechanizmy kontroli dostępu są skonfigurowane w obiekcie docelowym.

Typ obiektu Limitation Co zrobić
Użytkownik Automatyczna konwersja nie jest obsługiwana. Skonfiguruj dane logowania oddzielnie w Azure. Odtwórz każde konto użytkownika jako rolę PostgreSQL i zweryfikuj wynikowy dostęp przed uruchomieniem produkcyjnym.
Rola Automatyczna konwersja nie jest dostępna. Utwórz ponownie każdą rolę w miejscu docelowym.
Uprawnienie systemowe Automatyczna konwersja nie jest obsługiwana. Zamapuj wymagany dostęp do uprawnień bazy danych PostgreSQL, a następnie zastosuj odpowiednie GRANT instrukcje.
Członkostwo w roli Zautomatyzowana konwersja nie jest obsługiwana. Odtwórz jako GRANT <role> TO <role> instrukcjami.
Uprawnienie do obiektu i przyznawanie Metadane przyznania źródłowego nie konfigurują równoważnych uprawnień docelowych. Utwórz ponownie uprawnienia z inwentarza źródłowego, a następnie je zweryfikuj.
Zabezpieczenia na poziomie wiersza i Virtual Private Database (DBMS_RLS) Nie przekonwertowano. Utwórz ponownie zasady jako zasady zabezpieczeń na poziomie wiersza bazy danych PostgreSQL.
Oracle Label Security Nie przekonwertowano. Przeprojektuj granice dostępu do danych na obiekcie docelowym.
Maskowanie danych (DBMS_REDACT) Nie przekonwertowano. Ponownie zastosuj maskowanie na obiekcie docelowym, w warstwie aplikacji lub za pomocą odpowiednika w PostgreSQL.
Profil, zasada haseł i ujednolicone lub szczegółowe zasady inspekcji zabezpieczeń (DBMS_FGA, AUDIT POLICY) Automatyczna konwersja nie jest obsługiwana. Skonfiguruj równoważne parametry serwera Azure i audyt oraz zarządzaj nimi jako infrastrukturą jako kodem.

Ważna

Brak zabezpieczeń na poziomie wiersza, Oracle Virtual Private Database, Oracle Label Security lub ochrony przez utajnianie danych może prowadzić do ujawnienia wierszy lub wartości, które Oracle odfiltrował lub zamaskował. Zaimplementuj równoważne zabezpieczenia i zweryfikuj skuteczny dostęp przed kierowaniem ruchu produkcyjnego do środowiska docelowego.

Obiekty harmonogramu

Automatyczna konwersja obiektów harmonogramu Oracle nie jest obsługiwana. Planuj harmonogramowanie i orkiestrację oddzielnie. Obiekt wyświetlany w Discovery nie oznacza obsługi konwersji.

Typ obiektu Limitation Co zrobić
DBMS_SCHEDULER zadanie i harmonogram Automatyczna konwersja nie jest obsługiwana. Utwórz ponownie harmonogram na obiekcie docelowym za pomocą pg_cron lub użyj zewnętrznego harmonogramu, takiego jak Azure Logic Apps lub Azure Functions.
Przestarzałe DBMS_JOB zadanie Automatyczna konwersja nie jest obsługiwana. Utwórz ponownie harmonogram za pomocą pg_cron lub harmonogramu aplikacji.
Program, łańcuch, poświadczenie, obserwator plików, klasa zadań, grupa, okno i zadanie oparte na zdarzeniach Automatyczna konwersja nie jest obsługiwana. Przebuduj orkiestrację w zewnętrznym harmonogramie.

Luki na poziomie funkcjonalności

Poniższe elementy to funkcje Oracle, a nie typy obiektów. Mogą wymagać zmian wykraczających poza tworzenie poprawnego kodu DDL PostgreSQL. Przejrzyj inwentarz źródłowy, a także przekonwertowane definicje, ponieważ różnice na poziomie składników mogą nie być wyświetlane jako oddzielne obiekty w wynikach konwersji.

Funkcja Limitation Co zrobić
Tabela partycjonowana hybrydowa (Oracle 19.3 lub nowsza) Konwertuje jako zwykłą tabelę, a partycje zewnętrzne zostaną utracone. Zidentyfikuj tabele partycjonowane hybrydowo w źródle i załaduj dane zewnętrzne oddzielnie.
Widok edycjonowany i wyzwalacz międzyedycyjny Sam widok PostgreSQL lub definicja wyzwalacza PostgreSQL nie ustanawia równoważnego zachowania opartego na wersjach. Przekonwertuj jedną edycję, a następnie zweryfikuj widoczność obiektu i zachowanie wyzwalacza podczas wdrażania wersji.
Tabela niezmienna (Oracle 19.11 lub nowsza) Nie wykryto, i nie ma odpowiednika w PostgreSQL. Wymuś to wymaganie w warstwie aplikacji lub za pomocą wyzwalaczy.
Archiwum danych Flashback Historia temporalna nie jest modelowana. Użyj wzorca tabeli historii lub rozszerzenia czasowego na obiekcie docelowym.
Zapytanie flashback (AS OF TIMESTAMP, AS OF SCN) Nie przekonwertowano. Przepisz zapytania odczytujące historyczne wersje wiersza.
Fragmentowanie Oracle Nie jest modelowane i nie ma jednobazowego odpowiednika w PostgreSQL. Przeprojektuj strategię dystrybucji.
BFILE i specyfiki LOB protokołu SecureFile Zawartość pliku zewnętrznego i zachowanie magazynu LOB wymagają oddzielnego planowania migracji. Przejrzyj odwołania do plików zewnętrznych i zależności dotyczące funkcji LOB specyficznych dla Oracle. Zaplanuj i przetestuj docelową pamięć masową i wzorzec dostępu.

Nawet jeśli kolumny tożsamości, kolumny wirtualne i wygenerowane, niewidoczne kolumny i globalne tabele tymczasowe dają się przekonwertować, zweryfikuj ich definicje i zachowanie w aplikacji. Sprawdź generowanie wartości, widoczność kolumn, okres istnienia danych tymczasowych i zachowanie transakcji. Prywatne tabele tymczasowe istnieją tylko w czasie wykonywania, więc nie są wyświetlane w inwentarzu źródeł.

Granice operacyjne

Pamiętaj o tych ograniczeniach podczas planowania migracji:

  • Konwersja schematu nie migruje danych wiersza. Planuj migrację danych i walidację danych niezależnie od konwersji schematu.
  • Ponowne uruchomienia konwersji nie są obsługiwane. Przejrzyj wygenerowane definicje PostgreSQL i popraw je za pomocą Conversion Eksplorator obiektów. Ręcznie skompiluj edytowane definicje i sprawdź, czy skrypt SQL wdrożenia zawiera poprawki, które zamierzasz wdrożyć.
  • Schematy scratch są tworzone ponownie. Istniejące schematy tymczasowe, które odpowiadają wybranym schematom Oracle, są usuwane za pomocą DROP SCHEMA ... CASCADE i tworzone ponownie. Użyj pustej lub dedykowanej, nieużywanej bazy danych tymczasowej bez obiektów ani danych, które należy zachować. Zobacz Przygotuj tymczasową bazę danych.
  • Wdrożenie jest oddzielną operacją. Generowanie plików instalacyjnych nie powoduje uruchomienia ich na docelowym serwerze Azure Database for PostgreSQL. Przejrzyj instrukcje, uruchom wygenerowane skrypty i sprawdź wyniki wdrażania i weryfikacji obiektów zgodnie z opisem w Setup Experience.

Uzyskaj pomoc

W przypadku napotkania ograniczeń:

  1. Przejrzyj Eksplorator obiektów konwersji dla definicji obiektów i notatek konwersji. Użyj polecenia Zapytaj, aby zrozumieć konwersję obiektu lub Napraw do zmian wspomaganych przez Copilot w pliku PostgreSQL.
  2. Zapoznaj się z dokumentacją bazy danych PostgreSQL , aby zapoznać się z alternatywnymi implementacjami.
  3. Zapoznaj się z najlepszymi praktykami dotyczącymi wzorców migracji z Oracle do Azure Database for PostgreSQL.
  4. Przetestuj w środowisku nieprodukcyjnym przed wdrożeniem na środowisko produkcyjne.