Thứ Tư, 20 tháng 11, 2019

Quy trình RESIZE LẠI DATAFILE của cơ sở dữ liệu Oracle

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:

Kết quả hình ảnh cho resize datafile oracle database

1. Chạy thủ tục
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  hc (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, 

=====================================================================

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master