В предишни блогове обсъдихме темата Как да мигрираме от Oracle към MySQL / Percona Server и последното мигриране от Oracle Database към MariaDB – какво трябва да знаете.
През годините и с пускането на нови версии на MySQL и MariaDB и двата проекта се отклониха изцяло в две много различни RDBMS платформи.
MariaDB и MySQL вече се различават значително един от друг, особено с пристигането на най-новите им версии:MySQL 8.0 и MariaDB 10.3 GA и неговия 10.4 (в момента кандидат за RC).
С пускането на MariaDB TX 3.0, MariaDB изненада мнозина, тъй като вече не е заместител на MySQL. Той въвежда ново ниво на съвместимост с базата данни Oracle и сега се превръща в реална алтернатива на Oracle, както и на други корпоративни и собствени бази данни като IBM DB2 или EnterpriseDB.
Започвайки с MariaDB версия 10.3, бяха въведени значителни функции като таблици с версии на системата и това, което е най-привлекателно за Oracle DBA, поддръжка на PL/SQL!
Според уебсайта на MariaDB, приблизително 80% от наследения Oracle PL/SQL могат да бъдат мигрирани без пренаписване на кода. MariaDB също има ColumnStore, който е техният нов аналитичен механизъм и колонна машина за съхранение, предназначена за разпределена, масово паралелна обработка (MPP), като например за анализ на големи данни.
Екипът на MariaDB работи усилено за добавената поддръжка за PL/SQL. Той добавя допълнителна лекота при мигриране към MariaDB от Oracle. Като отправна точка за планираната ви миграция можете да проверите следната справка от MariaDB. Според предишния ни блог, това няма да обхване цялостния процес на миграция, тъй като това е дълъг процес. Но се надяваме, че ще предостави достатъчно основна информация, която да служи като ръководство за вашия процес на миграция.
Стратегия за планиране и развитие
За DBA, мигрирането от база данни на Oracle към MariaDB, такава миграция означава много подобни фактори, които не би трябвало да са твърде трудни за преминаване и адаптиране. MariaDB може да работи в сървър на Windows и има достъпни двоични файлове за платформата на Windows за изтегляне. Ако използвате Oracle за OLAP (онлайн аналитична обработка) или бизнес разузнаване, MariaDB има и ColumnStore, който е еквивалент на хранилището за колони в паметта на базата данни на Oracle.
Ако сте свикнали да имате архитектура на Oracle с MAA (максимално налична архитектура) с Data Guard ++ Oracle RAC (реален клъстер от приложения), същото като MySQL/Percona Server, в MariaDB, можете да избирате от синхронна репликация, полу- синхронизиране или асинхронна репликация.
За високодостъпно решение, MariaDB има Maxscale като основна опция, която можете да използвате. Можете да смесвате MaxScale с Keepalived и HAProxy. ClusterControl например може да управлява това ефективно и дори с новото пристигане на продукта на MariaDB, MariaDB TX. Вижте предишния ни блог, за да научите повече за това как ClusterControl може ефективно да управлява това.
Тъй като MariaDB е технология с отворен код, този въпрос трябва да бъде разгледан:„Как получаваме поддръжка?“
Трябва да сте сигурни, когато избирате опция за поддръжка, че тя не е ограничена до базата данни, но трябва да покрива опит в мащабируемостта, резервирането, устойчивостта, архивирането, високата наличност, сигурността, наблюдението/наблюдаемостта, възстановяването и ангажирането с критични за мисия системи . Като цяло, избраното от вас предложение за поддръжка трябва да идва с разбиране на вашата архитектурна настройка, без да излагате поверителността на вашите данни.
Освен това, MariaDB има много голяма и съвместна общност по целия свят. Ако имате проблеми и искате да попитате хората, участващи в тази общност, можете да опитате във Freenode чрез IRC клиент (Internet Relay Chat), да отидете на страницата им на общността или да се присъедините към техния пощенски списък.
Оценка или предварителна проверка
Трябва да се има предвид архивирането на вашите данни, включително конфигурации или файлове за настройка, настройки на ядрото, скриптове за автоматизация:това е очевидна задача, но преди да мигрирате, винаги първо обезопасете всичко, особено когато преминавате към друга платформа.
Трябва също да прецените дали вашите приложения следват актуални конвенции за софтуерно инженерство и да се уверите, че са независими от платформата. Тези практики могат да бъдат от ваша полза, особено при преминаване към друга платформа за база данни.
Тъй като MariaDB е технология с отворен код, уверете се, че знаете какви са наличните конектори, които са налични в MariaDB. Това е доста просто в момента, тъй като има различни налични клиентски библиотеки. Вижте тук за списък с тези клиентски библиотеки. Освен това, можете да проверите и този списък с наличните страници с клиенти и помощни програми.
И накрая, уверете се, че вашите хардуерни изисквания.
MariaDB няма специфични изисквания:типичен сървър за стоки може да работи, но това зависи от това колко производителност ви е необходима. Въпреки това, ако сте ангажирани с ColumnStore за вашите аналитични приложения или приложения за съхранение на данни, вижте тяхната документация. Взети от тяхната страница, за AWS, те са тествали това като цяло, използвайки типове инстанции m4.4xlarge като рентабилна средна позиция. R4.8xlarge също е тестван и работи около два пъти по-бързо на около два пъти по-висока цена.
Какво трябва да знаете
Също като MySQL, в MariaDB можете да създавате множество бази данни, докато Oracle не се предлага със същата функционалност.
В MariaDB схемата е синоним на база данни. Можете да замените ключовата дума SCHEMA вместо DATABASE в синтаксиса на MariaDB SQL. Например с помощта на СЪЗДАВАНЕ НА СХЕМА вместо СЪЗДАВАНЕ НА БАЗА ДАННИ; докато Oracle има разграничение за това. Схемата представлява само част от база данни:таблиците и други обекти, притежавани от един потребител. Обикновено има връзка едно към едно между екземпляра и базата данни.
Например, в еквивалентна настройка на репликация в Oracle (например реални клъстери от приложения или RAC), имате множество екземпляри, които имат достъп до една база данни. Това ви позволява да стартирате Oracle на множество сървъри, като всички имат достъп до едни и същи данни. Въпреки това, в MariaDB можете да разрешите достъп до множество бази данни от множеството си екземпляри и дори да филтрирате кои бази данни/схема можете да репликирате в възел на MariaDB.
Позовавайки се на един от предишните ни блогове (този и този), същият принцип важи, когато говорим за конвертиране на вашата база данни с налични инструменти, намерени в интернет.
Няма такъв инструмент, който да може 100% да конвертира базата данни на Oracle в MariaDB, въпреки че MariaDB има практика за миграция на Red Rover; това е услуга, която MariaDB предлага и не е безплатна.
MariaDB говори за миграцията в Банката за развитие на Сингапур (DBS), в резултат на сътрудничеството си с MariaDB относно съвместимостта с Oracle. Той успя да мигрира повече от 50 процента от своите критични приложения само за 12 месеца от Oracle Database към MariaDB.
Но ако търсите някои инструменти, инструментите sqlines, които са SQLines SQL Converter и SQLines Data Tool, предлагат прост, но оперативен набор от инструменти.
Следващите раздели по-долу очертават допълнително нещата, които трябва да сте наясно, когато става въпрос за миграция и проверка на логическия SQL резултат.
Съпоставяне на типове данни
MySQL и MariaDB споделят едни и същи налични типове данни. Въпреки че има вариации относно начина, по който се прилага, можете да проверите за списъка с типове данни в MariaDB тук.
Докато MySQL използва типа данни JSON, MariaDB се различава, тъй като е просто псевдоним на тип данни LONGTEXT. MariaDB също има функция JSON_VALID, която може да се използва в рамките на израза за ограничение CHECK.
Следователно ще използвам тази таблична презентация по-долу въз основа на информацията тук, тъй като типовете данни от MySQL срещу MariaDB не се отклоняват толкова много, но добавих промени, тъй като типът данни ROW беше въведен в MariaDB 10.3. 0 като част от функцията за съвместимост с PL/SQL.
Вижте таблицата по-долу:
Oracle | MySQL | |||
---|---|---|---|---|
1 | BFILE | Указател към двоичен файл, ⇐ 4G | VARCHAR(255) | |
2 | BINARY_FLOAT | 32-битово число с плаваща запетая | ПЛАВАНЕ | |
3 | BINARY_DOUBLE | 64-битово число с плаваща запетая | ДВОЙНО | |
4 | BLOB | Бинарен голям обект, ⇐ 4G | LONGBLOB | |
5 | CHAR(n), CHARACTER(n) | Низ с фиксирана дължина, 1 ⇐ n ⇐ 255 | CHAR(n), CHARACTER(n) | |
6 | CHAR(n), CHARACTER(n) | Низ с фиксирана дължина, 256 ⇐ n ⇐ 2000 | VARCHAR(n) | |
7 | CLOB | Символен голям обект, ⇐ 4G | ДЪЛЪГ ТЕКСТ | |
8 | ДАТА | Дата и час | DATETIME | |
9 | DECIMAL(p,s), DEC(p,s) | Номер с фиксирана точка | DECIMAL(p,s), DEC(p,s) | |
10 | ДВОЙНА ТОЧНОСТ | Число с плаваща запетая | ДВОЙНА ТОЧНОСТ | |
11 | FLOAT(p) | Число с плаваща запетая | ДВОЙНО | |
12 | ЦЯЛО ЧИСЛО, INT | 38-цифрено цяло число | INT | DECIMAL(38) |
13 | ИНТЕРВАЛ ГОДИНА(p) ДО МЕСЕЦ | Интервал от дата | VARCHAR(30) | |
14 | ИНТЕРВАЛ ДЕН(p) ДО СЕКУНД(и) | Ден и времеви интервал | VARCHAR(30) | |
15 | ДЪЛГО | Данни за знаци, ⇐ 2G | ДЪЛЪГ ТЕКСТ | |
16 | LONG RAW | Двоични данни, ⇐ 2G | LONGBLOB | |
17 | NCHAR(n) | Низ UTF-8 с фиксирана дължина, 1 ⇐ n ⇐ 255 | NCHAR(n) | |
18 | NCHAR(n) | Низ UTF-8 с фиксирана дължина, 256 ⇐ n ⇐ 2000 | NVARCHAR(n) | |
19 | NCHAR VARYING(n) | Утф-8 низ с различна дължина, 1 ⇐ n ⇐ 4000 | NCHAR VARYING(n) | |
20 | NCLOB | Unicode низ с променлива дължина, ⇐ 4G | NVARCHAR(макс.) | |
21 | NUMBER(p,0), NUMBER(p) | 8-битово цяло число, 1 <=p <3 | TINYINT | (0 до 255) |
16-битово цяло число, 3 <=p <5 | SMALLINT | |||
32-битово цяло число, 5 <=p <9 | INT | |||
64-битово цяло число, 9 <=p <19 | ГОЛЯМ | |||
Число с фиксирана точка, 19 <=p <=38 | DECIMAL(p) | |||
22 | NUMBER(p,s) | Число с фиксирана точка, s> 0 | DECIMAL(p,s) | |
23 | NUMBER, NUMBER(*) | Число с плаваща запетая | ДВОЙНО | |
24 | NUMERIC(p,s) | Номер с фиксирана точка | ЧИСЛО(p,s) | |
25 | NVARCHAR2(n) | UTF-8 низ с променлива дължина, 1 ⇐ n ⇐ 4000 | NVARCHAR(n) | |
26 | RAW(n) | Двоичен низ с променлива дължина, 1 ⇐ n ⇐ 255 | БИНАРЕН(n) | |
27 | RAW(n) | Двоичен низ с променлива дължина, 256 ⇐ n ⇐ 2000 | VARBINARY(n) | |
28 | ИСТИНСКИ | Число с плаваща запетая | ДВОЙНО | |
29 | ROWID | Физически адрес на ред | CHAR(10) Следователно, за PL/SQL съвместимост, можете да използвате ROW (<име на поле> <тип данни> [{, <име на поле> <тип данни>}. .. ]) | |
30 | SMALLINT | 38-цифрено цяло число | DECIMAL(38) | |
31 | TIMESTAMP(p) | Дата и час с дроб | DATETIME(p) | |
32 | TIMESTAMP(p) С ЧАСОВА ЗОНА | Дата и час с дроб и часова зона | DATETIME(p) | |
33 | UROWID(n) | Логически адреси на редове, 1 ⇐ n ⇐ 4000 | VARCHAR(n) | |
34 | VARCHAR(n) | Низ с променлива дължина, 1 ⇐ n ⇐ 4000 | VARCHAR(n) | |
35 | VARCHAR2(n) | Низ с променлива дължина, 1 ⇐ n ⇐ 4000 | VARCHAR(n) | |
36 | XMLTYPE | XML данни | ДЪЛЪГ ТЕКСТ |
Атрибути и опции за тип данни:
Oracle | MySQL |
---|---|
Семантика на размера на колоните BYTE и CHAR | Размерът винаги е в знаци |
Транзакции
MariaDB използва XtraDB от предишни версии до 10.1 и преминава към InnoDB от версия 10.2 нататък; въпреки че различни механизми за съхранение могат да бъдат алтернативен избор за обработка на транзакции, като например механизма за съхранение на MyRocks.
По подразбиране MariaDB има променливата autocommit, зададена на ON, което означава, че трябва изрично да обработвате транзакционни оператори, за да се възползвате от ROLLBACK за игнориране на промените или използване на SAVEPOINT.
По същество това е същата концепция, която Oracle използва по отношение на commit, rollback и savepoints.
За изрични транзакции това означава, че трябва да използвате START TRANSACTION/BEGIN;
В противен случай, ако трябва да деактивирате автоматичното записване, трябва изрично да COMMIT през цялото време за вашите изявления, които изискват промени във вашите данни.
Двойна маса
MariaDB има двойна съвместимост с Oracle, която е предназначена за съвместимост на бази данни с помощта на фиктивна таблица, а именно DUAL. Той работи точно както MySQL, където клаузата FROM не е задължителна, така че таблицата DUAL не е необходима. Въпреки това таблицата DUAL не работи точно по същия начин, както за Oracle, но за прости SELECT в MariaDB това е добре.
Това отговаря на използването на DUAL от Oracle, така че всички съществуващи изрази във вашето приложение, които използват DUAL, може да не изискват промени при миграция към MariaDB.
Клаузата FROM на Oracle е задължителна за всеки оператор SELECT, така че базата данни на Oracle използва DUAL таблица за оператор SELECT, където не се изисква име на таблица.
Вижте следния пример по-долу:
В 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
Но в 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)
Забележка:DESC DUAL синтаксисът не работи в MariaDB и резултатите също се различават, тъй като CURRENT_TIMESTAMP (използва тип данни TIMESTAMP) в MySQL не включва часовата зона.
SYSDATE
Функцията SYSDATE на Oracle е почти същата в MariaDB.
MariaDB връща дата и час и това е функция, която изисква () (затваряне и отваряне на скоби без необходими аргументи. За да демонстрирате това по-долу, ето Oracle и MariaDB за използването на SYSDATE.
В Oracle използването на обикновен SYSDATE просто връща датата на деня без часа. Но за да получите часа и датата, използвайте TO_CHAR, за да преобразувате датата и часа в желания формат; докато в MariaDB може да не ви трябва, за да получите датата и часа, тъй като връща и двете.
Вижте примера по-долу.
В 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
Но в MariaDB:
MariaDB [test]> SELECT SYSDATE() FROM DUAL;
+---------------------+
| SYSDATE() |
+---------------------+
| 2019-02-27 04:11:57 |
+---------------------+
1 row in set (0.000 sec)
Ако искате да форматирате датата, MariaDB има функция DATE_FORMAT().
Можете да проверите документацията за дата и час на MariaDB за повече информация.
ДО_ДАТА
Еквивалентът на Oracle TO_DATE в MariaDB е функцията STR_TO_DATE().
Той е почти идентичен с този в Oracle:връща типа данни DATE, докато в MariaDB връща типа данни DATETIME.
Оракул:
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)
СИНОНИМ
MariaDB все още няма еквивалентна функционалност на тази. Понастоящем, въз основа на техния билет за Jira MDEV-16482 , тази заявка за добавяне на SYNONYM все още е отворена и няма признаци за напредък към този момент. Надяваме се, че това ще бъде включено в бъдещата версия. Възможна алтернатива обаче може да бъде използването на VIEW.
Въпреки че SYNONYM в Oracle може да се използва за създаване на псевдоним на отдалечена таблица,
напр.
CREATE PUBLIC SYNONYM emp_table FOR [email protected]
В MariaDB можете да се възползвате от използването на двигателя за съхранение CONNECT, който е по-мощен от механизма за съхранение на FederatedX, тъй като ви позволява да свързвате различни източници на база данни. Можете да разгледате тази кратка видео презентация.
Има добър пример в страницата с ръководството на MariaDB, който няма да повтарям тук, тъй като има определени съображения, които трябва да спазвате, особено когато използвате ODBC. Моля, вижте ръководството.
Поведение на празен низ и NULL
Обърнете внимание, че в MariaDB празният низ не е NULL, докато Oracle третира празния низ като нулеви стойности.
В Oracle:
SQL> SELECT CASE WHEN '' IS NULL THEN 'Yes' ELSE 'No' END AS "Null Eval" FROM dual;
Nul
---
Yes
В 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)
Последователности
След MariaDB 10.3 бяха въведени съвместими с Oracle последователности и език за съхранявани процедури, съвместим с Oracle PL/SQL. В MariaDB създаването на последователност е доста подобно на SEQUENCE на Oracle.
Пример на MariaDB:
CREATE SEQUENCE s START WITH 100 INCREMENT BY 10;
CREATE SEQUENCE s2 START WITH -100 INCREMENT BY -10;
и уточняването на работещи минимални и максимални стойности показва както следва
CREATE SEQUENCE s3 START WITH -100 INCREMENT BY 10 MINVALUE=-100 MAXVALUE=1000;
Функции за символен низ
MariaDB, както и MySQL, също има шепа функции за низове, които са твърде дълги, за да ги обсъждаме тук един по един. Следователно можете да проверите документацията от тук и да я сравните с низовите функции на Oracle.
DML изявления
Инструкциите за вмъкване/актуализиране/изтриване от Oracle са съвместими в MariaDB.
ВМЕСЕТЕ ВСИЧКО/ПЪРВО ВМЕСЕТЕ на Oracle не се поддържа в MariaDB и никой все още не е отворил тази заявка за функция в своята Jira (за която знам).
В противен случай ще трябва да посочите своите MySQL заявки една по една.
напр.
В 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.
Но в MariaDB трябва да стартирате вмъкването едно по едно:
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)
INSERT ALL/INSERT FIRST не се сравнява с начина, по който се използва в Oracle, където можете да се възползвате от условията, като добавите ключова дума WHEN във вашия синтаксис; няма еквивалентна опция от този момент в MariaDB.
Следователно вашето алтернативно решение за това е да използвате процедури.
Символ „+“ за външни връзки
В момента, за съвместимост, той все още не присъства в MariaDB. Следователно има много билети за Jira, които намерих в MariaDB, но този е много по-точен по отношение на заявката за функции. Следователно вашият алтернативен избор за този момент е да използвате синтаксис JOIN. Моля, проверете документацията за повече информация относно това.
ЗАПОЧНЕТЕ С..СВЪРЗВАНЕ ОТ
Oracle използва ЗАПОЧНЕТЕ С..СВЪРЗВАНЕ ОТ за йерархични заявки.
Стартирайки MariaDB 10.2, те въведоха CTE (Common Table Expression), който е проектиран да поддържа поколения от йерархични резултати от данни, които използват модели като списъци на съседство или модели на вложени набори.
Подобно на PostgreSQL и MySQL, MariaDB използва нерекурсивни и рекурсивни CTE.
Например обикновен нерекурсивен, който се използва за сравняване на индивиди с тяхната група:
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)
докато рекурсивна CTE (пример:върнете дестинациите на автобуса с Ню Йорк като начало)
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 в MariaDB?
По-рано, в нашия блог за „Мигриране от Oracle Database към MariaDB – какво трябва да знаете“, ние показахме колко мощен е сега в MariaDB, като добавихме съответствието му за приемане на PL/SQL като част от ядрото на базата данни. Всеки път, когато използвате PL/SQL съвместимост в MariaDB, уверете се, че сте задали SQL_MODE ='Oracle' точно както следва:
SET SQL_MODE='ORACLE';
Новият режим на съвместимост помага със следния синтаксис:
- Синтаксис на цикъла
- Декларация на променлива
- Конструкция на съхранена процедура, която не отговаря на ANSI
- Синтаксис на курсора
- Параметри на съхранената процедура
- Наследяване на тип данни (%TYPE, %ROWTYPE)
- Изключения за стил PL/SQL
- Синоними за основни типове SQL (VARCHAR2, NUMBER, …)
Например в Oracle можете да създадете пакет, който е обект на схема, който групира логически свързани типове PL/SQL, променливи и подпрограми. Следователно в MariaDB можете да го направите точно както по-долу:
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 ;
Въпреки това, PL/SQL на Oracle се компилира преди изпълнение, когато се зареди в сървъра. Въпреки че MariaDB не казва това в тяхното ръководство, бих предположил, че подходът е същият като MySQL, където се компилира и съхранява в кеша, когато е извикан.
Инструменти за мигриране
Както моят колега Барт посочи в предишния ни блог тук, инструментите sqlines, които са SQLines SQL Converter и SQLines Data Tool, също могат да осигурят помощ като част от вашата миграция.
MariaDB разполага с услугата Red Rover Migration Practice, от която можете да се възползвате.
Като цяло, миграцията на Oracle към MariaDB не е толкова лесна, колкото при мигрирането към MySQL/Percona, което може да създаде повече предизвикателства от MariaDB; особено не съществува PL/SQL съвместимост в MySQL.
Както и да е, ако откриете или знаете инструменти, които намирате за полезни и полезни за мигриране от Oracle към MariaDB, моля, оставете коментар в този блог!
Тестване
Същото като това, което съм заявил в този блог, позволете ми да повторя част от него тук.
Като част от вашия план за миграция, тестването е жизненоважна задача, която играе много важна роля и влияе върху решението ви по отношение на миграцията.
Инструментът dbdeployer (замяна на MySQL Sandbox) е много полезен инструмент, от който можете да се възползвате. Това е доста лесно за вас да опитате и тествате различни подходи и ви спестява време, вместо да настройвате целия стек, ако целта ви е първо да опитате и тествате платформата RDBMS.
За тестване на вашите съхранени в SQL подпрограми (функции или процедури), тригери, събития, ви предлагам да използвате тези инструменти mytap или рамката за тестване на модули на Google.
Инструментите на Percona все още могат да бъдат полезни и могат да бъдат включени във вашите DBA или инженерни задачи дори с MariaDB. Разгледайте Percona Toolkit тук. Можете да изберете инструментите според вашите нужди, особено за задачи за тестване и производствена употреба.
Като цяло, нещата, които трябва да имате предвид като насоки, когато правите тест за вашия MariaDB сървър, са:
- След инсталирането трябва да помислите за някои настройки. Разгледайте нашия уебинар за настройка на вашия MariaDB сървър.
- Направете някои сравнителни тестове и тестване на натоварване за вашата конфигурация на текущия си възел. Проверете mysqlslap и sysbench, които могат да ви помогнат с това. Вижте също нашия блог „Как да сравните производителността на MySQL и MariaDB с помощта на SysBench“.
- Проверете вашите DDL дали са правилно дефинирани като типове данни, ограничения, клъстерирани и вторични индекси или дялове, ако имате такива.
- Проверете своя DML, особено дали синтаксисът е правилен и запазвате данните правилно, както се очаква.
- Проверете съхранените си рутинни действия, събития, тригери, за да се уверите, че изпълняват/връщат очакваните резултати.
- Проверете дали изпълняваните ви заявки са ефективни. Предлагам ви да се възползвате от инструментите с отворен код или да опитате нашия продукт ClusterControl. Той предлага наблюдение/наблюдаемост, особено на вашия MariaDB клъстер. Вижте този предишен блог, в който показваме как ClusterControl може да ви помогне да управлявате MariaDB TX 3.0. Можете да използвате ClusterControl тук, за да наблюдавате вашите заявки и неговия план за заявки, за да сте сигурни, че са ефективни.