MariaDB
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> MariaDB

Di chuyển từ Cơ sở dữ liệu Oracle sang MariaDB - Một bước tiến sâu

Trong các blog trước, chúng ta đã thảo luận về chủ đề Cách di chuyển từ Oracle sang MySQL / Percona Server và gần đây nhất là Di chuyển từ Cơ sở dữ liệu Oracle sang MariaDB - Điều bạn nên biết.

Trong những năm qua và khi các phiên bản mới của MySQL và MariaDB được phát hành, cả hai dự án đã hoàn toàn chuyển sang hai nền tảng RDBMS rất khác nhau.

MariaDB và MySQL hiện có sự khác biệt đáng kể với nhau, đặc biệt là với sự xuất hiện của các phiên bản mới nhất của chúng:MySQL 8.0 và MariaDB 10.3 GA và 10.4 (ứng cử viên RC hiện tại).

Với việc phát hành MariaDB TX 3.0, MariaDB đã khiến nhiều người ngạc nhiên vì nó không còn là bản thay thế cho MySQL nữa. Nó giới thiệu một mức độ tương thích mới với cơ sở dữ liệu Oracle và hiện đang trở thành một giải pháp thay thế thực sự cho Oracle cũng như các cơ sở dữ liệu doanh nghiệp và độc quyền khác như IBM DB2 hoặc EnterpriseDB.

Bắt đầu với MariaDB phiên bản 10.3, các tính năng quan trọng đã được giới thiệu như các bảng được tạo phiên bản hệ thống và điều hấp dẫn nhất đối với Oracle DBA, hỗ trợ cho PL / SQL!

Theo trang web MariaDB, khoảng 80% Oracle PL / SQL kế thừa có thể được di chuyển mà không cần viết lại mã. MariaDB cũng có ColumnStore, là công cụ phân tích mới của họ và là công cụ lưu trữ dạng cột được thiết kế để phân phối, xử lý song song hàng loạt (MPP), chẳng hạn như phân tích dữ liệu lớn.

Nhóm MariaDB đã làm việc chăm chỉ để hỗ trợ thêm cho PL / SQL. Nó thêm dễ dàng hơn khi di chuyển sang MariaDB từ Oracle. Là một điểm tham chiếu cho việc di chuyển theo kế hoạch của bạn, bạn có thể kiểm tra tài liệu tham khảo sau đây từ MariaDB. Theo blog trước đây của chúng tôi, điều này sẽ không bao gồm toàn bộ quá trình di chuyển, vì nó là một quá trình dài. Nhưng hy vọng nó sẽ cung cấp đủ thông tin cơ bản để làm hướng dẫn cho quá trình di chuyển của bạn.

Chiến lược lập kế hoạch và phát triển

Đối với DBA, việc di chuyển từ cơ sở dữ liệu Oracle sang MariaDB, việc di chuyển như vậy có nghĩa là rất nhiều yếu tố tương tự sẽ không quá khó để thay đổi và thích ứng. MariaDB có thể được vận hành trong máy chủ Windows và có sẵn các tệp nhị phân cho nền tảng Windows để tải xuống. Nếu bạn đang sử dụng Oracle cho OLAP (Xử lý phân tích trực tuyến) hoặc kinh doanh thông minh, MariaDB cũng có ColumnStore, tương đương với kho lưu trữ cột Cơ sở dữ liệu trong bộ nhớ của Oracle.

Nếu bạn đã quen với việc cấu trúc Oracle có MAA (Kiến trúc khả dụng tối đa) với Data Guard ++ Oracle RAC (Real Application Cluster), giống như MySQL / Percona Server, trong MariaDB, bạn có thể chọn từ một bản sao đồng bộ, bán đồng bộ hóa hoặc sao chép không đồng bộ.

Đối với một giải pháp có tính khả dụng cao, MariaDB có Maxscale là tùy chọn chính của bạn mà bạn có thể sử dụng. Bạn có thể kết hợp MaxScale với Keepalived và HAProxy. Ví dụ như ClusterControl có thể quản lý điều này một cách hiệu quả và ngay cả với sự xuất hiện mới của sản phẩm MariaDB, MariaDB TX. Xem blog trước của chúng tôi để tìm hiểu thêm về cách ClusterControl có thể quản lý điều này một cách hiệu quả.

Với MariaDB là một công nghệ mã nguồn mở, câu hỏi này được xem xét:"Làm thế nào để chúng tôi nhận được hỗ trợ?"

Bạn cần đảm bảo khi chọn một tùy chọn hỗ trợ rằng nó không giới hạn trong cơ sở dữ liệu nhưng nó phải bao hàm kiến ​​thức chuyên môn về khả năng mở rộng, dự phòng, khả năng phục hồi, sao lưu, tính sẵn sàng cao, bảo mật, giám sát / khả năng quan sát, phục hồi và tham gia vào các hệ thống quan trọng . Nhìn chung, việc cung cấp hỗ trợ mà bạn chọn cần đi kèm với sự hiểu biết về thiết lập kiến ​​trúc của bạn mà không để lộ tính bảo mật của dữ liệu của bạn.

Ngoài ra, MariaDB có một cộng đồng rất lớn và hợp tác trên toàn thế giới. Nếu bạn gặp sự cố và muốn hỏi những người có liên quan trong cộng đồng này, bạn có thể thử trên Freenode qua ứng dụng IRC (Trò chuyện chuyển tiếp Internet), truy cập trang cộng đồng của họ hoặc tham gia danh sách gửi thư của họ.

Đánh giá hoặc Kiểm tra sơ bộ

Việc sao lưu dữ liệu của bạn bao gồm cấu hình hoặc tệp thiết lập, điều chỉnh hạt nhân, tập lệnh tự động hóa cần được xem xét:đó là một nhiệm vụ hiển nhiên, nhưng trước khi di chuyển, hãy luôn bảo mật mọi thứ trước, đặc biệt là khi chuyển sang một nền tảng khác.

Bạn cũng phải đánh giá rằng các ứng dụng của mình đang tuân theo các quy ước kỹ thuật phần mềm cập nhật và đảm bảo rằng chúng không có nền tảng. Những phương pháp này có thể mang lại lợi ích cho bạn, đặc biệt là khi chuyển sang một nền tảng cơ sở dữ liệu khác.

Vì MariaDB là một công nghệ mã nguồn mở, hãy đảm bảo rằng bạn biết những trình kết nối khả dụng nào có sẵn trong MariaDB. Điều này khá dễ hiểu ngay bây giờ vì có nhiều thư viện ứng dụng khách khác nhau. Kiểm tra ở đây để biết danh sách các thư viện khách hàng này. Ngoài ra, bạn cũng có thể kiểm tra danh sách trang Khách hàng và Tiện ích có sẵn này.

Cuối cùng, hãy đảm bảo các yêu cầu phần cứng của bạn.

MariaDB không có các yêu cầu cụ thể:một máy chủ hàng hóa điển hình có thể hoạt động nhưng điều đó phụ thuộc vào mức hiệu suất bạn yêu cầu. Tuy nhiên, nếu bạn tương tác với ColumnStore cho các ứng dụng phân tích hoặc ứng dụng kho dữ liệu của mình, hãy xem tài liệu của họ. Lấy từ trang của họ, đối với AWS, họ đã kiểm tra điều này nói chung bằng cách sử dụng các loại phiên bản m4.4xlarge như một phương tiện trung gian hiệu quả về chi phí. R4.8xlarge cũng đã được thử nghiệm và hoạt động nhanh hơn gấp đôi với mức giá gấp đôi.

Những điều bạn nên biết

Tương tự như MySQL, trong MariaDB, bạn có thể tạo nhiều cơ sở dữ liệu trong khi Oracle không có cùng chức năng đó.

Trong MariaDB, một lược đồ đồng nghĩa với một cơ sở dữ liệu. Bạn có thể thay thế từ khóa SCHEMA thay vì DATABASE trong cú pháp MariaDB SQL. Ví dụ:sử dụng TẠO SCHEMA thay vì TẠO CƠ SỞ DỮ LIỆU ; trong khi Oracle có một sự khác biệt cho điều này. Một lược đồ chỉ đại diện cho một phần của cơ sở dữ liệu:các bảng và các đối tượng khác do một người dùng sở hữu. Thông thường, có một mối quan hệ 1-1 giữa phiên bản và cơ sở dữ liệu.

Ví dụ:trong một thiết lập sao chép tương đương trong Oracle (ví dụ:Cụm ứng dụng thực hoặc RAC), bạn có nhiều phiên bản của mình truy cập vào một cơ sở dữ liệu duy nhất. Điều này cho phép bạn khởi động Oracle trên nhiều máy chủ, tất cả đều truy cập vào cùng một dữ liệu. Tuy nhiên, trong MariaDB, bạn có thể cho phép truy cập vào nhiều cơ sở dữ liệu từ nhiều phiên bản của mình và thậm chí có thể lọc ra cơ sở dữ liệu / lược đồ nào bạn có thể sao chép sang nút MariaDB.

Tham khảo từ một trong những blog trước đây của chúng tôi (cái này và cái này), nguyên tắc tương tự cũng áp dụng khi nói về việc chuyển đổi cơ sở dữ liệu của bạn bằng các công cụ có sẵn trên internet.

Không có công cụ nào như vậy có thể chuyển đổi 100% cơ sở dữ liệu Oracle thành MariaDB, mặc dù MariaDB có Red Rover Migration Practice; đây là một dịch vụ mà MariaDB cung cấp và nó không miễn phí.

MariaDB nói về việc di chuyển tại Ngân hàng Phát triển Singapore (DBS), là kết quả của sự hợp tác với MariaDB về khả năng tương thích với Oracle. Nó đã có thể di chuyển hơn 50% các ứng dụng quan trọng chỉ trong 12 tháng từ Cơ sở dữ liệu Oracle sang MariaDB.

Nhưng nếu bạn đang tìm kiếm một số công cụ, thì các công cụ sqlines, đó là SQLines SQL Converter và SQLines Data Tool cung cấp một bộ công cụ đơn giản nhưng hoạt động.

Các phần tiếp theo bên dưới phác thảo thêm những điều bạn phải biết khi nói đến việc di chuyển và xác minh kết quả SQL logic.

Ánh xạ kiểu dữ liệu

MySQL và MariaDB chia sẻ các kiểu dữ liệu giống nhau có sẵn. Mặc dù có các biến thể về cách nó được triển khai, bạn có thể kiểm tra danh sách các kiểu dữ liệu trong MariaDB tại đây.

Trong khi MySQL sử dụng kiểu dữ liệu JSON, MariaDB khác vì nó chỉ là một bí danh của kiểu dữ liệu LONGTEXT. MariaDB cũng có một hàm, JSON_VALID, có thể được sử dụng trong biểu thức ràng buộc CHECK.

Do đó, tôi sẽ sử dụng bản trình bày dạng bảng này dựa trên thông tin ở đây, vì kiểu dữ liệu từ MySQL so với MariaDB không sai lệch quá nhiều, nhưng tôi đã thêm các thay đổi vì kiểu dữ liệu ROW đã được giới thiệu trong MariaDB 10.3. 0 như một phần của tính năng tương thích PL / SQL.

Kiểm tra bảng dưới đây:

Oracle MySQL
1 NỀN Con trỏ tới tệp nhị phân, ⇐ 4G VARCHAR (255)
2 BINARY_FLOAT Số dấu phẩy động 32 bit NỔI
3 BINARY_DOUBLE Số dấu phẩy động 64 bit ĐÔI
4 BLOB Đối tượng lớn nhị phân, ⇐ 4G LONGBLOB
5 CHAR (n), CHARACTER (n) Chuỗi có độ dài cố định, 1 ⇐ n ⇐ 255 CHAR (n), CHARACTER (n)
6 CHAR (n), CHARACTER (n) Chuỗi có độ dài cố định, 256 ⇐ n ⇐ 2000 VARCHAR (n)
7 CLOB Đối tượng lớn có ký tự, ⇐ 4G LONGTEXT
8 NGÀY Ngày và giờ DATETIME
9 DECIMAL (p, s), DEC (p, s) Số điểm cố định DECIMAL (p, s), DEC (p, s)
10 CHÍNH XÁC ĐÔI Số dấu phẩy động CHÍNH XÁC ĐÔI
11 FLOAT (p) Số dấu phẩy động ĐÔI
12 INTEGER, INT số nguyên 38 chữ số INT DECIMAL (38)
13 INTERVAL NĂM (p) ĐẾN THÁNG Khoảng ngày VARCHAR (30)
14 NGÀY CAN THIỆP (p) ĐẾN (s) THỨ HAI Khoảng thời gian ngày và giờ VARCHAR (30)
15 DÀI Dữ liệu ký tự, ⇐ 2G LONGTEXT
16 NGUYÊN LIỆU DÀI Dữ liệu nhị phân, ⇐ 2G LONGBLOB
17 NCHAR (n) Chuỗi UTF-8 có độ dài cố định, 1 ⇐ n ⇐ 255 NCHAR (n)
18 NCHAR (n) Chuỗi UTF-8 có độ dài cố định, 256 ⇐ n ⇐ 2000 NVARCHAR (n)
19 NCHAR VARYING (n) Chuỗi UTF-8 có độ dài thay đổi, 1 ⇐ n ⇐ 4000 NCHAR VARYING (n)
20 NCLOB Chuỗi Unicode có độ dài thay đổi, ⇐ 4G NVARCHAR (tối đa)
21 NUMBER (p, 0), NUMBER (p) số nguyên 8 bit, 1 <=p <3 TINYINT (0 đến 255)
số nguyên 16 bit, 3 <=p <5 SMALLINT
số nguyên 32 bit, 5 <=p <9 INT
Số nguyên 64 bit, 9 <=p <19 LỚN
Số điểm cố định, 19 <=p <=38 QUYẾT ĐỊNH (p)
22 NUMBER (p, s) Số điểm cố định, s> 0 QUYẾT ĐỊNH (p, s)
23 NUMBER, NUMBER (*) Số dấu phẩy động ĐÔI
24 SỐ (p, s) Số điểm cố định SỐ (p, s)
25 NVARCHAR2 (n) Chuỗi UTF-8 có độ dài thay đổi, 1 ⇐ n ⇐ 4000 NVARCHAR (n)
26 RAW (n) Chuỗi nhị phân có độ dài thay đổi, 1 ⇐ n ⇐ 255 BINARY (n)
27 RAW (n) Chuỗi nhị phân có độ dài thay đổi, 256 ⇐ n ⇐ 2000 VARBINARY (n)
28 THỰC Số dấu phẩy động ĐÔI
29 ROWID Địa chỉ hàng thực CHAR (10)
Do đó, để tương thích với PL / SQL, bạn có thể sử dụng ROW ( [{, }. ..])
30 SMALLINT số nguyên 38 chữ số QUYẾT ĐỊNH (38)
31 TIMESTAMP (p) Ngày và giờ với phân số DATETIME (p)
32 TIMESTAMP (p) VỚI KHU VỰC THỜI GIAN Ngày và giờ với phân số và múi giờ DATETIME (p)
33 UROWID (n) Địa chỉ hàng logic, 1 ⇐ n ⇐ 4000 VARCHAR (n)
34 VARCHAR (n) Chuỗi có độ dài thay đổi, 1 ⇐ n ⇐ 4000 VARCHAR (n)
35 VARCHAR2 (n) Chuỗi có độ dài thay đổi, 1 ⇐ n ⇐ 4000 VARCHAR (n)
36 XMLTYPE Dữ liệu XML LONGTEXT

Các thuộc tính và tùy chọn kiểu dữ liệu:

Oracle MySQL
Ngữ nghĩa kích thước cột BYTE và CHAR Kích thước luôn tính bằng ký tự

Giao dịch

MariaDB sử dụng XtraDB từ các phiên bản trước cho đến 10.1 và chuyển sang InnoDB từ phiên bản 10.2 trở đi; mặc dù các công cụ lưu trữ khác nhau có thể là lựa chọn thay thế để xử lý các giao dịch như công cụ lưu trữ MyRocks.

Theo mặc định, MariaDB có biến tự động gửi được đặt thành BẬT, có nghĩa là bạn phải xử lý rõ ràng các câu lệnh giao dịch để tận dụng ROLLBACK vì bỏ qua các thay đổi hoặc lợi dụng việc sử dụng SAVEPOINT.

Về cơ bản, nó giống khái niệm mà Oracle sử dụng về cam kết, khôi phục và điểm lưu.

Đối với các giao dịch rõ ràng, điều này có nghĩa là bạn phải sử dụng BẮT ĐẦU GIAO DỊCH / BẮT ĐẦU; ; CAM KẾT; cú pháp.

Mặt khác, nếu bạn phải tắt tính năng tự động gửi, bạn phải CAM KẾT rõ ràng mọi lúc cho các câu lệnh yêu cầu thay đổi dữ liệu của bạn.

Bảng kép

MariaDB có khả năng tương thích kép với Oracle có nghĩa là để tương thích với cơ sở dữ liệu sử dụng bảng giả, cụ thể là DUAL. Nó hoạt động giống như MySQL trong đó mệnh đề FROM là không bắt buộc, vì vậy bảng DUAL là không cần thiết. Tuy nhiên, bảng DUAL không hoạt động chính xác theo cách giống như đối với Oracle, nhưng đối với SELECT đơn giản trong MariaDB, điều này là tốt.

Điều này phù hợp với việc sử dụng DUAL của Oracle, vì vậy bất kỳ câu lệnh hiện có nào trong ứng dụng của bạn sử dụng DUAL có thể không cần thay đổi khi chuyển sang MariaDB.

Mệnh đề Oracle FROM là bắt buộc đối với mọi câu lệnh SELECT, do đó, cơ sở dữ liệu Oracle sử dụng bảng DUAL cho câu lệnh SELECT trong đó không yêu cầu tên bảng.

Xem ví dụ sau:

Trong 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

Nhưng trong 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)

Lưu ý: MÔ TẢ KÉP cú pháp không hoạt động trong MariaDB và kết quả cũng khác với CURRENT_TIMESTAMP (sử dụng kiểu dữ liệu TIMESTAMP) trong MySQL không bao gồm múi giờ.

SYSDATE

Hàm SYSDATE của Oracle gần giống như trong MariaDB.

MariaDB trả về ngày và giờ và đó là một hàm yêu cầu () (đóng và mở ngoặc đơn mà không cần đối số. Để chứng minh điều này bên dưới, đây là Oracle và MariaDB về cách sử dụng SYSDATE.

Trong Oracle, sử dụng SYSDATE thuần túy chỉ trả về ngày trong ngày mà không có thời gian. Nhưng để lấy ngày giờ, hãy sử dụng TO_CHAR để chuyển đổi ngày giờ sang định dạng mong muốn; trong khi trong MariaDB, bạn có thể không cần nó để lấy ngày và giờ vì nó trả về cả hai.

Xem ví dụ bên dưới.

Trong 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

Nhưng trong MariaDB:

MariaDB [test]> SELECT SYSDATE() FROM DUAL;
+---------------------+
| SYSDATE()           |
+---------------------+
| 2019-02-27 04:11:57 |
+---------------------+
1 row in set (0.000 sec)

Nếu bạn muốn định dạng ngày, MariaDB có hàm DATE_FORMAT ().

Bạn có thể kiểm tra tài liệu Ngày và Giờ của MariaDB để biết thêm thông tin.

TO_DATE

Tương đương TO_DATE của Oracle trong MariaDB là hàm STR_TO_DATE ().

Nó gần giống với kiểu trong Oracle:nó trả về kiểu dữ liệu DATE, trong khi trong MariaDB, nó trả về kiểu dữ liệu DATETIME.

Oracle:

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)

ĐỒNG BỘ

MariaDB chưa có chức năng tương đương với chức năng này. Hiện tại, dựa trên phiếu Jira MDEV-16482 của họ, yêu cầu tính năng này để thêm SYNONYM vẫn đang mở và chưa có dấu hiệu tiến triển tính đến thời điểm này. Chúng tôi hy vọng rằng điều này sẽ được tích hợp trong bản phát hành trong tương lai. Tuy nhiên, một giải pháp thay thế khả thi có thể là sử dụng VIEW.

Mặc dù SYNONYM trong Oracle có thể được sử dụng để tạo bí danh của một bảng từ xa,

ví dụ:

CREATE PUBLIC SYNONYM emp_table FOR [email protected]

Trong MariaDB, bạn có thể tận dụng lợi thế của việc sử dụng công cụ lưu trữ CONNECT mạnh hơn công cụ lưu trữ FederatedX, vì nó cho phép bạn kết nối các nguồn cơ sở dữ liệu khác nhau. Bạn có thể xem bản trình bày video ngắn này.

Có một ví dụ điển hình trong trang hướng dẫn sử dụng của MariaDB mà tôi sẽ không nhắc lại ở đây vì có một số cân nhắc bạn phải đáp ứng, đặc biệt là khi sử dụng ODBC. Vui lòng tham khảo sách hướng dẫn.

Hành vi của chuỗi rỗng và NULL

Hãy lưu ý rằng trong MariaDB, chuỗi trống không phải là NULL trong khi Oracle xử lý chuỗi trống là giá trị null.

Trong Oracle:

SQL> SELECT CASE WHEN '' IS NULL THEN 'Yes' ELSE 'No' END AS "Null Eval" FROM dual;
Nul
---
Yes

Trong 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)

Chuỗi

Kể từ MariaDB 10.3, các trình tự tương thích với Oracle và một ngôn ngữ thủ tục được lưu trữ tương thích với Oracle PL / SQL đã được giới thiệu. Trong MariaDB, việc tạo một chuỗi tương tự như SEQUENCE của Oracle.

Ví dụ của MariaDB:

CREATE SEQUENCE s START WITH 100 INCREMENT BY 10;
CREATE SEQUENCE s2 START WITH -100 INCREMENT BY -10;

và xác định các giá trị tối thiểu và tối đa khả thi được hiển thị như sau

CREATE SEQUENCE s3 START WITH -100 INCREMENT BY 10 MINVALUE=-100 MAXVALUE=1000;

Các hàm chuỗi ký tự

MariaDB, giống như MySQL, cũng có một số hàm chuỗi quá dài để thảo luận từng hàm một. Do đó, có thể kiểm tra tài liệu từ đây và so sánh điều này với các hàm chuỗi của Oracle.

Tuyên bố DML

Các câu lệnh Chèn / Cập nhật / Xóa từ Oracle tương tự trong MariaDB.

CHÈN TẤT CẢ / CHÈN ĐẦU TIÊN của Oracle không được hỗ trợ trong MariaDB và chưa ai mở yêu cầu tính năng này trong Jira của họ (mà tôi biết).

Nếu không, bạn cần xác định từng truy vấn MySQL của mình.

ví dụ:

Trong 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.

Nhưng trong MariaDB, bạn phải chạy chèn từng cái một:

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 không so sánh với cách nó được sử dụng trong Oracle, nơi bạn có thể tận dụng các điều kiện bằng cách thêm từ khóa WHEN trong cú pháp của mình; không có tùy chọn tương đương vào thời điểm này trong MariaDB.

Do đó, giải pháp thay thế của bạn về vấn đề này là sử dụng các thủ tục.

Ký hiệu "+" kết hợp bên ngoài

Hiện tại, để tương thích, nó vẫn chưa có trong MariaDB. Do đó, có rất nhiều vé Jira tôi đã tìm thấy trong MariaDB nhưng vé này chính xác hơn nhiều về yêu cầu tính năng. Do đó, lựa chọn thay thế của bạn cho thời điểm này là sử dụng cú pháp THAM GIA. Vui lòng kiểm tra tài liệu để biết thêm thông tin về điều này.

BẮT ĐẦU VỚI..CONNECT BY

Oracle sử dụng START WITH..CONNECT BY cho các truy vấn phân cấp.

Bắt đầu MariaDB 10.2, họ đã giới thiệu CTE (Biểu thức bảng chung) được thiết kế để hỗ trợ các thế hệ kết quả dữ liệu phân cấp, sử dụng các mô hình như danh sách kề hoặc mô hình tập hợp lồng nhau.

Tương tự như PostgreSQL và MySQL, MariaDB sử dụng CTE không đệ quy và đệ quy.

Ví dụ:một không đệ quy đơn giản được sử dụng để so sánh các cá nhân với nhóm của họ:

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)

trong khi CTE đệ quy (ví dụ:trả về các điểm đến xe buýt với điểm gốc là New York)

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 trong MariaDB?

Trước đây, trong blog của chúng tôi về "Di chuyển từ Cơ sở dữ liệu Oracle sang MariaDB - Điều bạn nên biết", chúng tôi đã giới thiệu mức độ mạnh mẽ của nó hiện nay trong MariaDB khi bổ sung tính tuân thủ của nó để áp dụng PL / SQL như một phần của nhân cơ sở dữ liệu. Bất cứ khi nào bạn sử dụng tính tương thích PL / SQL trong MariaDB, hãy đảm bảo rằng bạn đã đặt SQL_MODE ='Oracle' giống như sau:

SET SQL_MODE='ORACLE';

Chế độ tương thích mới trợ giúp với cú pháp sau:

  • Cú pháp vòng lặp
  • Khai báo biến
  • Cấu trúc quy trình được lưu trữ không theo ANSI
  • Cú pháp con trỏ
  • Tham số thủ tục được lưu trữ
  • Kế thừa kiểu dữ liệu (% TYPE,% ROWTYPE)
  • Ngoại lệ kiểu PL / SQL
  • Từ đồng nghĩa với Các kiểu SQL Cơ bản (VARCHAR2, NUMBER,…)

Ví dụ, trong Oracle, bạn có thể tạo một gói, là một đối tượng lược đồ nhóm các kiểu, biến và chương trình con PL / SQL có liên quan về mặt logic. Do đó, trong MariaDB, bạn có thể làm như sau:

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 ;

Tuy nhiên, PL / SQL của Oracle được biên dịch trước khi thực thi khi nó được tải vào máy chủ. Mặc dù MariaDB không nói điều này trong sách hướng dẫn của họ, nhưng tôi sẽ giả định rằng cách tiếp cận giống như MySQL, nơi nó được biên dịch và lưu trữ trong bộ nhớ cache khi nó được gọi.

Công cụ di chuyển

Như đồng nghiệp của tôi, Bart đã chỉ ra trong blog trước của chúng tôi ở đây, các công cụ sqlines là SQLines SQL Converter và SQLines Data Tool cũng có thể cung cấp hỗ trợ như một phần của quá trình di chuyển của bạn.

MariaDB có dịch vụ Red Rover Migration Practice mà bạn có thể tận dụng.

Nhìn chung, việc di chuyển của Oracle sang MariaDB không dễ dàng như việc di chuyển sang MySQL / Percona, điều này có thể gây ra nhiều thách thức hơn MariaDB; đặc biệt là không tồn tại khả năng tương thích PL / SQL trong MySQL.

Nhưng dù sao, nếu bạn tìm thấy hoặc biết bất kỳ công cụ nào mà bạn thấy hữu ích và có lợi cho việc chuyển từ Oracle sang MariaDB, vui lòng để lại nhận xét trên blog này!

Thử nghiệm

Giống như những gì tôi đã nêu trong blog này, cho phép tôi nhắc lại một số điều ở đây.

Là một phần của kế hoạch di chuyển của bạn, kiểm tra là một nhiệm vụ quan trọng có vai trò rất quan trọng và ảnh hưởng đến quyết định của bạn về việc di chuyển.

Công cụ dbdeployer (một công cụ thay thế MySQL Sandbox) là một công cụ rất hữu ích mà bạn có thể tận dụng. Điều này khá dễ dàng để bạn thử và kiểm tra các phương pháp tiếp cận khác nhau và giúp bạn tiết kiệm thời gian, thay vì thiết lập toàn bộ ngăn xếp nếu mục đích của bạn là thử và kiểm tra nền tảng RDBMS trước.

Để kiểm tra các quy trình (hàm hoặc thủ tục), trình kích hoạt, sự kiện được lưu trữ trong SQL của bạn, tôi khuyên bạn nên sử dụng các công cụ này mytap hoặc Khung kiểm tra đơn vị của Google.

Các công cụ Percona vẫn có thể hữu ích và có thể được kết hợp với DBA hoặc các nhiệm vụ kỹ thuật của bạn ngay cả với MariaDB. Kiểm tra Bộ công cụ Percona tại đây. Bạn có thể tự chọn các công cụ theo nhu cầu của mình, đặc biệt là cho các tác vụ kiểm tra và sử dụng sản xuất.

Nhìn chung, những điều bạn cần ghi nhớ làm nguyên tắc khi thực hiện kiểm tra Máy chủ MariaDB là:

  • Sau khi cài đặt, bạn cần cân nhắc thực hiện một số điều chỉnh. Hãy xem hội thảo trên web của chúng tôi về cách điều chỉnh máy chủ MariaDB của bạn.
  • Thực hiện một số điểm chuẩn và kiểm tra tải trọng cho thiết lập cấu hình của bạn trên nút hiện tại của bạn. Kiểm tra mysqlslap và sysbench có thể giúp bạn điều này. Ngoài ra, hãy xem blog của chúng tôi "Cách đánh giá hiệu suất của MySQL &MariaDB bằng SysBench".
  • Kiểm tra DDL của bạn nếu chúng được xác định chính xác, chẳng hạn như kiểu dữ liệu, ràng buộc, chỉ mục nhóm và chỉ mục phụ hoặc phân vùng, nếu bạn có.
  • Đặc biệt kiểm tra DML của bạn nếu cú ​​pháp chính xác và đang lưu dữ liệu một cách chính xác như mong đợi.
  • Kiểm tra các quy trình, sự kiện, trình kích hoạt đã lưu trữ của bạn để đảm bảo chúng chạy / trả lại kết quả mong đợi.
  • Xác minh rằng các truy vấn của bạn đang chạy là hiệu quả. Tôi khuyên bạn nên tận dụng các công cụ mã nguồn mở hoặc dùng thử sản phẩm ClusterControl của chúng tôi. Nó cung cấp khả năng giám sát / quan sát đặc biệt là cụm MariaDB của bạn. Kiểm tra blog trước này, trong đó chúng tôi giới thiệu cách ClusterControl có thể giúp bạn quản lý MariaDB TX 3.0. Bạn có thể sử dụng ClusterControl tại đây để theo dõi các truy vấn của mình và kế hoạch truy vấn của nó để đảm bảo chúng hoạt động hiệu quả.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách PERIOD_ADD () hoạt động trong MariaDB

  2. Giải thích về toán tử MariaDB INTERSECT

  3. Cách chuyển từ Oracle DB sang MariaDB

  4. Cách HOUR () hoạt động trong MariaDB

  5. Báo cáo hoạt động cho MySQL, MariaDB, PostgreSQL &MongoDB