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

Sự khác nhau giữ DELETE, DROP & CREATE và TRUNCATE của bảng và cluster


Bạn có thể xóa tất cả các hàng của một bảng hoặc tất cả các hàng trong một nhóm các bảng được phân cụm (Clustered tables, gọi tắt là bảng cụm) sao cho bảng (hoặc cụm) vẫn tồn tại, nhưng hoàn toàn trống rỗng. Ví dụ, hãy xem xét một bảng chứa dữ liệu hàng tháng và vào cuối mỗi tháng, bạn phải làm trống nó (xóa tất cả các hàng) sau khi lưu trữ dữ liệu của nó.
Kết quả hình ảnh cho DELETE, DROP  oracle database
Để xóa tất cả các hàng khỏi một bảng, bạn có các tùy chọn sau:
  • Sử dụng câu lệnh DELETE 
  • Sử dụng câu lệnh DROP và CREATE.
  • Sử dụng câu lệnh TRUNCATE.
Các tùy chọn này được thảo luận trong các phần sau
Sử dụng DELETE 
Bạn có thể xóa các hàng của bảng bằng cách sử dụng câu lệnh DELETE. Ví dụ: câu lệnh sau sẽ xóa tất cả các hàng khỏi emp bảng:
DELETE FROM emp;
Nếu có nhiều hàng có trong một bảng hoặc cụm khi sử dụng câu lệnh DELETE , tài nguyên hệ thống quan trọng sẽ bị tiêu tốn khi các hàng bị xóa. Ví dụ: thời gian CPU, không gian redo space và  không gian undo space từ bảng và mọi chỉ mục liên quan đều yêu cầu tài nguyên. Ngoài ra, khi mỗi hàng bị xóa, trigger có thể được kích hoạt. Không gian được phân bổ trước đó cho bảng hoặc cụm trống kết quả vẫn được liên kết với đối tượng đó. Với DELETE bạn có thể chọn những hàng cần xóa, trong khi đó TRUNCATEvà DROP ảnh hưởng đến toàn bộ đối tượng.

Sử dụng DROP và CREATE
Bạn có thể drop một bảng và sau đó tạo lại bảng. Ví dụ: các câu lệnh sau drop và sau đó tạo lại bảng emp :
DROP TABLE emp;
CREATE TABLE emp ( ... );
Khi drop và tạo lại một bảng hoặc cụm, tất cả các chỉ mục liên quan, các ràng buộc toàn vẹn và các trigger cũng bị loại bỏ và tất cả các đối tượng phụ thuộc vào bảng bị drop hoặc bảng cụm bị vô hiệu. Ngoài ra, tất cả các quyền gán cho bảng bị drop hoặc bảng cụm được loại bỏ.
Sử dụng TRUNCATE
Bạn có thể xóa tất cả các hàng của bảng bằng cách sử dụng câu lệnh TRUNCATE. Ví dụ: câu lệnh sau truncate bảng emp :
TRUNCATE TABLE emp;
Sử dụng câu lệnh TRUNCATE cung cấp một phương thức nhanh, hiệu quả để xóa tất cả các hàng khỏi bảng hoặc cụm. Một câu lệnh TRUNCATE  không tạo ra bất kỳ thông tin undo và nó commit ngay lập tức. Đó là một câu lệnh DDL và không thể được khôi phục. Một câu lệnh TRUNCATE không ảnh hưởng đến bất kỳ cấu trúc nào liên quan đến bảng bị truncate (ràng buộc và kích hoạt) hoặc ủy quyền. Một câu lệnh TRUNCATE cũng xác định xem không gian hiện được phân bổ cho bảng có được trả về không gian bảng chứa sau khi cắt hay không.
Bạn có thể TRUNCATE bất kỳ bảng hoặc cụm trong schema của riêng bạn. Bất kỳ người dùng nào có quyền hệ thống DROP ANY TABLE đều có thể TRUNCATE một bảng hoặc cụm trong bất kỳ schema nào.
Trước khi TRUNCATE một bảng hoặc bảng cụm có chứa khóa cha, tất cả các khóa ngoại tham chiếu trong các bảng khác nhau phải được tắt. Một ràng buộc bản thân nó không phải bị vô hiệu hóa.
Khi một câu lệnh TRUNCATE xóa các hàng khỏi một bảng, các trigger được liên kết với bảng sẽ không được kích hoạt. Ngoài ra, một câu lệnh TRUNCATE không tạo ra bất kỳ thông tin audit tương ứng với các câu lệnh DELETE  nếu kiểm toán được kích hoạt. Thay vào đó, một bản ghi audit được tạo ra cho câu lệnh TRUNCATE được ban hành.
Một cụm băm không thể bị truncate, cũng không thể cắt các bảng trong một cụm băm hoặc chỉ mục. Truncate một cụm chỉ mục xóa tất cả các hàng từ tất cả các bảng trong cụm. Nếu tất cả các hàng phải được xóa khỏi một bảng cụm riêng lẻ, hãy sử dụng câu lệnh DELETE hoặc DROP và tạo lại bảng.
Câu lệnh TRUNCATE có một số tùy chọn kiểm soát xem không gian hiện được phân bổ cho một bảng hay cụm được trả vềtablspace chứa sau khi truncate.
Các tùy chọn này cũng áp dụng cho bất kỳ chỉ mục liên quan. Khi một bảng hoặc cụm bị cắt ngắn, tất cả các chỉ mục liên quan cũng bị truncate. Các tham số lưu trữ cho một bảng truncate, cụm hoặc các chỉ mục liên quan không bị thay đổi do truncate.
Các tùy chọn TRUNCATE là:
* DROP STORAGE, tùy chọn mặc định, giảm số lượng extent được phân bổ cho bảng kết quả về cài đặt gốc cho MINEXTENTS. Các free extent sau đó được trả về hệ thống và có thể được sử dụng bởi các đối tượng khác
TRUNCATE TABLE emp DROP STORAGE;
* DROP ALL STORAGE loại bỏ các segment. Ngoài lệnh TRUNCATE TABLEDROP ALL STORAGE cũng áp dụng cho câu lệnh ALTER TABLE TRUNCATE (SUB)PARTITION. Tùy chọn này cũng loại bỏ bất kỳ segment phụ thuộc nào liên quan đến phân vùng bị truncate.
DROP ALL STORAGE không được hỗ trợ cho các cụm.
(Chức năng này có sẵn với Cơ sở dữ liệu Oracle 11 g phát hành 2 (11.2.0.2))
TRUNCATE TABLE emp DROP ALL STORAGE;
* REUSE STORAGE xác định rằng tất cả không gian hiện được phân bổ cho bảng hoặc cụm vẫn được phân bổ cho nó. Ví dụ: câu lệnh sau cắt ngắn cụm  emp_dept , để lại tất cả các extent được phân bổ trước đó cho cụm có sẵn cho các lần thêm mới và xóa tiếp theo:
TRUNCATE CLUSTER emp_dept REUSE STORAGE;


=====================================================================
* 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