[Chuyển đổi database Oracle sang PostgreSQL] Phần 2 - Công cụ chuyển đổi Ora2Pg
database migration
3
Oracle
7
Postgresql
10
White

Phan Lê Thanh viết ngày 26/11/2017

Công việc chính của việc chuyển đổi là chuyển các cấu trúc bảng, procedure, data của CSDL Oracle sang PostgreSQL. Bạn có thể làm việc này một cách thủ công nếu như có kiến thức tốt về CSDL và hiểu được một số khác biệt giữa 2 hệ CSDL này. Tuy nhiên, đối với các hệ thống có CSDL lớn thì đây sẽ là một thử thách lớn, vì bạn sẽ phải tốn rất nhiều nguồn lực để thực hiện việc này.

Có một vài công cụ có thể hỗ trợ chuyển đổi này một cách tự động. Và trong bài viết này, mình sẽ giới thiệu một công cụ mạnh mẽ và hoàn toàn miễn phí có thể hỗ trợ việc chuyển đổi này, đó chính là Ora2Pg. Ora2Pg được phát triển bởi Gilles Darold và được viết bằng ngôn ngữ lập trình Perl, nó có thể giúp chúng ta dễ dàng chuyển đổi các CSDL từ Oracle, MySQL sang PostgreSQL. Mình sẽ hướng dẫn cách cài đặt, cấu hình và các bước cơ bản sử dụng Ora2Pg để chuyển đổi một CSDL từ Oracle sang PostgreSQL trong hệ điều hành CentOS. Nếu bạn nào muốn tìm hiểu sâu về nội dung của Ora2Pg thì hãy tham khảo mục Documentation của nó nhé.
alt text

I. Cài đặt Ora2Pg

Bước 1: Cài đặt các module Perl (5.8+)

yum install perl
yum install perl-CPAN
yum install perl-core

Bước 2: Cài đặt Ora2Pg
Tải về bộ cài đặt mới nhất Ora2Pg từ https://github.com/darold/ora2pg/releases ở dạng file nén tar.
Thực thi các câu lệnh bên dưới để cài đặt Ora2Pg như một module Perl:

tar xzf ora2pg-10.x.tar.gz
cd ora2pg-10.x/
perl Makefile.PL
make && make install

Câu lệnh trên sẽ cài đặt Ora2Pg vào thư mục /usr/local/bin và file cấu hình ora2pg.conf vào thư mục /etc/ora2pg/.

Bước 3: Cài đặt module DBD::Oracle
Ora2Pg cần module Perl là DBD::Oracle để có thể kết nối đến một database Oracle từ Perl DBI. Việc bạn cần làm là thiết lập các biến môi trường ORACLE_HOMELD_LIBRARY_PATH cho root user (lưu ý giá trị của hai biến này sẽ phụ thuộc vào cấu hình server mà bạn đang cài Oracle), và cài đặt DBD::Oracle bằng các câu lệnh bên dưới:

export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
export ORACLE_HOME=/usr/lib/oracle/11.2/client64/
perl -MCPAN -e 'install DBD::Oracle'

II. Tạo project và cấu hình

Bước 1: Cấu hình ora2pg.conf mặc định
Mặc định, Ora2Pg sẽ tạo một copy tập tin cấu hình ở thư mục /etc/ora2pg/ cho các project khi khởi tạo. Nếu bạn muốn thay đổi cấu hình cho toàn cục, hãy thay đổi các thông tin trong file này.

Bước 2: Tạo project
Tạo thư mục /home/ora2pg/ nơi sẽ tạo project của bạn:

mkdir -p /home/ora2pg

Tạo project cho Ora2Pg:

ora2pg --project_base /home/ora2pg --init_project test_project  

Sau khi thực hiện câu lệnh trên, Ora2Pg sẽ phát sinh các thư mục của project có cấu trúc như sau:

/home/git/tmp/test_project/
                schema/
                     dblinks/
                     directories/
                        functions/
                        grants/
                     mviews/
                        packages/
                        partitions/
                        procedures/
                        sequences/
                        synonyms/
                        tables/
                        tablespaces/
                        triggers/
                        types/
                     views/
                sources/
                        functions/
                        mviews/
                     packages/
                     partitions/
                     procedures/
                     triggers/
                        types/
                        views/
                data/
                config/
                reports/

Bước 3: Cấu hình project
Mở file cấu hình của project vừa tạo ở bước 2:

cd /home/ora2pg/test_project/config/
vi ora2pg.conf

Tìm đến các thuộc tính và cấu hình thông tin như bên dưới:

ORACLE_DSN
dbi:Oracle:host=mydb.mydom.fr(10.88.122.94);sid=SIDNAME(oracle);port=1522    
ORACLE_USER       point1
ORACLE_PWD       123456
SCHEMA       POINT

Bước 4: Run
Chạy script export_schema.sh để thực thi quá trình chuyển đổi:

cd /home/ora2pg/test_project    
./export_schema.sh

Sau khi script chạy xong, tất cả các thành phần database của Oracle sẽ được chuyển đổi tương ứng sang PostgreSQL và được chuyển vào thư mục schema.
Sau khi convert các cấu trúc dữ liệu, bạn cũng có thể convert toàn bộ dữ liệu (hoặc một vài bảng cụ thể) của database Oracle sang các câu lệnh COPY, INSERT làm master data hoặc import vào database PostgreSQL. Phần data sẽ được trích xuất ra thành file data.sql và được đặt trong thư mục data.
Trích xuất data ra cú pháp INSERT:

ora2pg -t INSERT -o data.sql -b ./data -c ./config/ora2pg.conf

Trích xuất data ra cú pháp COPY:

ora2pg -t COPY -o data.sql -b ./data -c ./config/ora2pg.conf

Tuy việc xuất ra các thành phần là tương ứng như Oracle trong thư mục schema như trên, nhưng bản chất các thành phần bên trong là khác nhau về mặt cấu trúc, điều này xảy ra vì sự khác biệt về các định nghĩa, cụ thể:

  • Trong PostgreSQL không có khái niệm SYNONYM, do đó các SYNONYM sẽ được chuyển đổi thành các VIEW tương ứng.
  • PostgreSQL không có khái niệm PACKAGE hay PACKAGE BODY và chỉ sử dụng FUNCTION và PROCEDURE. Do đó, toàn bộ package sẽ được chuyển đổi thành các SCHEMA trong PostgreSQL tương ứng với tên package, các procedure trong package sẽ được chuyển đổi thành các function trong schema.
  • DATABASE LINK sẽ được chuyển đổi thành PostgreSQL Foreign-Data Wrapper (FDW) và phải sử dụng extension bên ngoài là oracle_fdw (tuy nhiên kể từ PostgreSQL 9.4 đã có thể hỗ trợ FDW bằng chính extension đi kèm postgres_fdw)

Như vậy, ở phần 2 này, bạn đã có thể chuyển đổi gần như toàn bộ thành phần của một CSDL từ Oracle sang PostgreSQL, mình xin kết thúc nội dung phần này ở đây.

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Phan Lê Thanh

3 bài viết.
0 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
4 0
Oracle và PostgreSQL Nếu bạn là developer và thường xuyên giao tiếp đến cơ sở dữ liệu (database) của một hệ thống thì chắc hẳn là sẽ biết đến hai ...
Phan Lê Thanh viết 9 tháng trước
4 0
Bài viết liên quan
White
3 0
Bài viết này sẽ giới thiệu về phân vùng bảng và chỉ mục trong Oracle Database. Phân vùng giải quyết vấn đề quan trọng trong việc hỗ trợ các bảng r...
Dương Đức Đạt viết hơn 1 năm trước
3 0
White
2 0
Tổng quan về Oracle và những điểm mạnh Oracle là hệ có sở dữ liệu hay dùng trong business application, gồm phiên bản free (standard edition) và ph...
Vu Nhat Minh viết hơn 3 năm trước
2 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
3 bài viết.
0 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!