W poprzednich blogach omawialiśmy temat Jak przeprowadzić migrację z Oracle do MySQL / Percona Server, a ostatnio Migracja z bazy danych Oracle do MariaDB — co powinieneś wiedzieć.
Z biegiem lat i wraz z pojawieniem się nowych wersji MySQL i MariaDB, oba projekty całkowicie odeszły od dwóch bardzo różnych platform RDBMS.
MariaDB i MySQL znacznie różnią się od siebie, zwłaszcza po pojawieniu się ich najnowszych wersji:MySQL 8.0 i MariaDB 10.3 GA oraz 10.4 (obecnie kandydat RC).
Wraz z wydaniem MariaDB TX 3.0, MariaDB zaskoczyła wielu, ponieważ nie jest już bezpośrednim zamiennikiem MySQL. Wprowadza nowy poziom kompatybilności z bazą danych Oracle i staje się teraz prawdziwą alternatywą dla Oracle, a także innych korporacyjnych i zastrzeżonych baz danych, takich jak IBM DB2 lub EnterpriseDB.
Począwszy od MariaDB w wersji 10.3, wprowadzono istotne funkcje, takie jak tabele wersjonowane przez system i, co jest najbardziej atrakcyjne dla Oracle DBA, obsługa PL/SQL!
Według strony MariaDB około 80% starszej wersji Oracle PL/SQL można migrować bez przepisywania kodu. MariaDB ma również ColumnStore, który jest ich nowym silnikiem analitycznym i kolumnowym silnikiem pamięci masowej przeznaczonym do rozproszonego przetwarzania masowo równoległego (MPP), takiego jak analiza dużych zbiorów danych.
Zespół MariaDB ciężko pracował nad dodatkową obsługą PL/SQL. Zapewnia dodatkową łatwość migracji do MariaDB z Oracle. Jako punkt odniesienia dla planowanej migracji możesz sprawdzić następujące odniesienie z MariaDB. Jak na naszym poprzednim blogu, nie obejmie to 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.
Planowanie i strategia rozwoju
Dla DBA, migracja z bazy danych Oracle do MariaDB, taka migracja oznacza wiele podobnych czynników, które nie powinny być zbyt trudne do przestawienia i dostosowania. MariaDB może działać na serwerze Windows i ma pliki binarne dostępne do pobrania na platformę Windows. Jeśli używasz Oracle for OLAP (Online Analytical Processing) lub analizy biznesowej, MariaDB ma również ColumnStore, który jest odpowiednikiem magazynu kolumn Oracle Database In-Memory.
Jeśli jesteś przyzwyczajony do posiadania architektury Oracle posiadającej MAA (maksymalna dostępna architektura) z Data Guard ++ Oracle RAC (Real Application Cluster), tak samo jak MySQL/Percona Server, w MariaDB możesz wybrać replikację synchroniczną, pół- synchronizacji lub replikacji asynchronicznej.
Aby uzyskać wysoce dostępne rozwiązanie, MariaDB ma Maxscale jako główną opcję, której możesz użyć. Możesz mieszać MaxScale z Keepalive i HAProxy. Na przykład ClusterControl może zarządzać tym wydajnie, nawet dzięki nowemu produktowi MariaDB, MariaDB TX. Zobacz nasz poprzedni blog, aby dowiedzieć się więcej o tym, jak ClusterControl może skutecznie zarządzać tym.
Ponieważ MariaDB jest technologią open source, należy rozważyć to pytanie:„Jak możemy uzyskać wsparcie?”
Wybierając opcję pomocy technicznej, musisz upewnić się, że nie ogranicza się ona do bazy danych, ale powinna obejmować wiedzę z zakresu skalowalności, redundancji, odporności, 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, oferta wsparcia, którą wybierzesz, musi obejmować zrozumienie konfiguracji Twojej architektury bez narażania poufności Twoich danych.
Ponadto MariaDB ma bardzo dużą i współpracującą społeczność na całym świecie. Jeśli napotkasz problemy i chcesz zapytać osoby zaangażowane w tę społeczność, możesz wypróbować Freenode za pośrednictwem klienta IRC (Internet Relay Chat), przejść do ich strony społeczności lub dołączyć do ich listy mailingowej.
Ocena lub kontrola wstępna
Należy wziąć pod uwagę tworzenie kopii zapasowych danych, w tym plików konfiguracyjnych lub instalacyjnych, dostrajania jądra, skryptów automatyzacji:to oczywiste zadanie, ale przed migracją zawsze najpierw zabezpiecz wszystko, zwłaszcza w przypadku przeniesienia 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 przy przejściu na inną platformę bazy danych.
Ponieważ MariaDB jest technologią typu open source, upewnij się, że wiesz, jakie są dostępne łączniki dostępne w MariaDB. W tej chwili jest to całkiem proste, ponieważ istnieją różne dostępne biblioteki klienckie. Sprawdź tutaj listę tych bibliotek klienckich. Poza tym możesz również sprawdzić tę listę dostępnych klientów i narzędzi.
Na koniec upewnij się, że spełniasz wymagania sprzętowe.
MariaDB nie ma określonych wymagań:typowy serwer towarowy może działać, ale zależy to od wymaganej wydajności. Jednakże, jeśli jesteś zaangażowany w ColumnStore dla swoich aplikacji analitycznych lub aplikacji hurtowni danych, zapoznaj się z ich dokumentacją. Zaczerpnięte z ich strony, dla AWS, przetestowali to generalnie przy użyciu typów instancji m4.4xlarge jako opłacalnego pośrednika. R4.8xlarge również został przetestowany i działa około dwa razy szybciej za około dwukrotnie wyższą cenę.
Co powinieneś wiedzieć
Podobnie jak MySQL, w MariaDB możesz tworzyć wiele baz danych, podczas gdy Oracle nie ma takiej samej funkcjonalności.
W MariaDB schemat jest synonimem bazy danych. W składni MariaDB SQL można zastąpić słowo kluczowe SCHEMA zamiast DATABASE. Na przykład za pomocą UTWÓRZ SCHEMAT zamiast UTWÓRZ BAZĘ DANYCH; podczas gdy Oracle ma za to wyróżnienie. 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. Umożliwia to uruchomienie Oracle na wielu serwerach, z których każdy ma dostęp do tych samych danych. Jednak w MariaDB możesz zezwolić na dostęp do wielu baz danych z wielu instancji, a nawet odfiltrować bazy danych/schemat, które możesz replikować do węzła MariaDB.
Odwołując się do jednego z naszych poprzednich blogów (tego i tego), ta sama zasada obowiązuje, gdy mówimy o konwersji bazy danych za pomocą dostępnych narzędzi znalezionych w Internecie.
Nie ma takiego narzędzia, które może w 100% przekonwertować bazę danych Oracle na MariaDB, chociaż MariaDB ma praktykę migracji Red Rover;jest to usługa, którą oferuje MariaDB i nie jest bezpłatna.
MariaDB mówi o migracji w Development Bank of Singapore (DBS), w wyniku współpracy z MariaDB w zakresie kompatybilności z Oracle. W ciągu zaledwie 12 miesięcy udało się przenieść ponad 50 procent aplikacji o znaczeniu krytycznym z Oracle Database do MariaDB.
Ale jeśli szukasz narzędzi, narzędzia sqlines, takie jak SQLines SQL Converter i SQLines Data Tool, oferują prosty, ale działający zestaw narzędzi.
Poniższe sekcje poniżej dokładniej opisują rzeczy, o których musisz wiedzieć, jeśli chodzi o migrację i weryfikację logicznego wyniku SQL.
Mapowanie typu danych
MySQL i MariaDB współdzielą te same dostępne typy danych. Chociaż istnieją różne sposoby implementacji, możesz sprawdzić listę typów danych w MariaDB tutaj.
Podczas gdy MySQL używa typu danych JSON, MariaDB różni się tym, że jest tylko aliasem typu danych LONGTEXT. MariaDB ma również funkcję JSON_VALID, której można używać w wyrażeniu ograniczającym CHECK.
W związku z tym skorzystam z poniższej tabelarycznej prezentacji w oparciu o zawarte tutaj informacje, ponieważ typy danych z MySQL względem MariaDB nie różnią się tak bardzo, ale dodałem zmiany, ponieważ typ danych ROW został wprowadzony w MariaDB 10.3. 0 jako część funkcji kompatybilności PL/SQL.
Sprawdź poniższą tabelę:
Oracle | 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) Dlatego w celu zapewnienia zgodności z PL/SQL można użyć ROW ( | |
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:
Oracle | MySQL |
---|---|
Semantyka rozmiaru kolumny BYTE i CHAR | Rozmiar jest zawsze w znakach |
Transakcje
MariaDB używa XtraDB z poprzednich wersji do 10.1 i przeniesiono je do InnoDB od wersji 10.2; chociaż różne silniki pamięci masowej mogą być alternatywnym wyborem do obsługi transakcji, takich jak silnik pamięci masowej MyRocks.
Domyślnie MariaDB ma zmienną autocommit ustawioną na ON, co oznacza, że musisz jawnie obsługiwać instrukcje transakcyjne, aby wykorzystać ROLLBACK do 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 przez cały czas jawnie zatwierdzać swoje oświadczenia, które wymagają zmian w danych.
Podwójny stół
MariaDB posiada podwójną kompatybilność z Oracle, co ma na celu zapewnienie kompatybilności baz danych przy użyciu fikcyjnej tabeli, czyli DUAL. Działa tak samo jak MySQL, gdzie klauzula FROM nie jest obowiązkowa, więc tabela DUAL nie jest konieczna. Jednak tabela DUAL nie działa dokładnie w taki sam sposób, jak w przypadku Oracle, ale w przypadku prostych poleceń SELECT w MariaDB jest to w porządku.
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 MariaDB.
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.
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 MariaDB:
MariaDB [test]> DESC DUAL;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DUAL' at line 1
MariaDB [test]> SELECT CURRENT_TIMESTAMP FROM DUAL;
+---------------------+
| CURRENT_TIMESTAMP |
+---------------------+
| 2019-02-27 04:11:01 |
+---------------------+
1 row in set (0.000 sec)
Uwaga:DESC DUAL składnia nie działa w MariaDB, 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 MariaDB.
MariaDB zwraca datę i godzinę i jest to funkcja, która wymaga () (zamknij i otwórz nawias bez wymaganych argumentów. Aby to zademonstrować poniżej, oto Oracle i MariaDB na temat korzystania z 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 MariaDB możesz nie potrzebować go, 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 MariaDB:
MariaDB [test]> SELECT SYSDATE() FROM DUAL;
+---------------------+
| SYSDATE() |
+---------------------+
| 2019-02-27 04:11:57 |
+---------------------+
1 row in set (0.000 sec)
Jeśli chcesz sformatować datę, MariaDB ma funkcję DATE_FORMAT().
Więcej informacji można znaleźć w dokumentacji bazy danych MariaDB dotyczącej daty i godziny.
TO_DATE
Odpowiednikiem Oracle TO_DATE w MariaDB jest funkcja STR_TO_DATE().
Jest prawie identyczny z tym w Oracle:zwraca typ danych DATE, podczas gdy w MariaDB zwraca typ danych DATETIME.
Wyrocznia:
SQL> SELECT TO_DATE ('20190218121212','yyyymmddhh24miss') as "NOW" FROM DUAL;
NOW
-------------------------
18-FEB-19
MariaDB:
MariaDB [test]> 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.000 sec)
SYNONIM
MariaDB nie ma jeszcze równoważnej funkcjonalności. Obecnie, w oparciu o ich zgłoszenie Jira MDEV-16482 , ta prośba o dodanie funkcji SYNONYM jest nadal otwarta i nie ma jeszcze oznak postępu na ten moment. Mamy nadzieję, że zostanie to uwzględnione w przyszłej wersji. Jednak możliwą alternatywą może być użycie funkcji VIEW.
Chociaż SYNONYM w Oracle może być używany do tworzenia aliasów zdalnej tabeli,
np.
CREATE PUBLIC SYNONYM emp_table FOR [email protected]
W MariaDB możesz skorzystać z silnika pamięci masowej CONNECT, który jest bardziej wydajny niż silnik pamięci masowej FederatedX, ponieważ umożliwia łączenie różnych źródeł baz danych. Możesz obejrzeć tę krótką prezentację wideo.
Jest dobry przykład na stronie podręcznika MariaDB, którego nie będę tutaj powtarzał, ponieważ istnieją pewne kwestie, które musisz wziąć pod uwagę, zwłaszcza podczas korzystania z ODBC. Proszę zapoznać się z instrukcją.
Zachowanie pustego ciągu i NULL
Zwróć uwagę, że w MariaDB pusty ciąg nie ma wartości 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 MariaDB:
MariaDB [test]> SELECT CASE WHEN '' IS NULL THEN 'Yes' ELSE 'No' END AS "Null Eval" FROM dual;
+-----------+
| Null Eval |
+-----------+
| No |
+-----------+
1 row in set (0.001 sec)
Sekwencje
Od wersji MariaDB 10.3 wprowadzono sekwencje kompatybilne z Oracle oraz język procedur składowanych zgodny z Oracle PL/SQL. W MariaDB tworzenie sekwencji jest bardzo podobne do SEKWENCJI Oracle.
Przykład MariaDB:
CREATE SEQUENCE s START WITH 100 INCREMENT BY 10;
CREATE SEQUENCE s2 START WITH -100 INCREMENT BY -10;
a określenie wykonalnych wartości minimalnych i maksymalnych wygląda następująco
CREATE SEQUENCE s3 START WITH -100 INCREMENT BY 10 MINVALUE=-100 MAXVALUE=1000;
Funkcje ciągu znaków
MariaDB, podobnie jak MySQL, ma również kilka funkcji łańcuchowych, co jest zbyt długie, aby omawiać je tutaj pojedynczo. Dlatego możesz sprawdzić dokumentację stąd i porównać to z funkcjami ciągów Oracle.
Oświadczenia DML
Instrukcje Insert/Update/Delete z Oracle są zgodne w MariaDB.
Oracle WSTAW WSZYSTKO/WSTAW PIERWSZY nie jest obsługiwany w MariaDB i nikt jeszcze nie otworzył tej prośby o funkcję w swoim Jira (o której wiem).
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.
Ale w MariaDB musisz uruchamiać wstawianie pojedynczo:
MariaDB [test]> INSERT INTO CUSTOMERS (customer_id, customer_name, city) VALUES (1000, 'Jase Alagaban', 'Davao City');
Query OK, 1 row affected (0.02 sec)
MariaDB [test]> 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; obecnie nie ma równoważnej opcji w MariaDB.
Dlatego Twoim alternatywnym rozwiązaniem jest użycie procedur.
Symbol złączy zewnętrznych „+”
Obecnie, ze względu na kompatybilność, nie jest jeszcze obecny w MariaDB. W związku z tym w MariaDB znalazłem wiele biletów Jira, ale ten jest znacznie bardziej precyzyjny pod względem żądania funkcji. Dlatego alternatywnym wyborem na ten czas jest użycie składni JOIN. Sprawdź dokumentację, aby uzyskać więcej informacji na ten temat.
ROZPOCZNIJ OD...POŁĄCZ PRZEZ
Oracle używa opcji ROZPOCZNIJ OD...POŁĄCZ PRZEZ dla zapytań hierarchicznych.
Począwszy od MariaDB 10.2, wprowadzili CTE (Common Table Expression), które jest przeznaczone do obsługi generowania hierarchicznych wyników danych, które wykorzystują modele, takie jak listy sąsiedztwa lub modele zestawów zagnieżdżonych.
Podobnie jak PostgreSQL i MySQL, MariaDB używa nierekurencyjnych i rekurencyjnych CTE.
Na przykład prosty nierekurencyjny, który służy do porównywania osób z ich grupą:
WITH sales_product_year AS (
SELECT product,
YEAR(ship_date) AS year,
SUM(price) AS total_amt
FROM item_sales
GROUP BY product, year
)
SELECT *
FROM sales_product_year S1
WHERE
total_amt >
(SELECT 0.1 * SUM(total_amt)
FROM sales_product_year S2
WHERE S2.year = S1.year)
podczas rekursywnego CTE (przykład:zwróć miejsca docelowe autobusów z Nowym Jorkiem jako punktem początkowym)
WITH RECURSIVE bus_dst as (
SELECT origin as dst FROM bus_routes WHERE origin='New York'
UNION
SELECT bus_routes.dst FROM bus_routes, bus_dst WHERE bus_dst.dst= bus_routes.origin
)
SELECT * FROM bus_dst;
PL/SQL w MariaDB?
Wcześniej, w naszym blogu „Migracja z bazy danych Oracle do MariaDB — co należy wiedzieć”, pokazaliśmy, jak potężne jest teraz w MariaDB, dodając jej zgodność do przyjęcia PL/SQL jako części jądra bazy danych. Zawsze, gdy używasz zgodności z PL/SQL w MariaDB, upewnij się, że ustawiłeś SQL_MODE ='Oracle' tak jak poniżej:
SET SQL_MODE='ORACLE';
Nowy tryb zgodności pomaga w następującej składni:
- Składnia pętli
- Deklaracja zmiennej
- Konstrukcja procedury przechowywanej bez ANSI
- Składnia kursora
- Parametry procedury przechowywanej
- Dziedziczenie typu danych (%TYPE, %ROWTYPE)
- Wyjątki stylu PL/SQL
- Synonimy podstawowych typów SQL (VARCHAR2, NUMBER, …)
Na przykład w Oracle można utworzyć pakiet, który jest obiektem schematu grupującym logicznie powiązane typy, zmienne i podprogramy PL/SQL. Dlatego w MariaDB możesz to zrobić tak, jak poniżej:
MariaDB [test]> CREATE OR REPLACE PACKAGE BODY hello AS
->
-> vString VARCHAR2(255) := NULL;
->
-> -- was declared public in PACKAGE
-> PROCEDURE helloFromS9s(pString VARCHAR2) AS
-> BEGIN
-> SELECT 'Severalnines showing MariaDB Package Procedure in ' || pString || '!' INTO vString FROM dual;
-> SELECT vString;
-> END;
->
-> BEGIN
-> SELECT 'called only once per connection!';
-> END hello;
-> /
Query OK, 0 rows affected (0.021 sec)
MariaDB [test]>
MariaDB [test]> DECLARE
-> vString VARCHAR2(255) := NULL;
-> -- CONSTANT seems to be not supported yet by MariaDB
-> -- cString CONSTANT VARCHAR2(255) := 'anonymous block';
-> cString VARCHAR2(255) := 'anonymous block';
-> BEGIN
-> CALL hello.helloFromS9s(cString);
-> END;
-> /
+----------------------------------+
| called only once per connection! |
+----------------------------------+
| called only once per connection! |
+----------------------------------+
1 row in set (0.000 sec)
+--------------------------------------------------------------------+
| vString |
+--------------------------------------------------------------------+
| Severalnines showing MariaDB Package Procedure in anonymous block! |
+--------------------------------------------------------------------+
1 row in set (0.000 sec)
Query OK, 1 row affected (0.000 sec)
MariaDB [test]>
MariaDB [test]> DELIMITER ;
Jednak PL/SQL Oracle jest kompilowany przed wykonaniem, gdy jest ładowany na serwer. Chociaż MariaDB nie mówi tego w swoim podręczniku, zakładam, że podejście jest takie samo jak MySQL, gdzie jest kompilowany i przechowywany w pamięci podręcznej, gdy jest wywoływany.
Narzędzia migracji
Jak mój kolega Bart wskazał w naszym poprzednim blogu, narzędzia sqlines, które są SQLines SQL Converter i SQLines Data Tool, mogą również zapewnić pomoc w ramach migracji.
MariaDB ma swoją usługę Red Rover Migration Practice, z której możesz skorzystać.
Ogólnie rzecz biorąc, migracja Oracle do MariaDB nie jest tak łatwa jak migracja do MySQL/Percona, co może stanowić więcej wyzwań niż MariaDB; zwłaszcza w MySQL nie ma kompatybilności z PL/SQL.
W każdym razie, jeśli znajdziesz lub znasz jakiekolwiek narzędzia, które uznasz za pomocne i przydatne do migracji z Oracle do MariaDB, zostaw komentarz na tym blogu!
Testowanie
Tak samo jak to, co napisałem na tym blogu, pozwól mi powtórzyć niektóre z nich tutaj.
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 (zamiennik 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.
Narzędzia Percona mogą być nadal przydatne i mogą być włączone do DBA lub zadań inżynierskich, nawet z MariaDB. 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, podczas testowania serwera MariaDB należy pamiętać o następujących wytycznych:
- Po instalacji należy rozważyć dostrojenie. Sprawdź nasze webinarium na temat dostrajania serwera MariaDB.
- 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 klastra MariaDB. Sprawdź ten poprzedni blog, w którym pokazujemy, jak ClusterControl może pomóc w zarządzaniu MariaDB TX 3.0. Możesz użyć ClusterControl tutaj, aby monitorować swoje zapytania i jego plan zapytań, aby upewnić się, że są wydajne.