Thứ Hai, 5 tháng 7, 2021

Script gather cả Oracle Database

Mục đích: Script gather cả Oracle Database

Script: 
Có thể chạy tay trước, sau đó đặt job chạy lúc 22h hàng ngày

CREATE OR REPLACE PACKAGE BODY TEST_OWNER.pck_gather_table_stats
IS
    p_error         VARCHAR2 (1000);
    p_gather_date_par   DATE := SYSDATE;
    p_gather_date   DATE := SYSDATE;

    PROCEDURE exec_gather_tables
    IS
    BEGIN
        IF (TO_NUMBER (TO_CHAR (SYSDATE, 'dd')) NOT IN(6,16,26)) and (to_number(to_char(sysdate,'hh24')) < 7 or to_number(to_char(sysdate,'hh24')) > 22)
        THEN
            pck_gather_table_stats.gather_partitioned_tables();
        END IF;

        IF (TO_NUMBER(TO_CHAR (SYSDATE, 'dd')) IN(9, 19, 29)) and (to_number(to_char(sysdate,'hh24')) < 7 or to_number(to_char(sysdate,'hh24')) > 22)
        THEN
            pck_gather_table_stats.gather_unpartitioned_tables;

        END IF;
        null;
    END;

    PROCEDURE gather_partitioned_tables
    IS
        CURSOR c_partitioned_tables
        IS
            SELECT   table_owner, table_name, partition_name, last_analyzed,
                        'begin
                                dbms_stats.gather_table_stats
                                (ownname=>''' || TABLE_OWNER || ''',
                                tabname=>''' || table_name || ''',
                                partname=>''' || partition_name || ''',
                                estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE,
                                method_opt => ''FOR ALL COLUMNS SIZE AUTO'',
                                cascade=>true,
                                degree=>10);
                                end;
                            '
                         script
                FROM   all_tab_partitions
               WHERE   table_name NOT LIKE '%$%'
                       AND NVL (last_analyzed, trunc(SYSDATE) - 15) < trunc(sysdate)-1
                       AND NVL(last_analyzed, SYSDATE) > trunc(sysdate)-2
                       and ((length(partition_name) = 12 AND to_date(substr(partition_name,5,8),'YYYYMMDD')<trunc(sysdate)
                       AND to_date(substr(partition_name,5,8),'YYYYMMDD')>trunc(sysdate)-15)
                       or (length(partition_name) =10 AND to_date(substr(partition_name,5,6),'YYYYMM')<trunc(sysdate)
                       AND to_date(substr(partition_name,5,6),'YYYYMM')>=add_months(trunc(sysdate,'month'),-1)))
                        and table_owner in ('TEST_OWNER')
            ORDER BY   table_name, partition_name;

        v_table_name   VARCHAR2 (100);
        v_par_name     VARCHAR2 (100);
    BEGIN
        FOR v_partitioned_tables IN c_partitioned_tables
        LOOP
            IF (TO_NUMBER (TO_CHAR (SYSDATE, 'dd')) NOT IN(0)) and (to_number(to_char(sysdate,'hh24')) < 7 or to_number(to_char(sysdate,'hh24')) > 22)
            THEN
            v_table_name := v_partitioned_tables.table_name;
            v_par_name := v_partitioned_tables.partition_name;

            EXECUTE IMMEDIATE v_partitioned_tables.script;
--            pr_insert_log_gather(v_partitioned_tables.table_owner, v_partitioned_tables.table_name, v_partitioned_tables.partition_name,v_partitioned_tables.script);
            end if;
        END LOOP;
    EXCEPTION
        WHEN OTHERS
        THEN
            null;
    END;

    -- Gather stats for unpartitioned tables
    -- Input:
    -- p_Owner: Owner of tables
    -- p_Ignored_Tables_List: List of Tables that will not be gathered
    -- Output
    -- p_Gathered_Tables: Tables already gathered
    -- p_Error: Errors descriptions(if any), NULL value means no error occurred
    PROCEDURE gather_unpartitioned_tables
    IS
        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   all_tables
               WHERE       partitioned = 'NO'               
                       AND tablespace_name IS NOT NULL
                       AND table_name NOT LIKE '%$%'
                       AND table_name not  like '%XX%'
                       and table_name not  like '%BK%'
                       and owner in ('TEST_OWNER')
                       AND NVL (last_analyzed, SYSDATE - 15) < p_gather_date
            ORDER BY   last_analyzed;

        v_table_name   VARCHAR2 (100);
    BEGIN

        FOR v_tables IN c_tables
        LOOP
            v_table_name := v_tables.table_name;

            EXECUTE IMMEDIATE v_tables.script;
--            pr_insert_log_gather(v_tables.owner, v_tables.table_name, null,v_tables.script);
        END LOOP;
  EXCEPTION
        WHEN OTHERS
        THEN
            null;
    END;

--------------------------------------------------------------------------------
END;
/

Kiểm tra lại sau khi gather:

 ·        Table
·         Bảng partition: (trong TOAD dùng F4 --> partition để check)
select table_name, partition_name, last_analyzed from DBA_TAB_PARTITIONS where table_owner=‘TEST_OWNER’ and table_name like upper(‘TEST_TAB1’)
and trunc(last_analyzed) > sysdate-7
order by last_analyzed desc;

select owner, table_name, partition_name,last_analyzed  from DBA_TAB_STATISTICS where owner=‘TEST_OWNER’ and table_name =‘TEST_TAB1’
and trunc(last_analyzed) > sysdate-7
order by last_analyzed desc;
·         Bảng ko partition:
select owner, table_name,last_analyzed  from dba_tables where owner=‘TEST_OWNER’
--and table_name like upper('TEST_TAB1')
and trunc(last_analyzed) > sysdate-7
order by last_analyzed desc;

select owner, table_name, partition_name,last_analyzed  from DBA_TAB_STATISTICS where owner=‘TEST_OWNER’ and table_name =‘TEST_TAB1’
and trunc(last_analyzed) > sysdate-7
order by last_analyzed desc;
c.       Index
·         Index partition
select index_owner, index_name, partition_name, last_analyzed from dba_ind_partitions
where index_owner=‘TEST_OWNER’
and trunc(last_analyzed) > sysdate-7
order by last_analyzed desc;
·         Index ko partition
select owner,table_name,index_name,num_rows,last_analyzed from dba_indexes
where owner=‘TEST_OWNER’
and trunc(last_analyzed) > sysdate-7
order by last_analyzed desc;
=============================
* 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