Migracja z Oracle do MySQL/Percona Server nie jest trywialnym zadaniem. Chociaż jest coraz łatwiej, zwłaszcza wraz z pojawieniem się MySQL 8.0 i Percona ogłosiła Percona Server dla MySQL 8.0 GA. Oprócz planowania migracji z Oracle na Percona Server, musisz upewnić się, że rozumiesz cel i funkcjonalność, dlaczego ma to być Percona Server.
Ten blog skupi się na migracji z Oracle do Percona Server jako wybranej docelowej bazy danych. W witrynie Oracle znajduje się strona dotycząca informacji uzupełniających dla programistów SQL dotyczących migracji MySQL, która może być wykorzystana jako odniesienie do planowanej migracji. Ten blog nie będzie obejmował całego procesu migracji, ponieważ jest to długi proces. Miejmy jednak nadzieję, że dostarczy wystarczająco dużo informacji ogólnych, które posłużą jako przewodnik po procesie migracji.
Ponieważ Percona Server jest rozwidleniem MySQL, prawie wszystkie funkcje, które pojawiają się w MySQL, są obecne w Percona Server. Tak więc wszelkie odniesienia do MySQL mają zastosowanie również do Percona Server. Wcześniej pisaliśmy na blogu o migracji bazy danych Oracle do PostgreSQL. Jeszcze raz powtórzę powody, dla których można rozważyć migrację z Oracle do RDBMS typu open source, takiego jak PostgreSQL lub Percona Server/MySQL/MariaDB.
- Koszt:Jak być może wiesz, koszt licencji Oracle jest bardzo wysoki, a niektóre funkcje, takie jak partycjonowanie i wysoka dostępność, wiążą się z dodatkowymi kosztami. Ogólnie rzecz biorąc, jest to bardzo drogie.
- Elastyczne licencjonowanie open source i łatwa dostępność od dostawców chmury publicznej, takich jak AWS.
- Skorzystaj z dodatków typu open source, aby poprawić wydajność.
Planowanie i strategia rozwoju
Migracja z Oracle do Percona Server 8.0 może być uciążliwa, ponieważ istnieje wiele kluczowych czynników, które należy wziąć pod uwagę i rozwiązać. Na przykład Oracle może działać na komputerze z systemem Windows Server, ale Percona Server nie obsługuje systemu Windows. Chociaż można go skompilować dla systemu Windows, sama Percona nie oferuje żadnego wsparcia dla systemu Windows. Należy również określić wymagania dotyczące architektury bazy danych, ponieważ Percona Server nie jest przeznaczony dla aplikacji OLAP (Online Analytical Processing) ani aplikacji do magazynowania danych. Percona Server/MySQL RDBMS doskonale pasują do OLTP (przetwarzania transakcji online).
Identyfikując kluczowy aspekt architektury bazy danych, na przykład jeśli Twoja obecna architektura Oracle implementuje MAA (Maximum Available Architecture) z Data Guard ++ Oracle RAC (Real Application Cluster), powinieneś określić jego równoważność w Percona Server. Nie ma na to prostej odpowiedzi w MySQL/Percona Server. Można jednak wybrać replikację synchroniczną, asynchroniczną (klaster Percona XtraDB nadal jest w wersji 5.7.x) lub replikację grupową. Następnie istnieje wiele alternatyw, które można wdrożyć dla własnego rozwiązania o wysokiej dostępności. Na przykład (by wymienić tylko kilka) przy użyciu stosu Corosync/Pacemaker/DRBD/Linux lub przy użyciu MHA (MySQL High Availability) lub przy użyciu stosu Keepalived/HaProxy/ProxySQL lub po prostu polegaj na ClusterControl, który obsługuje Keepalived, HaProxy, ProxySQL, Garbd i Maxscale dla rozwiązań o wysokiej dostępności.
Z drugiej strony pytanie, które należy również rozważyć w ramach planu, brzmi:„Jak Percona zapewni wsparcie i kto nam pomoże, gdy sam Percona Server napotka błąd lub jak pilna jest potrzeba pomocy?”. Jedną rzeczą do rozważenia jest również budżet, jeśli celem migracji z korporacyjnej bazy danych do RDBMS o otwartym kodzie źródłowym jest cięcie kosztów.
Istnieją różne opcje, od planowania migracji po czynności, które należy wykonać w ramach strategii rozwoju. Takie opcje obejmują współpracę z ekspertami w dziedzinie MySQL/Percona Server, co obejmuje nas w firmie Manynines. Istnieje wiele firm konsultingowych MySQL, które mogą Ci w tym pomóc, ponieważ migracja z Oracle do MySQL wymaga dużej wiedzy i know-how w obszarze MySQL Server. Nie powinno to ograniczać się do bazy danych, ale powinno obejmować wiedzę fachową w zakresie skalowalności, redundancji, tworzenia kopii zapasowych, wysokiej dostępności, bezpieczeństwa, monitorowania/obserwowalności, odzyskiwania i angażowania się w systemy o znaczeniu krytycznym. Ogólnie rzecz biorąc, powinien on rozumieć Twój wgląd w architekturę bez ujawniania poufności Twoich danych.
Ocena lub kontrola wstępna
Tworzenie kopii zapasowych danych, w tym plików konfiguracyjnych lub instalacyjnych, dostrajania jądra, skryptów automatyzacji, nie powinno zostać zapomniane. To oczywiste zadanie, ale przed migracją zawsze najpierw zabezpiecz wszystko , zwłaszcza gdy przenosisz się na inną platformę.
Musisz również ocenić, czy Twoje aplikacje są zgodne z aktualnymi konwencjami inżynierii oprogramowania i upewnić się, że są niezależne od platformy. Praktyki te mogą być korzystne, zwłaszcza w przypadku przejścia na inną platformę bazy danych, taką jak Percona Server for MySQL.
Zwróć uwagę, że system operacyjny wymagany przez Percona Server może być popisem, jeśli twoja aplikacja i baza danych działają na Windows Server, a aplikacja jest zależna od systemu Windows; to może być dużo pracy! Zawsze pamiętaj, że Percona Server jest na innej platformie:doskonałość może nie być gwarantowana, ale można ją osiągnąć wystarczająco blisko.
Na koniec upewnij się, że docelowy sprzęt jest zaprojektowany do pracy zgodnie z wymaganiami serwera Percona lub przynajmniej jest wolny od błędów (patrz tutaj). Możesz rozważyć testy warunków skrajnych najpierw z Percona Server, zanim niezawodnie opuścisz bazę danych Oracle.
Co powinieneś wiedzieć
Warto zauważyć, że w Percona Server / MySQL można tworzyć wiele baz danych, podczas gdy Oracle nie ma takiej samej funkcjonalności jak MySQL.
W MySQL fizycznie schemat jest równoznaczny z bazą danych. Możesz zastąpić słowo kluczowe SCHEMA zamiast DATABASE w składni MySQL SQL, na przykład używając CREATE SCHEMA zamiast CREATE DATABASE; podczas gdy Oracle to wyróżnia. Schemat reprezentuje tylko część bazy danych:tabele i inne obiekty należące do jednego użytkownika. Zwykle istnieje relacja jeden-do-jednego między instancją a bazą danych.
Na przykład w konfiguracji replikacji równoważnej w Oracle (np. Real Application Clusters lub RAC) wiele instancji ma dostęp do jednej bazy danych. Pozwala to uruchomić Oracle na wielu serwerach, ale wszystkie mają dostęp do tych samych danych. Jednak w MySQL możesz zezwolić na dostęp do wielu baz danych z wielu instancji, a nawet możesz odfiltrować bazy danych/schemat, które możesz replikować do węzła MySQL.
Odwołując się do jednego z naszych poprzednich blogów, ta sama zasada dotyczy konwersji bazy danych za pomocą dostępnych narzędzi znalezionych w Internecie.
Nie ma takiego narzędzia, które potrafiłoby w 100% przekonwertować bazę danych Oracle na Percona Server/MySQL; część z nich będzie wykonywana ręcznie.
Sprawdź poniższe sekcje, aby dowiedzieć się, o czym musisz wiedzieć, jeśli chodzi o migrację i weryfikację logicznego wyniku SQL.
Mapowanie typu danych
MySQL / Percona Server ma wiele typów danych, które są prawie takie same jak Oracle, ale nie tak bogate w porównaniu do Oracle. Ale od czasu pojawienia się wersji 5.7.8 MySQL obsługuje natywny typ danych JSON.
Poniżej znajduje się jego równoważna reprezentacja typu danych (reprezentacja tabelaryczna pochodzi stąd):
Wyrocznia | MySQL | |||
---|---|---|---|---|
1 | BPLIK | Wskaźnik do pliku binarnego, ⇐ 4G | VARCHAR(255) | |
2 | BINARY_FLOAT | 32-bitowa liczba zmiennoprzecinkowa | PŁYWAJĄCY | |
3 | BINARY_DOUBLE | 64-bitowa liczba zmiennoprzecinkowa | PODWÓJNE | |
4 | BLOB | Duży obiekt binarny, ⇐ 4G | LONGBLOB | |
5 | ZNAK(n), ZNAK(n) | Ciąg o stałej długości, 1 ⇐ n ⇐ 255 | ZNAK(n), ZNAK(n) | |
6 | ZNAK(n), ZNAK(n) | Ciąg o stałej długości, 256 ⇐ n ⇐ 2000 | VARCHAR(n) | |
7 | CLOB | Znak duży obiekt, ⇐ 4G | DŁUGI TEKST | |
8 | DATA | Data i godzina | DATA GODZINA | |
9 | DZIESIĘTNY(p,s), DZIESIĘTNY(p,s) | Liczba punktów stałych | DZIESIĘTNY(p,s), DEC(p,s) | |
10 | PODWÓJNA PRECYZJA | Liczba zmiennoprzecinkowa | PODWÓJNA PRECYZJA | |
11 | PŁYWAJĄCY(p) | Liczba zmiennoprzecinkowa | PODWÓJNE | |
12 | CAŁKOWITA, INT | 38 cyfr liczba całkowita | INT | DZIESIĘTNY(38) |
13 | PRZERWA ROK(p) DO MIESIĄCA | Przedział dat | VARCHAR(30) | |
14 | PRZERWA DZIEŃ(p) DO SEKUND(y) | Dzień i przedział czasu | VARCHAR(30) | |
15 | DŁUGI | Dane znakowe, ⇐ 2G | DŁUGI TEKST | |
16 | DŁUGIE SUROWE | Dane binarne, 2G | LONGBLOB | |
17 | NCHAR(n) | Ciąg UTF-8 o stałej długości, 1 ⇐ n ⇐ 255 | NCHAR(n) | |
18 | NCHAR(n) | Ciąg UTF-8 o stałej długości, 256 ⇐ n ⇐ 2000 | NVARCHAR(n) | |
19 | NCHAR RÓŻNE(n) | Strumień UTF-8 o zmiennej długości, 1 n ⇐ 4000 | NCHAR RÓŻNE(n) | |
20 | NCLOB | Ciąg Unicode o zmiennej długości, 4G | NVARCHAR(maks.) | |
21 | LICZBA(p,0), LICZBA(p) | 8-bitowa liczba całkowita, 1 <=p <3 | MAŁE | (0 do 255) |
16-bitowa liczba całkowita, 3 <=p <5 | MAŁE | |||
32-bitowa liczba całkowita, 5 <=p <9 | INT | |||
64-bitowa liczba całkowita, 9 <=p <19 | WIELKIE | |||
Liczba stałoprzecinkowa, 19 <=p <=38 | DZIESIĘTNY(p) | |||
22 | LICZBA(p,s) | Liczba punktów stałych, s> 0 | DZIESIĘTNY(p,s) | |
23 | LICZBA, LICZBA(*) | Liczba zmiennoprzecinkowa | PODWÓJNE | |
24 | LICZBA(p,s) | Liczba punktów stałych | NUMERYCZNE(p,s) | |
25 | NVARCHAR2(n) | Ciąg UTF-8 o zmiennej długości, 1 n ⇐ 4000 | NVARCHAR(n) | |
26 | RAW(n) | Ciąg binarny o zmiennej długości, 1 ⇐ n ⇐ 255 | BINARNY(n) | |
27 | RAW(n) | Ciąg binarny o zmiennej długości, 256 ⇐ n ⇐ 2000 | SŁOWNICA(n) | |
28 | PRAWDZIWE | Liczba zmiennoprzecinkowa | PODWÓJNE | |
29 | ROWID | Fizyczny adres wiersza | CHAR(10) | |
30 | MAŁY | 38 cyfr liczba całkowita | DZIESIĘTNY(38) | |
31 | ZNACZNIK CZASOWY(p) | Data i godzina z ułamkiem | DATA GODZINA(p) | |
32 | ZNACZNIK CZASOWY(p) ZE STREFĄ CZASOWĄ | Data i godzina z ułamkiem i strefą czasową | DATA GODZINA(p) | |
33 | UROWID(n) | Logiczne adresy wierszy, 1 ⇐ n ⇐ 4000 | VARCHAR(n) | |
34 | VARCHAR(n) | Ciąg o zmiennej długości, 1 n ⇐ 4000 | VARCHAR(n) | |
35 | VARCHAR2(n) | Ciąg o zmiennej długości, 1 n ⇐ 4000 | VARCHAR(n) | |
36 | XMLTYPE | Dane XML | DŁUGI TEKST |
Atrybuty i opcje typu danych:
Wyrocznia | MySQL |
Semantyka rozmiaru kolumny BYTE i CHAR | Rozmiar jest zawsze w znakach |
Transakcje
Percona Server używa XtraDB (rozszerzonej wersji InnoDB) jako podstawowego silnika pamięci masowej do obsługi danych transakcyjnych; chociaż różne silniki pamięci masowej mogą być alternatywą do obsługi transakcji, takich jak silniki pamięci masowej TokuDB (przestarzałe) i MyRocks.
Chociaż istnieją zalety i korzyści płynące z używania lub eksploracji MyRocks z XtraDB, ten ostatni jest bardziej niezawodnym i de facto silnikiem pamięci masowej, z którego korzysta Percona Server, i jest domyślnie włączony, więc użyjemy tego silnika pamięci masowej jako podstawy do migracji w odniesieniu do do transakcji.
Domyślnie Percona Server / MySQL ma zmienną autocommit ustawioną na ON, co oznacza, że musisz jawnie obsługiwać instrukcje transakcyjne, aby skorzystać z funkcji ROLLBACK w celu ignorowania zmian lub korzystania z funkcji SAVEPOINT.
Jest to w zasadzie ta sama koncepcja, której używa Oracle w zakresie zatwierdzania, cofania zmian i punktów zapisu.
W przypadku transakcji jawnych oznacza to, że musisz użyć POCZĄTEK TRANSAKCJI/POCZĄTEK;
W przeciwnym razie, jeśli musisz wyłączyć automatyczne zatwierdzanie, musisz cały czas jawnie zatwierdzać swoje oświadczenia, które wymagają zmian w danych.
Podwójny stół
MySQL ma podwójną kompatybilność z Oracle, co ma na celu zapewnienie kompatybilności baz danych przy użyciu fikcyjnej tabeli, czyli DUAL.
Odpowiada to wykorzystaniu przez Oracle DUAL, więc wszelkie istniejące instrukcje w Twojej aplikacji, które używają DUAL, mogą nie wymagać żadnych zmian po migracji do Percona Server.
Klauzula Oracle FROM jest obowiązkowa dla każdej instrukcji SELECT, więc baza danych Oracle używa tabeli DUAL dla instrukcji SELECT, gdzie nazwa tabeli nie jest wymagana.
W MySQL klauzula FROM nie jest obowiązkowa, więc tabela DUAL nie jest konieczna. Jednak tabela DUAL nie działa dokładnie tak samo, jak w przypadku Oracle, ale w przypadku prostych funkcji SELECT w Percona Server jest to w porządku.
Zobacz poniższy przykład:
W Oracle
SQL> DESC DUAL;
Name Null? Type
----------------------------------------- -------- ----------------------------
DUMMY VARCHAR2(1)
SQL> SELECT CURRENT_TIMESTAMP FROM DUAL;
CURRENT_TIMESTAMP
---------------------------------------------------------------------------
16-FEB-19 04.16.18.910331 AM +08:00
Ale w MySQL:
mysql> DESC DUAL;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DUAL' at line 1
mysql> SELECT CURRENT_TIMESTAMP FROM DUAL;
+---------------------+
| CURRENT_TIMESTAMP |
+---------------------+
| 2019-02-15 20:20:28 |
+---------------------+
1 row in set (0.00 sec)
Uwaga:DESC DUAL składnia nie działa w MySQL, a wyniki również różnią się, ponieważ CURRENT_TIMESTAMP (używa typu danych TIMESTAMP) w MySQL nie obejmuje strefy czasowej.
SYSDATE
Funkcja Oracle SYSDATE jest prawie taka sama w MySQL.
MySQL zwraca datę i godzinę i jest funkcją, która wymaga () (zamknij i otwórz nawiasy bez żadnych argumentów. Aby zademonstrować to poniżej, oto Oracle i MySQL na temat używania SYSDATE.
W Oracle użycie zwykłego SYSDATE po prostu zwraca datę dnia bez godziny. Ale aby uzyskać czas i datę, użyj TO_CHAR, aby przekonwertować datę i godzinę na żądany format; podczas gdy w MySQL możesz go nie potrzebować, aby uzyskać datę i godzinę, ponieważ zwraca oba.
Zobacz przykład poniżej.
W Oracle:
SQL> SELECT TO_CHAR (SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "NOW" FROM DUAL;
NOW
-------------------
02-16-2019 04:39:00
SQL> SELECT SYSDATE FROM DUAL;
SYSDATE
---------
16-FEB-19
Ale w MySQL:
mysql> SELECT SYSDATE() FROM DUAL;
+---------------------+
| SYSDATE() |
+---------------------+
| 2019-02-15 20:37:36 |
+---------------------+
1 row in set (0.00 sec)
Jeśli chcesz sformatować datę, MySQL ma funkcję DATE_FORMAT().
Więcej informacji można znaleźć w dokumentacji MySQL Data i godzina.
TO_DATE
Odpowiednikiem Oracle TO_DATE w MySQL jest funkcja STR_TO_DATE().
Jest prawie identyczny z tym w Oracle:zwraca typ danych DATE, podczas gdy w MySQL zwraca typ danych DATETIME.
Wyrocznia:
SQL> SELECT TO_DATE ('20190218121212','yyyymmddhh24miss') as "NOW" FROM DUAL;
NOW
-------------------------
18-FEB-19
MySQL:
mysql> SELECT STR_TO_DATE('2019-02-18 12:12:12','%Y-%m-%d %H:%i:%s') as "NOW" FROM DUAL;
+---------------------+
| NOW |
+---------------------+
| 2019-02-18 12:12:12 |
+---------------------+
1 row in set (0.00 sec)
SYNONIM
W MySQL nie ma takiego wsparcia ani odpowiednika dla SYNONYM w Oracle.
Możliwą alternatywą dla MySQL jest użycie VIEW.
Chociaż SYNONYM może być używany do tworzenia aliasów zdalnej tabeli,
np.
CREATE PUBLIC SYNONYM emp_table FOR [email protected]
W MySQL możesz skorzystać z mechanizmu pamięci masowej FEDERATED.
np.
CREATE TABLE hr_employees (
id INT(20) NOT NULL AUTO_INCREMENT,
name VARCHAR(32) NOT NULL DEFAULT '',
other INT(20) NOT NULL DEFAULT '0',
PRIMARY KEY (id),
INDEX name (name),
INDEX other_key (other)
)
ENGINE=FEDERATED
DEFAULT CHARSET=utf8mb4
CONNECTION='mysql://[email protected]_host:9306/federated/test_table';
Możesz też uprościć proces za pomocą składni CREATE SERVER, dzięki czemu tworzenie tabeli działającej jako SYNONYM dostępu do tabeli zdalnej będzie łatwiejsze. Więcej informacji na ten temat znajdziesz w dokumentacji.
Zachowanie pustego ciągu i NULL
Zwróć uwagę, że w Percona Server / MySQL pusty ciąg nie jest NULL, podczas gdy Oracle traktuje pusty ciąg jako wartości null.
W Oracle:
SQL> SELECT CASE WHEN '' IS NULL THEN 'Yes' ELSE 'No' END AS "Null Eval" FROM dual;
Nul
---
Yes
W MySQL:
mysql> SELECT CASE WHEN '' IS NULL THEN 'Yes' ELSE 'No' END AS "Null Eval" FROM dual;
+-----------+
| Null Eval |
+-----------+
| No |
+-----------+
1 row in set (0.00 sec)
Sekwencje
W MySQL nie ma dokładnie takiego samego podejścia do tego, co Oracle robi dla SEQUENCE.
Chociaż istnieje kilka postów, które symulują funkcjonalność tego podejścia, możesz spróbować uzyskać następny klucz za pomocą LAST_INSERT_ID(), o ile indeks klastrowy tabeli, PRIMARY KEY, jest zdefiniowany jako <
Funkcje ciągu znaków
W przeciwieństwie do Oracle, MySQL / Percona Server ma kilka funkcji ciągów, ale nie tak wiele przydatnych funkcji wbudowanych w bazę danych.
Byłoby zbyt długo, aby omawiać to tutaj pojedynczo, ale możesz sprawdzić dokumentację MySQL i porównać ją z funkcjami ciągów Oracle.
Oświadczenia DML
Instrukcje Insert/Update/Delete z Oracle są zgodne w MySQL.
Oracle WSTAW WSZYSTKO/WSTAW PIERWSZY nie jest obsługiwany w MySQL.
W przeciwnym razie musisz podać swoje zapytania MySQL jeden po drugim.
np.
W Oracle:
SQL> INSERT ALL
INTO CUSTOMERS (customer_id, customer_name, city) VALUES (1000, 'Jase Alagaban', 'Davao City')
INTO CUSTOMERS (customer_id, customer_name, city) VALUES (2000, 'Maximus Aleksandre Namuag', 'Davao City')
SELECT * FROM dual;
2 rows created.
Utworzono 2 wiersze.
Ale w MySQL musisz uruchamiać wstawianie pojedynczo:
mysql> INSERT INTO CUSTOMERS (customer_id, customer_name, city) VALUES (1000, 'Jase Alagaban', 'Davao City');
Query OK, 1 row affected (0.02 sec)
mysql> INSERT INTO CUSTOMERS (customer_id, customer_name, city) VALUES (2000, 'Maximus Aleksandre Namuag', 'Davao City');
Query OK, 1 row affected (0.00 sec)
Polecenie INSERT ALL/INSERT FIRST nie ma porównania z tym, jak jest używane w Oracle, gdzie możesz skorzystać z warunków, dodając słowo kluczowe WHEN w swojej składni; w tym przypadku nie ma równoważnej opcji w MySQL / Percona Server.
Dlatego Twoim alternatywnym rozwiązaniem jest użycie procedur.
Symbol złączy zewnętrznych „+”
W Oracle używanie operatora + dla złączeń lewych i prawych nie jest obecnie obsługiwane w MySQL, ponieważ operator + jest używany tylko do decyzji arytmetycznych.
W związku z tym, jeśli masz operator + w istniejących instrukcjach Oracle SQL, musisz zastąpić go przez LEFT JOIN lub RIGHT JOIN.
Możesz sprawdzić oficjalną dokumentację dotyczącą „Outer Join Simplification” MySQL.
ROZPOCZNIJ OD...POŁĄCZ PRZEZ
Oracle używa START WITH..CONNECT BY do zapytań hierarchicznych.
Począwszy od MySQL / Percona 8.0 istnieje wsparcie dla generowania hierarchicznych wyników danych, które wykorzystują modele takie jak lista sąsiedztwa lub modele zestawów zagnieżdżonych. Nazywa się to Common Table Expressions (CTE) w MySQL.
Podobnie jak PostgreSQL, MySQL używa Z REKURSJĄ składnia zapytań hierarchicznych, więc przetłumacz CONNECT BY oświadczenie w Z REKURSYWNYMI oświadczenie.
Sprawdź poniżej, czym różni się od ORACLE i MySQL / Percona Server.
W Oracle:
SELECT cp.id, cp.title, CONCAT(c2.title, ' > ' || cp.title) as path
FROM category cp INNER JOIN category c2
ON cp.parent_id = c2.id
WHERE cp.parent_id IS NOT NULL
START WITH cp.id >= 1
CONNECT BY NOCYCLE PRIOR c2.id=cp.parent_id;
A w MySQL:
WITH RECURSIVE category_path (id, title, path) AS
(
SELECT id, title, title as path
FROM category
WHERE parent_id IS NULL
UNION ALL
SELECT c.id, c.title, CONCAT(cp.path, ' > ', c.title)
FROM category_path AS cp JOIN category AS c
ON cp.id = c.parent_id
)
SELECT * FROM category_path
ORDER BY path;
PL/SQL w MySQL/Perconie?
MySQL / Percona RDBMS ma inne podejście niż Oracle PL/SQL.
MySQL używa procedur składowanych lub funkcji składowanych, które są podobne do PL/SQL i składni przy użyciu BEGIN..END składnia.
PL/SQL Oracle jest kompilowany przed wykonaniem, gdy jest ładowany na serwer, podczas gdy MySQL jest kompilowany i przechowywany w pamięci podręcznej, gdy jest wywoływany.
Możesz sprawdzić tę dokumentację jako przewodnik dotyczący konwersji PL/SQL do MySQL.
Narzędzia migracji
Zrobiłem rozeznanie w poszukiwaniu narzędzi, które mogą być de facto standardem migracji, ale nie mogłem znaleźć dobrej odpowiedzi.
Chociaż znalazłem linie kwadratowe i wygląda to prosto, ale obiecująco.
Chociaż nie zagłębiłem się w to, strona internetowa oferuje garść spostrzeżeń, które mogą pomóc w migracji z Oracle do MySQL/Percona Server. Istnieją również płatne narzędzia, takie jak to i to.
Przeszukałem również github, ale nie znalazłem nic bardziej atrakcyjnego jako rozwiązanie problemu. Dlatego też, jeśli zamierzasz migrować z Oracle i do Amazon, mają oni narzędzie do konwersji schematu AWS, dla którego obsługiwana jest migracja z Oracle do MySQL.
Ogólnie rzecz biorąc, migracja nie jest łatwa, ponieważ Oracle RDBMS jest taką bestią z wieloma funkcjami, których Percona Server / MySQL lub MariaDB RDBMS nadal nie mają.
W każdym razie, jeśli znajdziesz lub znasz jakieś narzędzia, które uznasz za pomocne i przydatne do migracji z Oracle do MySQL / Percona Server, zostaw komentarz na tym blogu!
Testowanie
W ramach planu migracji testowanie jest ważnym zadaniem, które odgrywa bardzo ważną rolę i wpływa na decyzję dotyczącą migracji.
Narzędzie dbdeployer (port MySQL Sandbox) jest bardzo pomocnym narzędziem, z którego możesz skorzystać. Jest to dość łatwe, aby wypróbować różne podejścia i zaoszczędzić czas, zamiast konfigurować cały stos, jeśli Twoim celem jest wypróbowanie najpierw platformy RDBMS.
Do testowania przechowywanych procedur SQL (funkcji lub procedur), wyzwalaczy, zdarzeń sugeruję użycie tych narzędzi mytap lub Google Unit Testing Framework.
Percona również oferuje szereg narzędzi, które można pobrać na swojej stronie internetowej. Sprawdź zestaw narzędzi Percona tutaj. Możesz wybrać narzędzia zgodnie ze swoimi potrzebami, szczególnie do testów i zadań produkcyjnych.
Ogólnie rzecz biorąc, rzeczy, o których należy pamiętać jako wytyczne podczas wykonywania testu dla serwera MySQL, to:
- Po instalacji należy rozważyć dostrojenie. Sprawdź ten blog Percona, aby uzyskać pomoc.
- Przeprowadź testy porównawcze i testy obciążenia dla konfiguracji w bieżącym węźle. Sprawdź mysqlslap i sysbench, które mogą Ci w tym pomóc. Zajrzyj również na nasz blog „Jak porównywać wydajność MySQL i MariaDB za pomocą SysBench”.
- Sprawdź swoje DDL, czy są poprawnie zdefiniowane, takie jak typy danych, ograniczenia, indeksy klastrowe i dodatkowe lub partycje, jeśli je masz.
- Sprawdź swój DML, zwłaszcza jeśli składnia jest poprawna i poprawnie zapisujesz dane zgodnie z oczekiwaniami.
- Sprawdź zapisane procedury, zdarzenia, wyzwalacz, aby upewnić się, że uruchamiają/zwracają oczekiwane wyniki.
- Sprawdź, czy uruchomione zapytania są wydajne. Proponuję skorzystać z narzędzi open source lub wypróbować nasz produkt ClusterControl. Oferuje monitorowanie/obserwację, zwłaszcza serwera MySQL / Percona. Możesz użyć ClusterControl tutaj, aby monitorować swoje zapytania i jego plan zapytań, aby upewnić się, że są wydajne.