Import Export dữ liệu trong oracle như thế nào cho chuẩn

Nếu bạn đang thắc mắc cách import export dữ liệu trong oracle thì bài viết này chính là dành cho bạn. Cùng theo dõi ngay nhé!

Bạn đang xem bài viết: Import Export dữ liệu trong oracle

Import export dữ liệu trong oracle là gì

 

Oracle Data Pump là một công cụ để export và import dữ liệu trong Oracle Database.

Data Pump có 2 tập lệnh là expdp và impdp. Trong đó, expdp sẽ export dữ liệu trong Oracle Database ra thành dump file. Và impdp sẽ sử dụng dump file đó và import lại vào Oracle Database.

Dump file có thể chứa dữ liệu của table, index hay dữ liệu cấu trúc (metadata). Bạn hoàn toàn có thể lựa chọn các đối tượng sẽ được bao gồm trong dump file.

Xem thêm: Cách khắc phục lỗi không mở được file word và excel

Tăng tốc độ export

Đầu tiên là các mẹo để tăng tốc độ export

   Sử dụng PARALLEL

Một trong những cách hiệu quả nhất để tăng tốc độ export, đó là sử dụng option PARALLEL.

Việc này sẽ tăng số luồng export thay vì chỉ có 1 luồng như mặc định.

Song song với việc sử dụng option PARALLEL, ở option DUMPFILE bạn cũng phải đặt tên file kèm với tham số %U để mỗi luồng sẽ ghi ra 1 file riêng biệt.

VD: DUMPFILE=table%U.dmp và PARALLEL=4

thì các file export ra sẽ có tên như sau:

table01.dmp

table02.dmp

table03.dmp

table04.dmp

   Sử dụng COMPRESSION=ALL

Option COMPRESSION=ALL sẽ giúp nén file export để dung lượng của nó nhỏ hơn. Việc nén này có thể tốn thêm 1 chút xử lý của CPU, tuy nhiên, do dung lượng sau khi nén đã nhỏ đi, nên thời gian ghi xuống đĩa sẽ nhanh hơn nhiều.

Tôi rất hay dùng option này và thấy nó thực sự khá hiệu quả.

   Sử dụng CLUSTER=N và PARALLEL_FORCE_LOCAL=TRUE

Trong môi trường RAC, khi bạn export dữ liệu, mặc định các instance của RAC sẽ cùng thực hiện export. Điều này nghe có vẻ khá tốt đúng không?

Tuy nhiên, không phải lúc nào nhiều cũng thắng được ít. Việc các tiến trình export nằm trên các instance khác nhau, khiến việc phối hợp giữa chúng sẽ khó khăn hơn, so với việc tất cả tiến trình cùng nằm trên 1 instance.

Đọc thêm  Cấu hình Streaming Replication trong PostgreSQL 13

   Sử dụng EXCLUDE=STATISTICS

Khi các bạn thực hiện export dữ liệu, mặc định, statistics của đối tượng cũng sẽ được export theo.

Việc này đôi khi không cần thiết!

Nguyên nhân là vì: Sau khi bạn import dữ liệu xong, bạn vẫn phải cần 1 lần nữa gather lại toàn bộ các bảng vừa import, vì statistics của database cũ không có gì đảm bảo sẽ tối ưu cho database mới được!

Do đó, tôi khuyến nghị bạn nên sử dụng option EXCLUDE=STATISTICS để loại bỏ statistics ra khỏi bản export.

   Sử dụng EXCLUDE=INDEX

Option này sẽ không export index của các bảng ra nữa.

Trong trường hợp bạn cần export dữ liệu thật nhanh. Cách tiếp cận đơn giản nhất là: Chỉ export những thứ cần thiết!

Bạn hoàn toàn có thể tạo lại index bằng tay ở trên database đích, sau khi đã import xong cơ mà. Vậy bạn cần export index để làm gì?

   Chạy Gather dictionary trước khi export

Tiến trình export cần truy vấn các thông tin về cấu trúc của đối tượng export (VD: Các cột của table, các index, constraint liên quan, số dòng dữ liệu…). Các thông tin này sẽ được lưu tại data dictionary.

Do đó, chúng ta cần gather lại dictionary để giúp export chạy nhanh hơn.

 Export dữ liệu vào phân vùng có tốc độ ghi cao

Điều này rất đơn giản nhưng đôi khi các bạn mới vào nghề rất hay mắc phải.

Bạn nào đã từng export dữ liệu thẳng vào 1 ổ đĩa USB 2.0, hãy comment cho tôi biết nhé.

Nói chung lời khuyên là: Hãy chọn phân vùng có tốc độ ghi tốt để export dữ liệu vào đó, tốt nhất là SSD.

Tăng tốc độ import

Thời gian import thường lâu hơn export khá nhiều, khoảng từ 2-5 lần.

Sau đây là 1 số thủ thuật tôi thường dùng để tăng tốc độ import.

   Cấp phát trước dung lượng cho datafile

Thay vì tạo datafile theo kiểu AUTOEXTEND, tôi sẽ sử dụng FIXED SIZE cho datafile. (VD: Tôi tạo datafile với kích thước được cấp phát sẵn là 32GB). Làm như vậy, khi import dữ liệu, sẽ không mất thời gian extend datafile nữa.

Đọc thêm  Kiến trúc Process trong Oracle Database – phần 2

Nhiều bạn có thể thắc mắc: Làm như vậy có thể khiến lãng phí dung lượng lưu trữ thì sao?

Đồng ý với bạn điểm này, tuy nhiên, nếu chúng ta muốn tăng tốc độ thì cần phải đánh đổi thôi.

Xem thêm: Cách chèn văn bản từ excel sang word 2010 dễ hiểu

Đưa database về NOLOGGING

Khi import dữ liệu, redo log sẽ sinh ra rất nhiều, việc này gây ra 2 vấn đề:

Tăng thời gian import do cần ghi thông tin redo log quá nhiều.

Do redo log sinh ra nhiều nên tần suất switch log cũng tăng cao, tỷ lệ thuận với việc tần suất checkpoint cũng tăng theo –> Tốc độ giảm

Do đó, có một giải pháp là đưa database về chế độ No Archive log, để hạn chế các thông tin được ghi vào redo log.

Cách này khá hiệu quả trong việc tăng tốc độ import, tuy nhiên, có thể có 1 số rủi ro về an toàn cho database. Bạn nên cân nhắc nó.

Chú ý: Từ bản 12c trở đi, bạn có thể sử dụng option sau để job import không sinh ra quá nhiều redo log nữa:

TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y

   Tăng kích thước Redo log group

Như tôi đã nói ở trên, việc redo log sinh ra quá nhiều, dẫn đến tần suất switch log tăng cao, tỷ lệ thuận với tần suất checkpoint.

Để giảm tần suất checkpoint, bạn hãy tăng kích thước của Redo log group lên, để giảm tần suất switch log.

Cách làm này cũng khá hiệu quả đó.

   Sử dụng PARALLEL

Muốn import nhanh, không thể không nhắc tới option PARALLEL này. Có lẽ tôi không cần nói gì thêm vì tính hiệu quả của nó nữa.

Tuy nhiên, bạn cần chú ý, lúc Export bạn cũng phải dùng PARALLEL, thì lúc IMPORT dùng PARALLEL mới hiệu quả được nhé.

   Sử dụng Exclude=constraint

Với dữ liệu cần import có nhiều constraint, cũng khiến cho việc import mất thêm nhiều thời gian hơn. Bạn hoàn toàn có thể sử dụng option EXCLUDE=CONSTRAINT để không tạo constraint khi import. Sau khi import xong xuôi, bạn mới tạo constraint lại.

Lúc tạo lại constraint, bạn có thể kết hợp với option NOVALIDATE để tạo constraint nhanh hơn.

   Tăng pga_aggregate_target

Nếu trong câu lệnh import, bạn vẫn cho phép import cả Index, thì lúc tạo index, PGA sẽ sử dụng nhiều để sắp xếp dữ liệu.

Việc tăng PGA bằng cách tăng tham số PGA_AGGREGATE_TARGET nhằm mục đích mở rộng Cache để việc sắp xếp dữ liệu trên Memory được nhanh hơn.

Xem thêm video về Import Export dữ liệu trong oracle

Tổng kết

Hy vọng bài viết trên của blogphanmem đã giúp các bạn đọc nắm được cách Import Export dữ liệu trong oracle. Chúc các bạn thành công!

BÀI VIẾT LIÊN QUAN