Thứ Hai, 10 tháng 5, 2021

Tự động gather các bảng non-partition và partition trên Oracle Database

Mục đích:

+ Gather là việc quan trọng đối với database, dữ liệu statistic bảng phải luôn được cập nhật

+ Oracle có lập lịch hàng ngày gather nhưng hay bị lỗi, bị dừng nếu gặp bảng to dẫn đến các bảng khác không được gather

Hoạt động:

+ Mỗi ngày thực hiện gather các bảng theo danh sách tự động tìm kiếm: bảng nào có DML (insert, update, delete) lớn nhất thì gather trước, bảng ít thay đổi gather sau

+ Thực hiện vào giờ thấp tải, dừng nếu thời gian chạy quá cho phép để không gather vào lúc cao tải

Bước 1: Xây dựng/Test thủ tục

declare
    --p_gather_date DATE := sysdate;
    -- Gather cac bang xac dinh
    CURSOR c_tables
    IS          
SELECT   owner, table_name, last_analyzed,
                        'begin
                                dbms_stats.gather_table_stats
                                (ownname=>''' || owner || ''',
                                tabname=>''' || table_name || ''',                               
                                estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE,
                                method_opt => ''FOR ALL COLUMNS SIZE AUTO'',
                                cascade=>true,
                                degree=>10);
                                end;
                            '
                         script
                FROM   dba_tab_statistics
               where owner='BINH_OWNER' and table_name in ('TAB1','TAB2') 
    -- and table_name='TAB1' 
    --and num_rows<10000000
    and stale_stats='YES';
    
    CURSOR c_tab_partitions
    IS          
SELECT   table_name, partition_name, last_analyzed,num_rows,
           'begin dbms_stats.gather_table_stats(ownname =>'''||owner||''',tabname =>'''||table_name||''',partname'||'=>'''
         || PARTITION_NAME
         || ''',granularity=>''partition'',cascade=> TRUE,force=>TRUE,estimate_percent=>10,'
         || 'method_opt=>''FOR ALL COLUMNS SIZE AUTO'',degree => 8); end;'
         script
    FROM   dba_tab_statistics
    where  
    (
        (owner='BINH_OWNER'
          and table_name in ('TAB1_PAR','','TAB2_PAR','TAB3_PAR'))      
        or
        (owner='BINH2_OWNER'
        and table_name in ('TAB4_PAR') 
        ) 
    )
    -- and table_name='TAB1_PAR' 
    --and num_rows<10000000
    and partition_name like '%2021%'
    and stale_stats='YES';
           
    v_table_name   VARCHAR2 (100);
    v_partition_name varchar2(100);
    v_count number :=0;
BEGIN
        
        FOR c1 IN c_tables
        LOOP
            --v_table_name := c1.table_name;
            EXECUTE IMMEDIATE c1.script;
            dbms_output.put_line(c1.script);
            v_count := v_count+1;
        END LOOP;
        
        for c2 in c_tab_partitions
        loop
            --v_partition_name := c2.partition_name;
            --dbms_output.put_line('Start:'||c2.script);
            EXECUTE IMMEDIATE c2.script;
            --dbms_output.put_line('Complted:'||c2.script);
            v_count := v_count+1;
        end loop;
        --dbms_output.put_line(v_count);
  EXCEPTION
        WHEN OTHERS
        THEN
NULL;
END;

Bước 2: Tạo Scheduler Job trên SYS để chạy tự động
Job này định kỳ 00h sáng chạy hoặc 4h-8h chạy 1 lần tùy nghiệp vụ cần thông tin realtime hay không.


Bước 3:  Giám sát các job định kỳ chạy trên Run Log của Scheduler Job



=============================
* 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
hoặc
https://bit.ly/oaz_fp
=============================
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 dataguard, oracle goldengate, oracle weblogic, oracle exadata, hoc solaris, hoc linux, hoc aix

ĐỌC NHIỀU

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