Table of Contents

1. Giới thiệu

Khi làm việc với Oracle Database, chúng ta thường làm việc chủ yếu với các datafile, còn các loại file khác như Redo log, Undo, Flashback log thì rất ít tài liệu mô tả 1 cách chi tiết.

Bài viết này sẽ giúp các bạn hiểu hơn về các loại file này.

2. Redo Log

1. Cơ chế sinh Redo Log

Các redo log chứa các Redo entry hay là 1 nhóm các change vector, mỗi vector mô tả một thay đổi được thực hiện trên một block của database. Redo log được lưu trong Redo Log Buffer và được tiến trình LGWR ghi xuống Redo log file.

Redo log được ghi liên tục và theo trình tự thời gian, điều đó có nghĩa là các thay đổi được thực hiện theo trình tự thời gian nào, thì redo entry tương ứng cũng tuân theo trình tự thời gian đó.

2. Mục đích của Redo log là gì?

Redo log có thể sử dụng để reproduce (tái tạo) lại tất cả các thay đổi đã được thực hiện trên database, kể cả đó là những thay đổi do người dùng tạo ra hay do bản thân database tạo ra (như Undo chẳng hạn).

Để đảm bảo có thể tái tạo thành công bất cứ thay đổi nào đã được thực hiện trước đó, thay đổi chỉ được coi là đã thực hiện thành công khi redo entry tương ứng với nó đã được ghi an toàn xuống redo log file trên đĩa.

Các bạn hình dung, LGWR giống như 1 sử gia, lặng lẽ ngồi ghi chép tất cả những gì thay đổi trên database.

Đọc thêm  Ý nghĩa các thư mục trong PostgreSQL

Khi thực hiện instance recover, database sẽ đọc các change vector trong các redo log và áp dụng các thay đổi vào các block tương ứng. Bước này còn gọi là roll forward.

Tất nhiên khi roll forward, các UNDO data cũng sẽ được tái tạo, để phục vụ cho bước roll back ở sau.

3. UNDO Data

1. Cơ chế sinh UNDO Data

Cũng giống như Redo log, Undo data cũng được sử dụng cho các mục đích phục hồi dữ liệu.

Tuy nhiên, nó khác redo log ở nội dung mà nó lưu trữ.

Khi một transaction thực hiện các câu lệnh DML để thay đổi dữ liệu (ví dụ: update, delete, insert), dữ liệu trước khi thay đổi (before-image hay old-value) sẽ được lưu trữ trong undo data. Undo data cho phép database rollback lại các thay đổi này nếu cần thiết. Ví dụ như khi transaction bị hủy bỏ hoặc xảy ra lỗi trong khi thực hiện.

Còn nếu transaction thực hiện các câu lệnh DDL (Data Definition Language) thì nó sẽ không sinh ra UNDO (Redo log thì ghi lại hết kể cả DDL). Do đó, các câu lệnh DDL khi đã thực hiện thì sẽ không rollback được.

Undo data được lưu trữ tại các Undo segment nằm trên Undo tablespace. Ban đầu khi sinh ra, nó cũng nằm trên Data Buffer Cache, sau đó mới được DBWR ghi xuống Undo datafile.

2. Mục đích của UNDO Data là gì?

Undo data được sử dụng bên cạnh Redo log trong quá trình Instance recovery. Sau khi roll forward thành công, lúc này trên datafile sẽ bao gồm cả dữ liệu đã commit và chưa commit. Vậy bước tiếp theo sẽ cần phải roll back lại các dữ liệu chưa commit.

Đọc thêm  Kích thước Redo log bao nhiêu là hợp lý?

Và đó là lúc chúng ta cần sử dụng đến Undo data.

Ngoài ra, chúng ta còn sử dụng nó trong các kỹ thuật Flashback như: Flashback Query, Flashback Transaction Backout, Flashback Version Query.

4. Flashback log

1. Cơ chế sinh Flashback log

Không phải tất cả các kỹ thuật Flashback đều cần đến Flashback log.

Khác với Undo data và Redo log, là 2 cơ chế bắt buộc của Database, flashback log là 1 loại file được sinh ra khi bạn bật chế độ Flashback trên database lên.

Flashback log chứa các thông tin để rollback tương tự như Undo data, tuy nhiên, nó còn chứa cả thông tin để rollback cả những câu lệnh DDL nữa.

Thông tin trong Flashback log là Past-image của data block (khác với Before-Image trong Undo) và nó được ghi lại định kỳ. (khác với redo log là nó được ghi liên tục không ngắt quãng)

Theo Jonathan Lewis

Khi các bạn enable flashback trên database, flashback log sẽ được tạo ra trên Flashback Buffer và được background process RVWR tiến hành ghi xuống flashback log file. Mặc định, kích thước của Flashback log file sẽ bằng với redo log file hiện tại.

2. Mục đích của Flashback log là gì?

Flashback log được dùng khi bạn muốn đưa database về 1 thời điểm nào đó trong quá khứ (sử dụng kỹ thuật flashback database).

 

Khi thực hiện Flashback database về 1 thời điểm cụ thể trong quá khứ, database sẽ sử dụng flashback log để đưa nó đến past-image gần nhất trước thời điểm mà chúng ta mong muốn, sau đó mới apply các archive log vào để rollforward database đến thời điểm mà chúng ta mong muốn.

Đọc thêm  Thay đổi kích thước của Redo log trong Oracle

Điều này giải thích lý do tại sao khi chúng ta enable Flashback trên database, thì cần phải enable Archive log nữa.

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

5 1 đá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