Bước 1: Tạo package sau:
CREATE PACKAGE sys.dba_operations
IS
PROCEDURE extend_space;
FUNCTION get_next_datafile_name (p_ts_name VARCHAR2) RETURN VARCHAR2;
END; -- Package spec
CREATE PACKAGE BODY sys.dba_operations
IS
free_space_low_level NUMBER := 20000; --20GB
p_mountpoint NUMBER:= 8; -- 8 mount point cap datafile
FUNCTION get_next_datafile_name (p_ts_name VARCHAR2)
RETURN VARCHAR2
IS
v_sequence NUMBER;
v_next_sequence_string VARCHAR2 (4);
v_curr_sequence_string VARCHAR2 (4);
TYPE fileloc_table_type IS TABLE OF VARCHAR2 (1500)
INDEX BY BINARY_INTEGER;
file_table fileloc_table_type;
p_loc1 NUMBER;
p_loc2 NUMBER;
p_file VARCHAR2 (500);
p_ind NUMBER;
BEGIN
file_table (0) := '/u02/oracle/data/dbaviet/';
file_table (1) := '/u03/oracle/data/dbaviet/';
file_table (2) := '/u04/oracle/data/dbaviet/';
file_table (3) := '/u05/oracle/data/dbaviet/';
file_table (4) := '/u06/oracle/data/dbaviet/';
file_table (5) := '/u07/oracle/data/dbaviet/';
file_table (6) := '/u08/oracle/data/dbaviet/';
file_table (7) := '/u09/oracle/data/dbaviet/';
select max(to_number(substr(file_name,instr(file_name,'_',-1)+1, instr(file_name,'.',-1)-instr(file_name,'_',-1)))) +1
into v_next_sequence_string
from dba_data_files where tablespace_name=p_ts_name;
p_ind := MOD (v_next_sequence_string, p_mountpoint); -- so mount point cap datafile
v_next_sequence_string := lpad(v_next_sequence_string, 3, '0'); --do dai so la 3, vi du 003.dbf
RETURN file_table (p_ind)|| lower(p_ts_name) ||
'_' || v_next_sequence_string ||'.dbf';
END;
PROCEDURE extend_space
IS
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',
'data' || to_char(sysdate,'YYYY'),'indx' || to_char(sysdate,'YYYY'),
'data' || to_char(sysdate,'YYYYMM'),
'indx' || to_char(sysdate,'YYYYMM'),
'lob','users'
--'data' || to_char(sysdate-30,'YYYYMM'),
--'indx' || to_char(sysdate-30,'YYYYMM'),
--'undotbs1','undotbs2','undotbs3','undotbs4'
)
)
AND ROUND (maxbytes / 1048576)-ROUND ( (a.bytes_alloc - NVL (b.bytes_free, 0)) / 1024 / 1024) < free_space_low_level
order by ROUND (maxbytes / 1048576)-ROUND ( (a.bytes_alloc - NVL (b.bytes_free, 0)) / 1024 / 1024) desc;
v_sql varchar2(1000);
BEGIN
for v_free_space in c_free_space
loop
for count in 1..p_mountpoint loop
--1-----------------------------------------------------
begin
v_sql :=
'ALTER TABLESPACE '
|| v_free_space.tablespace_name
|| ' ADD DATAFILE '''
|| get_next_datafile_name(v_free_space.tablespace_name)
|| ''' size 8G';
EXECUTE IMMEDIATE v_sql;
dbms_output.put_line(v_sql);
--send_sms_binhtv(v_sql);
EXCEPTION
when others then null;
end;
end loop;
end loop;
END;
END;
Bước 2: Tạo job với scheduler job
Tạo job 1h chạy 1 lần chạy thủ tụcb sys.dba_operations.extend_space;
Hy vọng hữu ích cho bạn.
=============================* 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 weblogic, middleware, hoc solaris, hoc linux, hoc aix, unix, oracle oca, oracle ocp, oracle ocm