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:

Đọc thêm  Kiến thức cơ bản về partition table
Đọc thêm  Chuyển bảng non-partition thành bảng partition bằng dbms_redefinition

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;
				
			
partition table 1

Đâ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;
				
			
partition table 2

5. Thực hiện SPLIT PARTITION

Tiếp theo, chúng ta sẽ dùng các câu lệnh sau để chia partition invoices_q4 của bảng INVOICES thành các partition nhỏ hơn:

				
					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:

partition table 3

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 2: ADMIN 1 + DATA GUARD

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

0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận
0
Rất thích suy nghĩ của bạn, hãy bình luận.x