Tự động add datafile vào Tablespace nếu dung lượng dưới 80%

Đầ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ưới
CURSOR 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é
SELECT
df.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_Total
FROM
(SELECT
tablespace_name,
ROUND(SUM(bytes) / 1024 / 1024,0) AS total_space_mb,
ROUND(sum(maxbytes/1024/1024),0) AS Max_size
FROM
dba_data_files
GROUP BY
tablespace_name) df
LEFT JOIN
(SELECT
tablespace_name,
ROUND(SUM(bytes) / 1024 / 1024,0) AS free_space_mb
FROM
dba_free_space
GROUP BY
tablespace_name) fs
ON
df.tablespace_name = fs.tablespace_name
WHERE     ROUND(((df.total_space_mb – NVL(fs.free_space_mb, 0)) / df.Max_size) * 100, 2) >=80
ORDER BY
pct_used DESC;
— biến tham số cho viêc add thêm datafile
v_tablespace_name VARCHAR2(30);
    –v_new_datafile_name VARCHAR2(200);
    v_sql VARCHAR2(1000);
BEGIN
    FOR ts IN c_tablespace LOOP
        v_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/bash
ORACLE_SID=your_sid
ORACLE_HOME=/path/to/your/oracle_home
export ORACLE_SID ORACLE_HOME
sqlplus -s / as sysdba <<EOF
@/path/to/add_datafile_if_needed.sql
EXIT
EOF
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é

Datalinks.vn

Hello các bạn, tôi là Dương Nguyễn (DuoDBA - https://www.youtube.com/@DuoDBA) tác giả của blog này. Mong muốn được chia sẻ kiến thức và kinh nghiệm về cơ sở dữ liệu với những người đam mê và quan tâm đến lĩnh vực này. Tôi có tổ chức các khoá Coaching về #OracleDatabase và luyện thi #OCP thường xuyên, các bạn muốn có người đồng hành thì alo tôi nhé. Call/Zalo: 0765 871 888. Thanks you !.....
0 0 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest

0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận