Sau khi TRUNCATE hoặc xóa dữ liệu thì kích thước của datafile sẽ không được thu hồi luôn mà do tiến trình tự động của Oracle tính toán xác định space có sử dụng hay không trước khi thu hồi về cho CSDL. Chúng ta có thể resize lại sau khi TRUNCATE dữ liệu (xóa thì có thể không thu hồi được nhiều) theo thủ tục sau:
declare
cursor c1 is select tablespace_name,file_id,max(block_id) mbid from dba_extents
-- where tablespace_name in ('DATA')
group by tablespace_name,file_id;
fs number;
fn varchar2(100);
ts number;
x number;
gtot number:=0;
tffs number:=0;
ffrags number:= 0;
begin
for v1 in c1 loop
select sum(bytes)/1024/1024 into fs from dba_free_space where tablespace_name = v1.tablespace_name and
file_id = v1.file_id and block_id>v1.mbid;
select file_name,bytes/1024/1024 into fn,ts from dba_data_files where file_id=v1.file_id and tablespace_name=v1.tablespace_name;
select sum(bytes/1024/1024) into tffs from
(select a.bytes/1024/1024 as bytes from dba_free_space a where file_id=v1.file_id and tablespace_name=v1.tablespace_name
union all
select 0.000001 as bytes from dual);
x:=(ts-fs)+64;
if (ts>x) and (x>10) then
dbms_output.put_line('alter database datafile ' || '''' || fn || '''' || ' resize ' || round(x+1,0) || 'm;' || '--total size' || round(ts) || 'm;' );
--EXECUTE IMMEDIATE 'alter database datafile ' || '''' || fn || '''' || ' resize ' || round(x) || 'm;' || '--total size' || round(ts) || 'm;';
gtot := gtot + (ts-x);
end if;
ffrags := nvl(tffs - fs,0);
dbms_output.put_line('alter database datafile ' || '''' || fn || '''' || ' resize ' || round(x+1,0) || 'm;' || '--frag size' || round(ffrags) || 'm;');
--EXECUTE IMMEDIATE 'alter database datafile ' || '''' || fn || '''' || ' resize ' || round(x) || 'm;' || '--frag size' || round(ffrags) || 'm;';
end loop;
dbms_output.put_line('Total space reclaimation:' || gtot || 'MB');
end;
Thu hồi được 468GB
2. Lấy script ra chạy từng bước 1 ở TOAD (và skip qua bước nào không chạy được), (chạy ở SQL Navigator rất bất tiện)
=====================================================================
* Dữ liệu trong thời đại 4.0 là "TRÁI TIM" của doanh nghiệp. Quản
trị cơ sở dữ liệu (Database Administration - DBA) là
ngành có lương cao nhất trong ngành
IT và đầy tiềm năng trong thời đại 4.0. Oracle là cơ sở dữ liệu hàng đầu trên thế giới và được rất nhiều doanh nghiệp lớn trên thế giới và Việt Nam sử dụng.
* Bạn có
mong muốn từng bước
trở thành chuyên
gia DBA không? Nếu câu trả lời là CÓ thì hãy nhanh chóng đăng
ký sở hữu trọn đời
khóa học online "Quản trị cơ sở dữ
liệu cơ bản" của tôi tại
Unica (bạn có thể xem trên điện thoại, máy tính bảng, PC vào bất kỳ lúc nào chỉ cần có mạng Internet). Hiện tại tôi đang khuyến mại cho 100 bạn đăng ký đầu tiên giảm giá từ 2400K còn 799K, CAM KẾT HOÀN TIỀN 100% nếu học xong không có kết quả:
* Môn 1: Quản trị Oracle 12 cơ bản, giảm giá 70% HÔM NAY cho 100 bạn
đầu tiên từ 2tr4 còn
799K theo link: https://bit.ly/3d2ofqZ (khoá này học ở
Oracle hãng là 1.500$), chuyển khoản còn 699K
* Môn 2: Quản trị Linux trong 21h, cũng giảm giá 70% HÔM NAY cho 100 bạn đầu tiên từ 2tr4 còn
799K theo link: https://bit.ly/3e7gwJw, chuyển
khoản còn 699K
* Combo1: Cho 2 khóa học (Quản trị Oracle 12 cơ bản + Quản trị Linux
trong 21h) giá 1.200K chuyển khoản
--> Thông tin TÀI KHOẢN:
- Trần Văn Bình, STK
1920767736012, Ngân hàng Techcombank, chi nhánh Thăng Long
- Nội dung: Tên + (Môn 1 hoặc Môn
2 hoặc Combo) +
Số tiền, sau đó chụp
màn hình
chuyển khoản
gửi về email tranbinh48ca@gmail.com (ví dụ nội dung: TranVanBinh Combo1 1200K, TranVanBinh
Mon1 799K, TranVanBinh Mon2 799K,
=====================================================================