Thứ Bảy, 12 tháng 12, 2020

Tự động Add partition cho bảng partition trong Oracle Database

Vấn đề: Đối với các bảng dữ liệu có đánh partition theo tháng hoặc theo ngày, người DBA thường xuyên phải đánh partition, nếu quên dữ liệu insert vào sẽ bị lỗi và có thể dẫn đến lỗi toàn hệ thống.

– Giải pháp: Để giải quyết vấn đề trên ta thường viết thủ tục đánh partition tự động cho bảng và đặt scheduler để chạy định kỳ. Việc đánh partition không ảnh hưởng tới các thao tác insert, select, update, delete.

– Ý tưởng: Để đảm bảo có thể đánh partition một cách tự động ta phải đặt tên partition theo một số quy ước:

+ Trong tên partition phải chứa thông tin về ngày tháng của dữ liệu

+ Phần đầu của tên partition phải giống nhau

– Dựa vào thông tin partition trong tên ta xác định thời gian cần đánh partition tiếp theo

Thủ tục thực hiện:

1. Tạo thủ tục

create PROCEDURE proc_create_partition
IS
   CURSOR c_partition
   IS
      SELECT   owner,object_name,
               MAX (SUBSTR (subobject_name,
                            LENGTH (subobject_name) - 5,
                            LENGTH (subobject_name)
                           )
                   ) AS sub_partition
          FROM dba_objects
         WHERE owner='APP_OWNER' and object_type = 'TABLE PARTITION'
           AND object_name NOT LIKE 'BIN$%'
          --- AND object_name NOT IN ('TAB1')
      GROUP BY object_name;
 
   v_loop_str   VARCHAR (3000);
   v_date       DATE;
   p_error      VARCHAR (2000);
BEGIN
   FOR v_partition IN c_partition
   LOOP
      v_date := TO_DATE (v_partition.sub_partition, 'yyMMdd');
 
      WHILE v_date <=
                ADD_MONTHS (TO_DATE (v_partition.sub_partition, 'yyMMdd'), 1)
      LOOP
         BEGIN
            v_date := v_date + 1;
            v_loop_str := '';
            v_loop_str :=
                  'alter table ' || v_partition.owner ||'.'
               || v_partition.object_name
               || ' add partition DATA20'
               || TO_CHAR (v_date, 'yyMMdd')
               || ' values less than (to_date(''20'
               || TO_CHAR (v_date, 'yyMMdd')
               || ''',''yyyyMMdd''))';
            DBMS_OUTPUT.put_line (v_loop_str);
 
            EXECUTE IMMEDIATE v_loop_str;
 
            v_loop_str := '';
         EXCEPTION
            WHEN OTHERS
            THEN
               p_error := 'Loi xay ra khi them partition: ' || SQLERRM;
               DBMS_OUTPUT.put_line (p_error);
         END;
      END LOOP;
   END LOOP;
END;

2. Tạo scheduler job:

Vào Scheduler job tạo job chạy thủ tục trên hàng ngày lúc 01h00

=============================
* 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/Zalo: 0902912888
👨 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

=============================
Tự động Add partition cho bảng partition trong Oracle Database, oracle tutorial, 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,sql tutorial, khóa học pl/sql tutorial, 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 RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

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