Thứ Bảy, 19 tháng 3, 2022

Thủ tục add datafile TỰ ĐỘNG trên Oracle Database File system OMF

Mục đích: Thủ tục add datafile TỰ ĐỘNG trên Oracle Database File system OMF

--BƯỚC 1: TẠO CÁC BẢNG LƯU LOG:
CREATE TABLE binhtv.dbaviet_LOG_OP
    (id                             NUMBER,
    msg                            VARCHAR2(1000 BYTE),
    event_datetime                 TIMESTAMP (6) DEFAULT sysdate,
    type                           VARCHAR2(1000 BYTE),
    note                           VARCHAR2(1000 BYTE))
  PCTFREE     10
  INITRANS    1
  MAXTRANS    255
  TABLESPACE  users
  STORAGE   (
    INITIAL     65536
    NEXT        1048576
    MINEXTENTS  1
    MAXEXTENTS  2147483645
  )
  NOCACHE
  MONITORING
  NOPARALLEL
  LOGGING
/

CREATE SEQUENCE binhtv.dbaviet_LOG_OP_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER;

CREATE TABLE binhtv.dbaviet_LOG_JOBS
(
  ID          NUMBER,
  NAME        VARCHAR2(4000 BYTE),
  STATUS      VARCHAR2(50 BYTE),
  EVENT_DATE  DATE                              DEFAULT sysdate,
  NOTE        VARCHAR2(2000 BYTE)
)

TABLESPACE USERS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
MONITORING; 

--DROP SEQUENCE binhtv.dbaviet_LOG_JOBS_SEQ; 

CREATE SEQUENCE binhtv.dbaviet_LOG_JOBS_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER;
  
select * from binhtv.dbaviet_LOG_OP;

select binhtv.dbaviet_LOG_OP_SEQ.nextval from dual;

--BƯỚC 2: TẠO THỦ TỤC TRÊN SYS
create   or replace PROCEDURE sys.auto_extend_space
    IS
        v_err varchar2(1000):='';
       free_space_low_level   NUMBER := 1000; 
           CURSOR c_free_space                 -- get tablespace free left 200MB.
        IS
             SELECT
              a.tablespace_name,
               ROUND (a.bytes_alloc / 1024 / 1024) megs_alloc,
               ROUND (NVL (b.bytes_free, 0) / 1024 / 1024) megs_free,
               ROUND (maxbytes / 1048576) MAX,
               ROUND (maxbytes / 1048576)-ROUND ( (a.bytes_alloc - NVL (b.bytes_free, 0)) / 1024 / 1024) free_tbs
            FROM (  SELECT f.tablespace_name,
                         SUM (f.bytes) bytes_alloc,
                         SUM (
                            DECODE (f.autoextensible,
                                    'YES', f.maxbytes,
                                    'NO', f.bytes))
                            maxbytes
                    FROM dba_data_files f
                GROUP BY tablespace_name) a,
               (  SELECT f.tablespace_name, SUM (f.bytes) bytes_free
                    FROM dba_free_space f
                GROUP BY tablespace_name) b
            WHERE a.tablespace_name = b.tablespace_name(+)
--            AND (LOWER (a.tablespace_name) IN
--                                ('data','indx',
--                                 'indx' || TO_CHAR (SYSDATE, 'YYYY'),
--                                 'indx' || TO_CHAR (SYSDATE+30, 'YYYY'),
--                                 'indx' || TO_CHAR (SYSDATE, 'YYYYMM'),
--                                 'indx' || TO_CHAR (SYSDATE+30, 'YYYYMM'),
--                                 'data' || TO_CHAR (SYSDATE, 'YYYY'),
--                                 'data' || TO_CHAR (SYSDATE+30, 'YYYY'),
--                                 'data' || TO_CHAR (SYSDATE, 'YYYYMM'),
--                                 'data' || TO_CHAR (SYSDATE+30, 'YYYYMM')))
            --AND ROUND (maxbytes / 1048576)-ROUND ( (a.bytes_alloc - NVL (b.bytes_free, 0)) / 1024 / 1024) < 500
            order by ROUND (maxbytes / 1048576)-ROUND ( (a.bytes_alloc - NVL (b.bytes_free, 0)) / 1024 / 1024) desc;

        v_sql           VARCHAR2 (2000);
        msg             VARCHAR2 (1000);
        next_datafile   VARCHAR2 (1000);
    BEGIN
        insert into binhtv.dbaviet_log_jobs (id,name,status,event_date, note)
            values(binhtv.dbaviet_log_jobs_seq.nextval,'Starting sys.dba_op.extend_space',1,sysdate,'binhtv.dbaviet_log_jobs, binhtv.dbaviet_log_op');
        commit;
        FOR v_free_space IN c_free_space                 -- tablespace < 200MB
        LOOP
            BEGIN
                v_sql :=
                       'ALTER TABLESPACE '
                    || v_free_space.tablespace_name
                    || ' ADD DATAFILE  size 10m autoextend on next 1m';
                --DBMS_OUTPUT.put_line (v_sql);
                EXECUTE IMMEDIATE v_sql;               
                insert into binhtv.dbaviet_log_op (msg, type, note) values (v_sql, 'df','Add a new datafile');
                commit;
            EXCEPTION
                WHEN OTHERS
                THEN
                    null;
            END;
        END LOOP;

        insert into binhtv.dbaviet_log_jobs (id,name,status,event_date, note)
            values(binhtv.dbaviet_log_jobs_seq.nextval,'Completed sys.dba_op.extend_space',1,sysdate,'binhtv.dbaviet_log_jobs');
        commit;
   EXCEPTION
        WHEN others THEN
            v_err := substr(SQLERRM,1,200);        
            insert into binhtv.dbaviet_log_jobs (id,name,status,event_date, note)
                values(binhtv.dbaviet_log_jobs_seq.nextval,'Error sys.dba_op.extend_space',-1,sysdate,'Error sys.dba_op.extend_spac, '||v_err);
            commit;
   END;

--BƯỚC 3: Tạo job từ sched.Jobs: 10 phút chạy 1 lần

--Vào giao diện hoặc chạy câu lệnh
BEGIN
  SYS.DBMS_SCHEDULER.DROP_JOB
    (job_name  => 'SYS.AUTO_ADD_DF');
END;
/

BEGIN
  SYS.DBMS_SCHEDULER.CREATE_JOB
    (
       job_name        => 'SYS.AUTO_ADD_DF'
      ,start_date      => TO_TIMESTAMP_TZ('2022/03/18 21:36:32.131540 +07:00','yyyy/mm/dd hh24:mi:ss.ff tzh:tzm')
      ,repeat_interval => 'FREQ=HOURLY;INTERVAL=1;BYMINUTE=0;BYSECOND=0'
      ,end_date        => NULL
      ,job_class       => 'DEFAULT_JOB_CLASS'
      ,job_type        => 'STORED_PROCEDURE'
      ,job_action      => 'SYS.AUTO_EXTEND_SPACE'
      ,comments        => 'Tự động add datafile cho tablespace'
    );
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'SYS.AUTO_ADD_DF'
     ,attribute => 'RESTARTABLE'
     ,value     => FALSE);
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'SYS.AUTO_ADD_DF'
     ,attribute => 'LOGGING_LEVEL'
     ,value     => SYS.DBMS_SCHEDULER.LOGGING_OFF);
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL
    ( name      => 'SYS.AUTO_ADD_DF'
     ,attribute => 'MAX_FAILURES');
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL
    ( name      => 'SYS.AUTO_ADD_DF'
     ,attribute => 'MAX_RUNS');
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'SYS.AUTO_ADD_DF'
     ,attribute => 'STOP_ON_WINDOW_CLOSE'
     ,value     => FALSE);
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'SYS.AUTO_ADD_DF'
     ,attribute => 'JOB_PRIORITY'
     ,value     => 3);
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL
    ( name      => 'SYS.AUTO_ADD_DF'
     ,attribute => 'SCHEDULE_LIMIT');
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'SYS.AUTO_ADD_DF'
     ,attribute => 'AUTO_DROP'
     ,value     => FALSE);
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'SYS.AUTO_ADD_DF'
     ,attribute => 'RESTART_ON_RECOVERY'
     ,value     => FALSE);
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'SYS.AUTO_ADD_DF'
     ,attribute => 'RESTART_ON_FAILURE'
     ,value     => FALSE);
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'SYS.AUTO_ADD_DF'
     ,attribute => 'STORE_OUTPUT'
     ,value     => TRUE);

  SYS.DBMS_SCHEDULER.ENABLE
    (name                  => 'SYS.AUTO_ADD_DF');
END;
/

--BƯỚC 4: MONITOR JOBS:
-- Check job chạy lâu nhất, job chạy gần nhất cách đây 60 ngày
select owner,job_name,job_creator,state,job_type,last_run_duration,job_action,schedule_type,start_date,repeat_interval,last_start_date,next_run_date from dba_scheduler_jobs
where    --owner not  like 'SYS'
--and 
state!='DISABLED'
--and last_start_date > sysdate-60
order by last_run_duration desc;

SELECT * FROM dba_scheduler_running_jobs WHERE job_name = 'AUTO_ADD_DF';

SELECT * FROM dba_scheduler_jobs WHERE job_name = 'AUTO_ADD_DF';

SELECT * FROM dba_scheduler_job_log WHERE job_name = 'AUTO_ADD_DF';

--Hoặc kiểm tra JOB của schema khác

 SELECT * FROM user_scheduler_jobs WHERE job_name = 'AUTO_ADD_DF';

 SELECT * FROM user_scheduler_job_log WHERE job_name = 'AUTO_ADD_DF';


--Hoặc 
select * from binhtv.dbaviet_log_op;

select * from binhtv.dbaviet_log_jobs ;

=============================
* 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