Chủ Nhật, 17 tháng 4, 2022

Tạo composite partition theo list và subpartition theo range

Mục đích: Tạo bảng partition theo trường status gộp và subpartition theo trường month, chỉ 1 số partition theo status mới cần tạo subpartition do dữ liệu nhỏ.

Chi tiết thủ tục

--1.TẠO BẢNG

--drop table app_owner.tab1_new;

CREATE TABLE app_owner.tab1_new
(
   tab1_ID        NUMBER,
  INSERT_DATE             DATE,
  REP_CUST_ID   number;
  INVOICE_ID              NUMBER(10)            NOT NULL,
  CUST_ID                 NUMBER(10)            NOT NULL,
  EINV_ID number,  
  MONTH                   DATE                  NOT NULL,
  STA_DATE                DATE,
  END_DATE                DATE,
  TAX                     NUMBER(3),  
  PAYMENT_AMOUNT_VAT      NUMBER(15,2),
  STATUS                  NUMBER,
  DESCRIPTION             VARCHAR2(4000 BYTE)
)
NOCOMPRESS 
TABLESPACE DATA
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            BUFFER_POOL      DEFAULT
           )
LOGGING
PARTITION BY LIST  (STATUS)
SUBPARTITION BY RANGE (month)
(  
   PARTITION P03 VALUES ('0','3')
    LOGGING
    NOCOMPRESS 
    TABLESPACE DATA
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                BUFFER_POOL      DEFAULT
               ),
   PARTITION P16 VALUES ('1','6')
    LOGGING
    NOCOMPRESS 
    TABLESPACE DATA
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                BUFFER_POOL      DEFAULT
               ),  
   PARTITION P5 VALUES ('5')
    LOGGING
    NOCOMPRESS 
    TABLESPACE DATA
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                BUFFER_POOL      DEFAULT
               ),                                              
  PARTITION P2 VALUES ('2')
    LOGGING
    NOCOMPRESS 
    TABLESPACE DATA
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                BUFFER_POOL      DEFAULT
               )
  (  
      SUBPARTITION data2020 VALUES LESS THAN (TO_DATE('01-01-2021', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data2021 VALUES LESS THAN (TO_DATE('01-01-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202201 VALUES LESS THAN (TO_DATE('01-02-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202202 VALUES LESS THAN (TO_DATE('01-03-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202203 VALUES LESS THAN (TO_DATE('01-04-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202204 VALUES LESS THAN (TO_DATE('01-05-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202205 VALUES LESS THAN (TO_DATE('01-06-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202206 VALUES LESS THAN (TO_DATE('01-07-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202207 VALUES LESS THAN (TO_DATE('01-08-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202208 VALUES LESS THAN (TO_DATE('01-09-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202209 VALUES LESS THAN (TO_DATE('01-10-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202210 VALUES LESS THAN (TO_DATE('01-11-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202211 VALUES LESS THAN (TO_DATE('01-12-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202212 VALUES LESS THAN (TO_DATE('01-01-2023', 'DD-MM-YYYY')) TABLESPACE DATA
    ),   
  PARTITION P4 VALUES ('4')
    LOGGING
    NOCOMPRESS 
    TABLESPACE DATA
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                BUFFER_POOL      DEFAULT
               )
    (  
      SUBPARTITION data2020_ VALUES LESS THAN (TO_DATE('01-01-2021', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data2021_ VALUES LESS THAN (TO_DATE('01-01-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202201_ VALUES LESS THAN (TO_DATE('01-02-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202202_ VALUES LESS THAN (TO_DATE('01-03-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202203_ VALUES LESS THAN (TO_DATE('01-04-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202204_ VALUES LESS THAN (TO_DATE('01-05-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202205_ VALUES LESS THAN (TO_DATE('01-06-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202206_ VALUES LESS THAN (TO_DATE('01-07-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202207_ VALUES LESS THAN (TO_DATE('01-08-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202208_ VALUES LESS THAN (TO_DATE('01-09-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202209_ VALUES LESS THAN (TO_DATE('01-10-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202210_ VALUES LESS THAN (TO_DATE('01-11-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202211_ VALUES LESS THAN (TO_DATE('01-12-2022', 'DD-MM-YYYY')) TABLESPACE DATA,
      SUBPARTITION data202212_ VALUES LESS THAN (TO_DATE('01-01-2023', 'DD-MM-YYYY')) TABLESPACE DATA
    ),    
  PARTITION PM VALUES (DEFAULT)
    LOGGING
    NOCOMPRESS 
    TABLESPACE DATA
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                BUFFER_POOL      DEFAULT
               ) 
)
NOCACHE
MONITORING
ENABLE ROW MOVEMENT;

--2.Đổi tên bảng hiện tại đang chạy thành history

--27s
alter table app_owner.tab1 rename to tab1_history;

Có thể gặp lỗi như bên dưới:
--ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired

Ta phải Kill lock đi theo câu lệnh, xác định đúng INST_ID để kill vào đúng node cần kill (nhầm co s 
SELECT /*lock table*/  'kill -9 ' || spid a, a.INST_ID,A.SQL_ID,A.SID, A.SERIAL#, a.USERNAME, a.STATUS,A.SCHEMANAME,a.OSUSER,A.MACHINE,A.PROGRAM,A.TYPE,A.LOGON_TIME,BACKGROUND
FROM gv$session a, gv$process b 
WHERE b.addr = a.paddr   
AND a.inst_id=b.inst_id 
--and b.inst_id=3
AND (b.inst_id, a.sid) in
(SELECT /*+ parallel(8)*/ s.inst_id,s.sid
FROM gv$locked_object v, dba_objects d,
gv$lock l, gv$session s
WHERE v.object_id = d.object_id
AND (v.object_id = l.id1)
AND v.session_id = s.sid
and object_name=upper('tab1'))
--and type='USER'
--ORDER BY username, session_id;

--3.Đổi tên bảng mới về bảng product

alter table app_owner.tab1_new rename to tab1;

--4.Insert dữ liệu vào bảng mới

insert/*+ append nologging parallel(a,8) */ into app_owner.tab1  a
select /*+ parallel(b,8) */ * from app_owner.tab1_history b;

commit;

--5.Tao lại index

create index app_owner.tab1_NEW_I1 on app_owner.tab1(tab1_ID) tablespace INDX local parallel 8 online;
alter index app_owner.tab1_NEW_I1 noparallel;
create index app_owner.tab1_NEW_I2 on app_owner.tab1(CUST_ID)  tablespace INDX local parallel 8 online;
alter index app_owner.tab1_NEW_I2 noparallel;
create index app_owner.tab1_NEW_I3 on app_owner.tab1(REP_CUST_ID)  tablespace INDX local parallel 8 online;
alter index app_owner.tab1_NEW_I3 noparallel;
create index app_owner.tab1_NEW_I5 on app_owner.tab1(EINV_ID)  tablespace INDX local parallel 8 online;
alter index app_owner.tab1_NEW_I5 noparallel;
create index app_owner.tab1_I6 on app_owner.tab1(INVOICE_ID)  tablespace INDX local parallel 8 online;
alter index app_owner.tab1_I6 noparallel;

--6.Gahter

BEGIN
  SYS.DBMS_STATS.GATHER_TABLE_STATS (
     OwnName           => 'app_owner'
    ,TabName           => 'tab1'
    ,Estimate_Percent  => 10
    ,Method_Opt        => 'FOR ALL COLUMNS SIZE 1'
    ,Degree            => 16
    ,Cascade           => TRUE
    ,No_Invalidate  => FALSE);
END;
/

Hy vọng giúp ích cho bạn.
=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile: 0902912888
⚡️ Skype: tranbinh48ca
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: http://bit.ly/ytb_binhoraclemaster
👨 Tiktok: https://www.tiktok.com/@binhoraclemaster?lang=vi
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhoracle
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,khóa học pl/sql, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, middleware, hoc solaris, hoc linux, hoc aix, unix, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master