DDL và DML là gì
Ngôn ngữ SQL được phân loại ra 1 vài nhóm, chủ yếu là 2 nhóm chính: DDL (Data Definition Language) và DML (Data Manuplulate Language).
Hiểu 1 cách nôm na thì như sau:
Trước tiên, trong database nói chung có 2 khái niệm: Data và Metadata
Mình giải thích về metadata trước nhé:
Metadata là cấu trúc của các đối tượng trong database.
(VD: Schema bao gồm những bảng nào, bảng này bao gồm những cột gì, cột có data type thế nào,…). Những thứ như thế gọi là metadata.
Còn Data là dữ liệu thật sự.
Dựa trên metadata đã được khai báo trước đó, chúng ta sẽ cho data vào database.
Lấy 1 ví dụ thực tế để bạn dễ hình dung:
Metadata giống như 1 cốc nước, còn Data giống như nước trong cốc.
Đó, nếu bạn đã hiểu về 2 khái niệm metadata và data rồi thì bạn sẽ hiểu luôn về các câu lệnh DDL và DML là gì.
- DDL bao gồm các câu lệnh SQL để làm việc với metadata. VD: create table để tạo ra 1 table, alter table để sửa table, drop table để xóa table,…
- DML bao gồm các câu lệnh SQL để làm việc với data. VD: Insert để thêm dữ liệu, update để sửa dữ liệu và delete để xóa dữ liệu.
Chức năng DDL Logging là gì?
Mặc định Oracle không ghi nhận lại các câu lệnh DML và DDL của người dùng vào trong trace file hay alert log.
Nên trong trường hợp chúng ta muốn biết tại 1 thời điểm nào đó, ai đó đã chạy câu lệnh gì thì khá khó.
Trên thực tế, số lượng các câu lệnh DML chạy trên database nhiều hơn rất nhiều lần các câu lệnh DDL. (Người ta truy vấn data thì nhiều chứ chả mấy khi thay đổi metadata cả). Nên nếu bạn mà muốn Oracle ghi nhận lại hết các câu lệnh DML thì không khả thi vì nó sẽ ảnh hưởng rất lớn đến hiệu năng của database.
Còn với các câu lệnh DDL thì lại khác, Oracle có thể ghi nhận lại chúng khá dễ dàng mà không ảnh hưởng mấy đến database. Tính năng này mặc định được disable trên Oracle. Nó gọi là DDL Logging.
Enable DDL Logging
Để enable tính năng DDL Logging, bạn thực hiện theo các bước như sau:
Kiểm tra giá trị hiện tại của tham số enable_ddl_logging