Mục lục
1. Giới thiệu
Để chuyển đổi 1 bảng bình thường (non-partition) sang bảng partition, chúng ta có thể có nhiều cách.
Trong bài viết này tôi sẽ hướng dẫn các bạn sử dụng phương pháp EXCHANGE để thực hiện partition bảng nhé.
Nhân tiện, liên quan đến chủ đề partitioned table, nếu bạn chưa biết nó là gì, có thể tham khảo bài viết sau của tôi:
2. Hướng dẫn partition bảng bằng EXCHANGE
1. Tạo bảng test:
Tạo bảng INVOICES là bảng non-partition. Giả sử đây là bảng chúng ta cần partitioning:
CREATE TABLE DUY.INVOICES (
invoice_no NUMBER PRIMARY KEY,
invoice_date DATE NOT NULL,
comments VARCHAR2(500)
);
Thêm 1 chút dữ liệu để test
INSERT INTO DUY.INVOICES VALUES (1, '01-Mar-2021', 'Quarter 1');
INSERT INTO DUY.INVOICES VALUES (2, '11-Jul-2021', 'Quarter 2');
INSERT INTO DUY.INVOICES VALUES (3, '15-Sep-2021', 'Quarter 3');
INSERT INTO DUY.INVOICES VALUES (4, '21-Nov-2021', 'Quarter 4');
COMMIT;
Đây là 1 bảng non-partition, mục tiêu của chúng ta là chia bảng ra thành partition dựa trên partition key là INVOICE_DATE.
VD: invoices_q1 tương ứng với các dòng dữ liệu có INVOICE_DATE là giá trị thời gian thuộc Quý 1. Tương tự như vậy với các partition invoices_q2, invoices_q3, invoices_q4.
2. Tạo bảng partition
Bước tiếp theo, chúng ta tạo 1 bảng khác với các cột giống hệt bảng INVOICES, nhưng đã có sẵn 1 partition
CREATE TABLE invoices_p
(invoice_no NUMBER PRIMARY KEY,
invoice_date DATE NOT NULL,
comments VARCHAR2(500))
PARTITION BY RANGE (invoice_date)
(PARTITION invoices_q4 VALUES LESS THAN (MAXVALUE));
3. Thực hiện EXCHANGE table
Tiếp theo, chúng ta thực hiện lệnh sau:
ALTER TABLE INVOICES_P EXCHANGE PARTITION invoices_q4
WITH TABLE INVOICES
WITHOUT VALIDATION
UPDATE GLOBAL INDEXES;
Giải thích:
- Câu lệnh này sẽ tráo đổi metadata, biến segment chứa dữ liệu tương ứng với bảng INVOICES trở thành segment của partition invoices_q4 của bảng INVOICES_P.
- Quá trình này chỉ thực hiện ở cấp độ metadata, nên rất nhanh.
4. Kiểm tra lại kết quả:
select * from DUY.INVOICES_P;
ALTER TABLE INVOICES_P SPLIT partition invoices_q4 AT (TO_DATE('01/04/2021', 'DD/MM/YYYY')) INTO (PARTITION invoices_q1,PARTITION invoices_q4) UPDATE GLOBAL INDEXES;
ALTER TABLE INVOICES_P SPLIT partition invoices_q4 AT (TO_DATE('01/07/2021', 'DD/MM/YYYY')) INTO (PARTITION invoices_q2,PARTITION invoices_q4) UPDATE GLOBAL INDEXES;
ALTER TABLE INVOICES_P SPLIT partition invoices_q4 AT (TO_DATE('01/09/2021', 'DD/MM/YYYY')) INTO (PARTITION invoices_q3,PARTITION invoices_q4) UPDATE GLOBAL INDEXES;
6. Đổi tên bảng
Như vậy tôi đã partition bảng này thành công, việc cuối cùng là đổi tên bảng INVOICES_P thành INVOICES
ALTER TABLE DUY.INVOICES RENAME TO INVOICES_OLD;
ALTER TABLE DUY.INVOICES_P RENAME TO INVOICES;
7. Kiểm tra lại kết quả
Bạn kiểm tra lại kết quả cuối cùng bằng câu lệnh sau:
select table_name, partition_name, high_value from dba_tab_partitions where table_name = 'INVOICES';
Kết quả như sau:
Hẹn gặp lại các bạn vào các bài viết tiếp theo.
Nguồn: https://dangxuanduy.com/
Hiện tại, tôi có tổ chức đều đặn các khóa học về quản trị Oracle Database, tôi sẽ để thông tin ở đây, để bạn nào quan tâm về lịch học cũng như chương trình học có thể theo dõi nhé.
KHOÁ DÀNH CHO NGƯỜI MỚI
KHÓA HỌC: QUẢN TRỊ ORACLE DATABASE THẬT LÀ ĐƠN GIẢN (ADMIN 1)
CÁC KHOÁ NÂNG CAO:
KHÓA HỌC ORACLE NÂNG CAO: QUẢN TRỊ KIẾN TRÚC MULTITENANT 12c
KHÓA HỌC ORACLE NÂNG CAO: QUẢN TRỊ HỆ THỐNG DATA GUARD
CÁC KHOÁ COMBO:
COMBO 1: ADMIN 1 + MULTITENANT 12c
COMBO 3: ADMIN 1 + MULTITENANT 12c + DATA GUARD
LỊCH HỌC:
Mời bạn xem tại đây: LỊCH HỌC CÁC LỚP ORACLE
ĐĂNG KÝ:
https://forms.gle/MtCAoRQFenP886y79
Hãy tham gia group “Kho tài liệu kiến thức database” để cùng học hỏi và chia sẻ nhé.