Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Tôi có nên phân vùng / phân vùng con bảng của mình không?

Bạn có thể thử theo cách này:sử dụng INTERVAL để nói với oracle để tạo phân vùng tự động. Bạn phải xác định cột (số hoặc ngày) và một khoảng thời gian (trong ví dụ của tôi là 1 tháng). Oracle sẽ đưa vào cùng một phân vùng tất cả các hàng trong cùng một khoảng thời gian (trong trường hợp này là trong cùng một tháng). Nếu phân vùng không tồn tại sẽ được tạo.

create table log(
       id_dispositive    number,
       date    date,
       status  number,
       type    number
)
partition by range (date)                              
interval (numtoyminterval(1,'MONTH'))(
   partition p0701 values less than (to_date('2007-02-01','yyyy-mm-dd'))
);

Điều tương tự cũng có thể được thực hiện với cột loại. Thông tin thêm: http://www.oracle.com/ technetwork / posts / sql / 11g-partitioning-084209.html .

Mọi phân vùng đều có thể được tạo phân vùng con bằng khóa TEMPLATE.

create table log(
       id_dispositive    number,
       date    date,
       status  number,
       type    number
)
partition by range (date) interval (numtoyminterval(1,'MONTH'))
subpartition by list (type)  
subpartition TEMPLATE (
    SUBPARTITION types1 VALUES (1, 2) TABLESPACE tbs_1,
    SUBPARTITION types2 VALUES (3, 4) TABLESPACE tbs_1
)                          
(
   partition p0701 values less than (to_date('2007-02-01','yyyy-mm-dd'))
);

Trong trường hợp này, bạn không thể tạo một phân vùng con tự động, nếu một loại mới sẽ được thêm vào, bạn phải chạy một trạng thái bảng thay thế. Tại đây thêm thông tin; https://docs.oracle.com/cd /B28359_01/server.111/b32024/part_admin.htm#i1006655 .

Trong ví dụ của bạn:

create table prova_log(
       id_dispositive    number,
       type       number,
       date_verification    date,
       status  number
)
partition by range (date_verification) interval (numtoyminterval(1,'MONTH'))
subpartition by list (type)  
subpartition TEMPLATE (
    SUBPARTITION type1 VALUES (1),
    SUBPARTITION type2 VALUES (2),
    SUBPARTITION type3 VALUES (3),
    SUBPARTITION type4 VALUES (4)
)                          
(
   partition p0816 values less than (to_date('01/09/2016','dd/mm/yyyy'))
);

Nếu bạn cố gắng chèn:

insert into prova_log values (1,1,TO_DATE('10/10/2016','dd/mm/yyyy'),1);

bạn sẽ thấy 2 phân vùng trên bảng của mình.

Bây giờ tôi đã thử nghiệm nó!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle Tạo bảng AS và nhận xét bảng và nhận xét cột

  2. Làm cách nào để đóng Oracle DbLinks trong JDBC với nguồn dữ liệu XA và các giao dịch để tránh lỗi ORA-02020?

  3. Cách xử lý việc mất độ chính xác trên các kiểu số JDBC do các hàm nhóm

  4. Oracle SQL - Làm thế nào để có được số lượng riêng biệt cho mỗi cột?

  5. thực thi một hàm trong sql plus