Table of Contents

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)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.

Đọc thêm  Thay đổi port mặc định của listener

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

				
					$ sqlplus / as sysdba
				
			
				
					SQL> show parameter ddl_logging
				
			

Thay đổi giá trị tham số

				
					alter system set enable_ddl_logging=true;
				
			

Như vậy là tính năng DDL Logging đã được enable lên rồi đó. Tiếp theo chúng ta sẽ kiểm thử xem tính năng này hoạt động như thế nào nhé.

Kiểm thử DDL Logging

Tôi sẽ thử chạy 1 câu lệnh DDL trên database như sau:

				
					create table test (id number);
				
			

Đây là một câu lệnh DDL và nó sẽ được Oracle ghi nhận lại vào file ddl_<instance_name>.log đặt tại thư mục: $ORACLE_BASE/diag/rdbms/<db_name>/<instance_name>/log/

VD: Database test của tôi cả db name và instance name đều là orcl thì đường dẫn của file ddl log sẽ là:

Đọc thêm  Migrate non-CDB thành PDB bằng DBMS_PDB
				
					$ cd $ORACLE_BASE/diag/rdbms/orcl/orcl/log/
$ ls -ltr
				
			

Đây là file DDL log

Nội dung của nó như sau:

OK, kết quả như trên là các bạn đã cấu hình thành công tính năng DDL logging rồi đó.

Hẹn gặp lại các bạn ở các bài viết tiếp theo

Nguồn: https://dangxuanduy.com

Hiện tại, tôi có tổ chức đều đặn các khóa học về quản trị Oracle Database, tôi sẽ để thông tin ở đây, để bạn nào quan tâm về lịch học cũng như chương trình học có thể theo dõi nhé.

Đọc thêm  Những bài học đau thương trong nghề DBA – Phần 2
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận
0
Rất thích suy nghĩ của bạn, hãy bình luận.x