Thứ Hai, 20 tháng 9, 2021

Tự động drop các partition cũ trong Oracle Database

Mục đích: Tự động truncate, drop các partition cũ, giúp Oracle Database xoay vòng, có dung lượng để hoạt động, nếu DB nào cũng tự động xoay vòng được thì DBA sẽ rất nhàn.

Thực hiện đặt job ở scheduler job xóa hàng ngày vào 00h đêm như sau:

declare
    v_date date:=sysdate;
    date_num1t        INT := 31;                         --  Bảng lưu 1 tháng
    date_num2t        INT := 62;                         --  Bảng lưu 2 tháng
    date_num3t        INT := 93;                         -- Bảng lưu 3 tháng
    date_num6t        INT := 186;                       -- Bảng lưu 6 tháng
   date_num4        INT := 365;                     -- Bảng lưu 1 năm

    CURSOR c_partition
    IS
        SELECT   table_name, partition_name
          FROM   dba_tab_partitions
         WHERE  owner='APP1'
  (sysdate - to_date(SUBSTR(partition_name,length(partition_name)-7,8),'yyyy/mm/dd') > date_num1t
                    AND table_name IN ('TAB1'))
                 OR (sysdate - to_date(SUBSTR(partition_name,5,6),'yyyymm') > date_num2t
                    AND table_name IN ('TAB2'))
                 OR (sysdate - to_date(SUBSTR(partition_name,length(partition_name)-7,8),'yyyy/mm/dd') > date_num3t
                    AND table_name IN ('TAB3'))
                 OR (sysdate - to_date(SUBSTR(partition_name,length(partition_name)-7,8),'yyyy/mm/dd') > date_num6t
                    AND table_name IN ('TAB4'))
                 OR (sysdate - to_date(SUBSTR(partition_name,5,6),'yyyymm') > date_num6t
                    AND table_name IN ('TAB5'))
                 OR (sysdate - to_date(SUBSTR(partition_name,length(partition_name)-7,8),'yyyy/mm/dd') > 366
                    AND table_name IN ('TAB6','TAB7','TAB8'));
   
    cursor c_test
    is
        select *
        from dba_segments where segment_name in ('TEST')
        and to_date(substr(partition_name,5,6),'yyyymm')<to_date(to_char(sysdate-30,'yyyymm'),'yyyymm') and partition_name not like 'SYS%';  -- lưu 30 ngày        
    
        
    v_sql_command   VARCHAR2 (2400);

BEGIN
  

    FOR v_data1 IN c_partition
    LOOP
        BEGIN
            EXECUTE IMMEDIATE   ' Alter table '
                             || v_data1.table_name
                             || ' drop partition '
                             || v_data1.partition_name;
                             
            dbms_output.put_line(' Alter table '
                             || v_data1.table_name
                             || ' drop partition '
                             || v_data1.partition_name);               
        EXCEPTION
            WHEN OTHERS
            THEN
                DBMS_OUTPUT.put_line (SQLERRM);
        END;
    END LOOP; 
  
    
    FOR v_data3 IN c_test
    LOOP
        BEGIN
            EXECUTE IMMEDIATE    'alter table ' || v_data3.owner ||'.' || v_data3.segment_name || ' truncate partition ' || v_data3.partition_name ;
            dbms_output.put_line('alter table ' || v_data3.owner ||'.' || v_data3.segment_name || ' truncate partition ' || v_data3.partition_name );
            EXECUTE IMMEDIATE    'alter table ' || v_data3.owner ||'.' || v_data3.segment_name || ' drop partition ' || v_data3.partition_name ;
            dbms_output.put_line('alter table ' || v_data3.owner ||'.' || v_data3.segment_name || ' drop partition ' || v_data3.partition_name );
        EXCEPTION
            WHEN OTHERS
            THEN
                DBMS_OUTPUT.put_line (SQLERRM);
        END;
    END LOOP;  
    
END;

Hy vọng hữu í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 weblogic, middleware, hoc solaris, hoc linux, hoc aix, unix, oracle oca, oracle ocp, oracle ocm

ĐỌC NHIỀU

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