Làm cách nào để chuyển đổi Oracle SQL sang MySQL?
Nhiệm vụ di chuyển một lược đồ hoàn chỉnh từ cơ sở dữ liệu này sang cơ sở dữ liệu khác không phải lúc nào cũng đơn giản. Ngoài khía cạnh vật lý từ việc lấy dữ liệu từ máy này sang máy khác hoặc thậm chí là một vị trí địa lý khác, một số tác vụ phức tạp hơn đang chuyển đổi giữa các loại dữ liệu khác nhau, các thủ tục được lưu trữ và đơn giản là sự khác biệt không tương thích có thể xảy ra giữa hai cơ sở dữ liệu Show
Bộ công cụ di chuyển MySQL ban đầu là gói được lựa chọn, nhưng gói này đã được thay thế bởi MySQL Workbench. Tuy nhiên, tại thời điểm này, khả năng di chuyển của MySQL Workbench vẫn đang được phát triển thành một giải pháp di chuyển hoàn chỉnh cho cả các cơ sở dữ liệu thương mại lớn Xuất dữ liệu từ OracleXuất dữ liệu hiện có từ Oracle thường là một trong những hình thức di chuyển rẻ nhất, nhưng nó có thể yêu cầu nhiều thao tác nhập liệu thủ công hơn và có thể chậm hơn so với sử dụng công cụ di chuyển. Một trong những công cụ phổ biến nhất để xuất dữ liệu từ Oracle là Oracle SQL Developer. Công cụ Oracle SQL Developer có khả năng xuất dữ liệu từ các bảng Oracle ở nhiều định dạng, như Excel, câu lệnh chèn SQL, định dạng trình tải SQL, HTML, XML, PDF, TEXT, Văn bản cố định, v.v. Bạn có thể sử dụng SQL*Plus để chọn và định dạng dữ liệu của mình, sau đó lưu trữ dữ liệu đó vào một tệp. Ví dụ này tạo ra tệp CSV (giá trị được phân tách bằng dấu phẩy) có thể được nhập qua LOAD DATA INFILE hoặc bằng cách tạo bảng CSV để truy cập ngay set echo off newpage 0 space 0 pagesize 0 feed off head off trimspool on spool oradata.txt select col1 || ',' || col2 || ',' || col3 from tab1 where col2 = 'XYZ'; spool off Bạn cũng có thể sử dụng lệnh “set colsep” nếu không muốn đặt dấu phẩy bằng tay. Điều này tiết kiệm rất nhiều đánh máy. Thí dụ set colsep ',' set echo off newpage 0 space 0 pagesize 0 feed off head off trimspool on spool oradata.txt select col1, col2, col3 from tab1 where col2 = 'XYZ'; spool off Sử dụng PL/SQLGói UTL_FILE của PL/SQL cũng có thể được sử dụng để hủy tải dữ liệu. Thí dụ declare fp utl_file.file_type; begin fp := utl_file.fopen('c:\oradata','tab1.txt','w'); utl_file.putf(fp, '%s, %sn', 'TextField', 55); utl_file.fclose(fp); end; / Nhập dữ liệu vào MySQLKhi dữ liệu đã được xuất từ Oracle thành một tệp phẳng, thì nó có thể được tải vào MySQL. Bước này tiếp tục với kỳ vọng rằng một cấu trúc lược đồ giống hệt nhau đã được tạo trong cơ sở dữ liệu MySQL để chấp nhận dữ liệu. Phương pháp phổ biến nhất để đọc một tệp phẳng vào MySQL là sử dụng lệnh LOAD DATA INFILE. Đây là hình thức LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES; Thao tác này sẽ đọc dữ liệu đã xuất từ tệp 'data. txt’ vào bảng ‘tbl_name’ bằng cách sử dụng các dấu phân cách được chỉ định Ghi chú. Ngoài ra còn có LOAD XML INFILE nếu dữ liệu xuất ra ở định dạng XML Một phương pháp khác có thể tải nhanh hơn nữa là sử dụng khả năng của công cụ lưu trữ CSV. Điều này yêu cầu bảng phải được tạo lại với lược đồ phù hợp và công cụ lưu trữ được chỉ định là CSV. Ví dụ CREATE TABLE mytable ( name varchar(50) NOT NULL, address varchar(100) NOT NULL, zipcode CHAR(5) NOT NULL ) ENGINE=CSV; Sau khi bảng được tạo, một. csv sẽ xuất hiện trong thư mục dữ liệu tương ứng với bảng sẵn sàng lưu trữ dữ liệu. Sao chép tệp CSV đã xuất qua 'mytable hiện có. csv’ và thực thi FLUSH TABLES để cập nhật thông tin bảng. Bây giờ bạn có quyền truy cập vào dữ liệu và có thể sử dụng INSERT INTO new_table … CHỌN để đọc dữ liệu nhanh chóng từ bảng CSV sang một bảng phù hợp hơn cho hệ thống sản xuất của bạn Với việc mất giấy phép Oracle Standard Edition One và cơ sở dữ liệu Oracle Express Edition miễn phí bị kẹt ở Phiên bản 2 11g cũ từ năm 2014, nhiều dự án nhỏ hơn đang xem xét liệu MySQL có thể là giải pháp thay thế hay không. Nếu bạn đang xây dựng ứng dụng của mình từ đầu, hầu hết các dự án có thể bắt đầu với bất kỳ cơ sở dữ liệu quan hệ nào. Nhưng nếu bạn có một cơ sở dữ liệu hiện có, bạn cần điều tra cẩn thận xem việc di chuyển có hợp lý không So sánh tính năngNhiều tính năng của Oracle cũng có sẵn trong MySQL
Đối với một số tính năng của Oracle, MySQL có chức năng tương đương nhưng được triển khai khác. Ví dụ: MySQL không có các chuỗi mà thay vào đó cho phép các cột được xác định là AUTO_INCREMENT. Điều này giúp loại bỏ trình kích hoạt khóa chính cần thiết cho đến Oracle 12 MySQL không có gì tương ứng với các gói PL/SQL, chỉ có các hàm và thủ tục. Điều này có nghĩa là bạn cũng không có các biến gói nhưng sẽ phải sử dụng các biến do người dùng xác định trong phạm vi phiên (@my_var) để lưu trữ các giá trị Người dùng và Bảo mậtCơ sở dữ liệu, lược đồ và người dùng cũng hoạt động khác nhau. Trong Oracle, bạn có một cơ sở dữ liệu với nhiều lược đồ cũng là người dùng. Trong MySQL, từ DATABASE đồng nghĩa với SCHEMA và được tách rời khỏi người dùng. Vì vậy, người dùng cần được cấp quyền truy cập vào lược đồ/cơ sở dữ liệu Mô hình bảo mật trong MySQL nói chung đơn giản hơn nhiều so với Oracle, vì vậy nếu bạn có bảo mật chi tiết và/hoặc phức tạp trong ứng dụng Oracle, sẽ khó chuyển sang MySQL Loại dữ liệuCác kiểu dữ liệu khác nhau giữa Oracle và MySQL, nhưng nhìn chung có thể được ánh xạ dễ dàng tiên tri mysql VARCHAR2 VARCHAR SỐ SỐ NGÀY NGÀY GIỜ Lưu ý rằng biến MySQL DATE chỉ có phần ngày và không có thời gian. Việc chuyển đổi dễ dàng là biến mọi NGÀY của Oracle thành DATETIME của MySQL, nhưng nếu bạn không bao giờ cần phần tử thời gian, thì nên sử dụng MySQL DATE cho các giá trị này MySQL có rất nhiều kiểu dữ liệu khác nhau, từ TINYINT 3 chữ số đến BIGINT 19 chữ số. Bạn cần sử dụng một trong các loại INT cho các cột chính sử dụng AUTO_INCREMENT Còn PL/SQL thì sao?Ngôn ngữ lập trình trong MySQL đơn giản hơn nhiều so với PL/SQL và MySQL không có bất cứ thứ gì giống như khả năng của các gói tích hợp trong Oracle. Nếu bạn đang sử dụng nhiều gói tích hợp, sẽ rất khó để chuyển sang MySQL Mặc dù bạn có các khả năng kích hoạt bảng trong MySQL giống như trong Oracle (TRƯỚC/SAU, hàng hoặc bảng), nhưng bạn không có tất cả các trình kích hoạt khác mà Oracle cung cấp, như trình kích hoạt DDL, ON-LOGON, v.v. Có một số khác biệt về cú pháp – ví dụ, các nhánh PL/SQL EXCEPTION được xử lý trong MySQL với DECLARE HANDLER. MySQL có các cấu trúc điều khiển cơ bản như các vòng lặp IF-THEN-ELSE, WHILE và REPEAT, nhưng bạn sẽ tìm kiếm cấu trúc vòng lặp FOR một cách vô ích. MySQL không có khái niệm về các biến neo với %TYPE và %ROWTYPE Trình hướng dẫn di chuyểnMySQL Workbench đi kèm với trình hướng dẫn di chuyển cơ sở dữ liệu. Trình hướng dẫn này giúp bạn di chuyển từ MS SQL Server, MS Access, PostgreSQL và Sybase. Vì MySQL thuộc sở hữu của Oracle nên rõ ràng là không có sự di chuyển từ Oracle sang MySQL Ngoài ra còn có một quá trình di chuyển chung có thể được sử dụng để di chuyển “hầu hết các cơ sở dữ liệu tuân thủ ODBC. ” Tuy nhiên, điều này cũng không thể được sử dụng để di chuyển từ Oracle sang –MySQL—trình hướng dẫn sẽ kết nối nhưng không thấy bất kỳ đối tượng cơ sở dữ liệu nào để di chuyển Công cụ di chuyển khácMicrosoft sẽ sẵn lòng giúp bạn di chuyển từ Oracle sang SQL Server bằng Trợ lý di chuyển Microsoft SQL Server. Từ đó, bạn có thể sử dụng thuật sĩ di chuyển MySQL, hỗ trợ di chuyển từ MS SQL Server Tìm kiếm trên Internet cũng sẽ tạo ra một số công cụ của bên thứ ba nhằm mục đích có thể di chuyển cơ sở dữ liệu của bạn từ Oracle sang MySQL Di chuyển thủ côngBạn cũng có thể xuất cơ sở dữ liệu Oracle của mình sang một tệp bằng Oracle SQL Developer và sau đó thực hiện các điều chỉnh cần thiết để tạo cơ sở dữ liệu MySQL tương đương. Dưới đây là một ví dụ về xuất từ SQL Developer của một cơ sở dữ liệu đơn giản chứa nhiều đối tượng lược đồ Oracle thông thường và cách chúng ánh xạ tới MySQL Những cái bànNhà phát triển SQL xuất các bảng có dấu ngoặc kép, như thế này -------------------------------------------------------- Để tạo các bảng này trong MySQL, bạn cần bỏ dấu ngoặc kép và thay đổi kiểu dữ liệu. SYSDATE là một chức năng dành riêng cho Oracle mà bạn cần thay thế bằng CURRENT_TIMESTAMP tương đương. Một tập lệnh MySQL có thể trông như thế này CREATE TABLE EVENTS trình tựBạn không cần các trình tự trong MySQL, vì vậy bạn không cần phải bao gồm các trình tự này nếu bạn xuất cơ sở dữ liệu Oracle của mình bằng SQL Developer. Nếu bạn đang sử dụng trình kích hoạt hoàn toàn để tạo các giá trị khóa chính, bạn cũng có thể loại bỏ chúng Hạn chếBản xuất SQL Developer thêm tất cả các ràng buộc dưới dạng các câu lệnh ALTER TABLE riêng lẻ, như thế này -------------------------------------------------------- Trong MySQL, bạn cần xóa dấu ngoặc kép. Cú pháp cũng hơi khác một chút, không có dấu ngoặc đơn xung quanh thông số cột. Ngoài ra, MySQL yêu cầu bạn cung cấp đặc tả cột đầy đủ bao gồm kiểu dữ liệu cho mọi câu lệnh ALTER. Bạn phải tạo khóa chính của cột trước khi có thể thêm AUTO_INCREMENT. Trong MySQL, ở trên có thể trở thành ________số 8_______Lượt xemXuất chế độ xem mặc định từ Oracle qua SQL Developer trông như thế này CREATE OR REPLACE EDITIONABLE VIEW "REG_EMAIL" Trong MySQL, không có TẠO HOẶC THAY THẾ, cũng như khái niệm có thể chỉnh sửa, do đó, MySQL tương đương trở thành CREATE VIEW REG_EMAIL (EV_ID, DESCRIPTION, EMAIL) Dữ liệuNhà phát triển SQL có thể xuất dữ liệu của bạn dưới dạng câu lệnh INSERT, như thế này REM INSERTING into EVENTS Nhà phát triển SQL thêm một số cú pháp SQL*Plus (REM và SET) mà bạn cần xóa. MySQL không có hàm TO_DATE, nhưng chấp nhận trực tiếp các giá trị DATETIME dưới dạng các chuỗi được trích dẫn ở định dạng tiêu chuẩn ISO. Trong MySQL, bạn chỉ cần một cái gì đó như thế này insert into EVENTS (EV_ID,DESCRIPTION,START_DATE,END_DATE) Gây nênQuá trình xuất trình kích hoạt SQL Developer trông như thế này -------------------------------------------------------- MySQL không có CREATE OR REPLACE hoặc EDITIONABLE và các khai báo phải được thực hiện riêng lẻ với DECLARE. Cú pháp đề cập đến bản ghi kích hoạt chỉ là MỚI trong MySQL, không phải. MỚI như trong Oracle. Bạn cũng cần đặt rõ ràng DELIMITER trong MySQL để thông báo khi mã kích hoạt hoàn tất. Lưu ý rằng các trình kích hoạt, chức năng và thủ tục của MySQL không được có tên như một phần của câu lệnh END cuối cùng Trong ví dụ này, trình kích hoạt Oracle sử dụng UTL_MAIL, một trong nhiều phần mềm tích hợp sẵn không có sẵn trong MySQL. Bạn cần tìm một cách khác để triển khai loại chức năng này trong MySQL. MySQL tương đương của bạn có thể trông như thế này DELIMITER // Chức năngMột hàm Oracle được xuất từ SQL Developer trông như thế này CREATE TABLE EVENTS0 Trong MySQL với các từ khóa không liên quan đã bị xóa, khai báo rõ ràng và kiểu dữ liệu đã thay đổi, quy trình này có thể trông như thế này CREATE TABLE EVENTS1 thủ tụcMột ví dụ về thủ tục PL/SQL từ cơ sở dữ liệu Oracle có thể trông như thế này khi được xuất từ SQL Developer CREATE TABLE EVENTS2 Trong MySQL, cú pháp tham số khác, với từ khóa IN hoặc OUT trước. Các ngoại lệ được khai báo với DECLARE … XỬ LÝ CHO – trong ví dụ bên dưới, mọi thứ trong khối BEGIN END bên dưới khai báo trình xử lý là trình xử lý cho điều kiện cụ thể KHÔNG TÌM THẤY. Trình xử lý có thể TIẾP TỤC như được hiển thị bên dưới hoặc EXIT để chấm dứt khối BEGIN END mà nó là một phần của. Trong MySQL, quy trình Oracle ở trên có thể trông như thế này CREATE TABLE EVENTS3 Phần kết luậnKhông có chuyển đổi tự động dễ dàng từ Oracle sang MySQL MySQL có các tính năng cơ bản tương đương với cơ sở dữ liệu Oracle, mặc dù cú pháp hơi khác đối với nhiều thứ. Cú pháp của các trình kích hoạt, chức năng và thủ tục hơi khác nhưng dễ điều chỉnh. Cú pháp cho các trình xử lý ngoại lệ khá khác nhau và chúng được đặt khác nhau trong mã, vì vậy sẽ cần suy nghĩ một chút để điều chỉnh chúng cho MySQL Sự khác biệt lớn và yếu tố quyết định tiềm năng khi cân nhắc di chuyển là lượng PL/SQL trong ứng dụng của bạn. Việc thiếu nhiều gói tích hợp mạnh mẽ mà bạn tìm thấy trong Oracle và ngôn ngữ lập trình đơn giản hơn không có cấu trúc như vòng lặp FOR con trỏ có nghĩa là nếu bạn có nhiều PL/SQL, bạn sẽ phải đối mặt với một nhiệm vụ lớn khi chuyển sang MySQL. Thẻ. tiên tri Được viết bởi Sten Vesterli là Giám đốc ACE của Oracle và là nhà phát triển, tư vấn và huấn luyện viên chính chuyên về các công cụ và máy chủ của Oracle. Ông là tác giả của cuốn sách có tên "Oracle ADF Enterprise Application Development—Made Simple," do Packt Publishing xuất bản Làm cách nào để chuyển đổi cơ sở dữ liệu Oracle sang MySQL?Phương pháp 2. Di chuyển Oracle sang MySQL theo cách thủ công . Đăng nhập vào MySQL bằng thông tin đăng nhập của bạn Khởi chạy tùy chọn cho nguồn dữ liệu Trình kết nối ODBC Thiết lập nguồn dữ liệu Oracle ODBC cho cơ sở dữ liệu MySQL của bạn Làm cách nào để chuyển đổi truy vấn Oracle thành truy vấn MySQL?Công cụ chuyển đổi SQL của SQLines cho phép bạn chuyển đổi lược đồ cơ sở dữ liệu (DDL), truy vấn và câu lệnh DML, chế độ xem, thủ tục được lưu trữ, chức năng và trình kích hoạt từ Oracle sang MySQL. Công cụ SQLines chuyển đổi các tập lệnh SQL và các câu lệnh SQL độc lập. Để di chuyển dữ liệu và lược đồ cơ sở dữ liệu từ cơ sở dữ liệu Oracle, hãy sử dụng công cụ Dữ liệu SQLines.
Làm cách nào để di chuyển thủ tục lưu sẵn của Oracle sang MySQL?Chuyển thủ tục từ Oracle® sang Cloud SQL cho MySQL . Trên trang này Nhập các thủ tục, chức năng và trình kích hoạt được lưu trữ. khối ẩn danh. Cấu trúc chung của thủ tục lưu sẵn. Thực hiện thủ tục lưu trữ. . Xác minh cấu hình phù hợp. xác minh kích thước. hiệu suất điểm chuẩn. . Tối ưu hóa cấu hình của bạn cho Cloud SQL Oracle SQL và MySQL có giống nhau không?MySQL và Oracle SQL đều là RDBMS (hệ thống quản lý cơ sở dữ liệu quan hệ) thuộc sở hữu của Tập đoàn Oracle . MySQL được xây dựng chủ yếu là miễn phí và mã nguồn mở, trong khi Oracle chủ yếu được xây dựng để thương mại và trả phí. MySQL cũng dễ tùy biến hơn Oracle, đó là vì Oracle là một sản phẩm hoàn chỉnh. |