MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

Migracja z bazy danych Oracle do MariaDB — szczegółowe informacje

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; ; POTWIERDZAJ; składnia.

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.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 3 sposoby na uzyskanie nazwy miesiąca z daty w MariaDB

  2. Uruchamianie Vitess i MySQL z ClusterControl

  3. Popularne obrazy Docker dla serwerów MySQL i MariaDB

  4. MariaDB JSON_MERGE_PATCH() Objaśnienie

  5. Jak WEEKDAY() działa w MariaDB