Đầu tiên bạn tạo file sql để thực thi kiểm tra thông tin:
cd
vi add_datafile_if_needed.sql
## nội dung bên dưới
DECLARE— tạo con trỏ duyệt qua các bản ghi nếu tồn tại khi thực hiện truy vấn bên dướiCURSOR c_tablespace IS— truy vấn nếu dung lượng sử dụng gần đạt dung lượng tổng thì list ra: 80%— tablespace phải ở chế độ AUTOEXTEND— DATABASE phải đặt ở chế độ OMF để không cần thiết lập tên và đường dẫn của datafile bên dưới nhéSELECTdf.tablespace_name,df.Max_size AS DUNG_LUONG_TONG,df.total_space_mb DUNG_LUONG_DA_CAP,NVL(fs.free_space_mb, 0) AS DUNG_LUONG_CHUA_SU_DUNG,df.total_space_mb – NVL(fs.free_space_mb, 0) AS DUNG_LUONG_DA_SU_DUNG,ROUND(((df.total_space_mb – NVL(fs.free_space_mb, 0)) / df.total_space_mb) * 100, 2) AS pct_used,ROUND(((df.total_space_mb – NVL(fs.free_space_mb, 0)) / df.Max_size) * 100, 2) AS pct_used_TotalFROM(SELECTtablespace_name,ROUND(SUM(bytes) / 1024 / 1024,0) AS total_space_mb,ROUND(sum(maxbytes/1024/1024),0) AS Max_sizeFROMdba_data_filesGROUP BYtablespace_name) dfLEFT JOIN(SELECTtablespace_name,ROUND(SUM(bytes) / 1024 / 1024,0) AS free_space_mbFROMdba_free_spaceGROUP BYtablespace_name) fsONdf.tablespace_name = fs.tablespace_nameWHERE ROUND(((df.total_space_mb – NVL(fs.free_space_mb, 0)) / df.Max_size) * 100, 2) >=80ORDER BYpct_used DESC;— biến tham số cho viêc add thêm datafilev_tablespace_name VARCHAR2(30);–v_new_datafile_name VARCHAR2(200);v_sql VARCHAR2(1000);BEGINFOR ts IN c_tablespace LOOPv_tablespace_name := ts.tablespace_name;— v_new_datafile_name := ‘/path/to/datafiles/’ || v_tablespace_name || ‘_’ || TO_CHAR(SYSDATE, ‘YYYYMMDDHH24MISS’) || ‘.dbf’;v_sql := ‘ALTER TABLESPACE ‘ || v_tablespace_name || ‘ ADD DATAFILE SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED’;EXECUTE IMMEDIATE v_sql;DBMS_OUTPUT.PUT_LINE(‘Added new datafile to tablespace ‘ || v_tablespace_name);END LOOP;END;/
Tiếp theo tạo file shell để thực thi trong crontab
cd
vi add_datafile_auto80.sh
#!/bin/bashORACLE_SID=your_sidORACLE_HOME=/path/to/your/oracle_homeexport ORACLE_SID ORACLE_HOMEsqlplus -s / as sysdba <<EOF@/path/to/add_datafile_if_needed.sqlEXITEOF
Cấu hình crontab để chạy tự động:
crontab -e
0 * * * * /path/to/add_datafile_auto80.sh
=> Các bạn thay thông tin đường dẫn cho đúng và thực hiện nhé