Trong Cơ sở dữ liệu Oracle 18c, giờ đây chúng ta thay đổi chiến lược phân vùng trực tuyến của một bảng thông qua câu lệnh SQL “ALTER TABLE MODIFY PARTITION”.
Tính năng mới này cho phép chúng tôi điều chỉnh phương pháp phân vùng cho một bảng mà không yêu cầu bất kỳ thời gian chết liên quan nào để thực hiện thay đổi.
Trừ khi bạn chỉ định mệnh đề “UPDATE INDEXES” như một phần của câu lệnh “ALTER TABLE”:
- Cơ sở dữ liệu đánh dấu UNUSABLE tất cả các phân vùng hoặc phân vùng chỉ mục cục bộ tương ứng.
- Các chỉ mục chung hoặc tất cả các phân vùng của các chỉ mục toàn cầu được phân vùng, được đánh dấu là KHÔNG THỂ DÙNG và phải được xây dựng lại.
Ví dụ này cung cấp trình bày từng bước về các tác vụ cần thiết để chuyển đổi bảng phân vùng RANGE thành bảng phân vùng HASH.
Hiển thị các phân vùng của bảng ATP01_CRED_PAG:
# sqlplus / as sysdba SQL*Plus: Release 18.0.0.0.0 - Production on Wed Jun 17 16:39:51 2020 Version 18.2.0.0.0 Copyright (c) 1982, 2018, Oracle. All rights reserved. Connected to: Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production Version 18.2.0.0.0 SQL> select table_name, partition_name, partition_position from dba_tab_partitions where table_name='ATP01_CRED_PAG'; TABLE_NAME PARTITION_NAME PARTITION_POSITION ----------------------------------------------------- ATP01_CRED_PAG PART_199501 1 ATP01_CRED_PAG PART_199412 2 ATP01_CRED_PAG PART_199506 3 SQL> select count(1) from ATP01_CRED_PAG partition (PART_199501); COUNT(1) ---------- 3908 SQL> select count(1) from ATP01_CRED_PAG partition (PART_199412); COUNT(1) ---------- 3984 SQL> select count(1) from ATP01_CRED_PAG partition (PART_199506); COUNT(1) ---------- 1363
Hiển thị phương pháp phân vùng (RANGE) của bảng ATP01_CRED_PAG:
SQL> select owner, table_name, partitioning_type, autolist, interval, autolist_subpartition from dba_part_tables where table_name = 'ATP01_CRED_PAG'; OWNER TABLE_NAME PARTITION AUT INTERVAL AUT -------- -------------- -------- ---- --------- ------ ADMIN ATP01_CRED_PAG RANGE NO NO
Chuyển đổi bảng được phân vùng RANGE thành bảng được phân vùng HASH ONLINE:
SQL> ALTER TABLE ATP01_CRED_PAG MODIFY PARTITION BY HASH (DT_COMPETENCIA) PARTITIONS 3 ONLINE; Table altered.
Hiển thị phương pháp phân vùng mới (HASH):
SQL> select owner, table_name, partitioning_type, autolist, interval, autolist_subpartition from dba_part_tables where table_name = 'ATP01_CRED_PAG'; OWNER TABLE_NAME PARTITION AUT INTERVAL AUT -------- ------------- --------- --- -------- ----- ADMIN ATP01_CRED_PAG HASH NO NO
Hiển thị các phân vùng của bảng:
SQL> select table_name, partition_name, partition_position from dba_tab_partitions where table_name='ATP01_CRED_PAG'; TABLE_NAME PARTITION_NAME PARTITION_POSITION ----------------- ---------------- ------------------ ATP01_CRED_PAG SYS_P621 1 ATP01_CRED_PAG SYS_P622 2 ATP01_CRED_PAG SYS_P623 3 SQL> select count(1) from ATP01_CRED_PAG partition (SYS_P621); COUNT(1) ---------- 2651 SQL> select count(1) from ATP01_CRED_PAG partition (SYS_P622); COUNT(1) ---------- 6604 SQL> select count(1) from ATP01_CRED_PAG partition (SYS_P623); COUNT(1) ---------- 0
Tài liệu tham khảo
Hoạt động bảo trì cho các bảng và chỉ mục được phân vùng. Có tại https://docs.oracle.com/en/database/oracle/oracle-database/18/vldbg/maintenance-partition-tables-indexes.html#GUID-0E7793F7-B38A-427E-846B-7A8651F2A523