LOGGING / NOLOGGING giúp quản lý việc cho phép ghi đường dẫn trực tiếp để giảm việc tạo REDO và UNDO. Đó là một trong nhiều cách để kiểm soát sự cân bằng mong manh giữa khả năng khôi phục và hiệu suất.
Thông tin cơ bản về kiến trúc Oracle
LÀM LẠI là cách Oracle cung cấp độ bền, chữ "D" trong ACID. Khi một giao dịch được cam kết, các thay đổi không nhất thiết phải được lưu trữ gọn gàng trong các tệp dữ liệu. Điều đó giữ cho mọi thứ nhanh chóng và cho phép các quy trình nền xử lý một số công việc. REDO là một mô tả về sự thay đổi. Nó được lưu trữ nhanh chóng, trên nhiều đĩa, trong một nhật ký "câm". Các thay đổi diễn ra nhanh chóng và nếu máy chủ mất điện trong một micro giây sau khi cam kết được trả về, Oracle có thể duyệt qua nhật ký REDO để đảm bảo rằng thay đổi đó không bị mất.
HOÀN TẤT giúp Oracle cung cấp tính nhất quán, chữ "C" trong ACID. Nó lưu trữ mô tả về cách đảo ngược thay đổi. Thông tin này có thể cần thiết bởi một quy trình khác đang đọc bảng và cần biết giá trị đã sử dụng ở một thời điểm cũ hơn.
Ghi đường dẫn trực tiếp bỏ qua REDO, UNDO, bộ nhớ cache và một số tính năng khác, đồng thời sửa đổi trực tiếp các tệp dữ liệu. Đây là một tùy chọn nhanh chóng nhưng tiềm ẩn nguy hiểm trong nhiều môi trường, đó là lý do tại sao có rất nhiều tùy chọn khó hiểu để kiểm soát nó. Việc ghi đường dẫn trực tiếp chỉ áp dụng cho INSERTS và chỉ trong các trường hợp được mô tả bên dưới.
Nếu bạn không làm gì, tùy chọn mặc định là an toàn nhất, ĐĂNG NHẬP.
Nhiều cách để kiểm soát việc ghi đường dẫn trực tiếp
LOGGING / NOLOGGING là một trong số các tùy chọn để kiểm soát việc ghi đường dẫn trực tiếp. Xem bảng này từ AskTom để hiểu cách tất cả các tùy chọn khác nhau hoạt động cùng nhau:
Table Mode Insert Mode ArchiveLog mode result
----------- ------------- ----------------- ----------
LOGGING APPEND ARCHIVE LOG redo generated
NOLOGGING APPEND ARCHIVE LOG no redo
LOGGING no append ARCHIVE LOG redo generated
NOLOGGING no append ARCHIVE LOG redo generated
LOGGING APPEND noarchive log mode no redo
NOLOGGING APPEND noarchive log mode no redo
LOGGING no append noarchive log mode redo generated
NOLOGGING no append noarchive log mode redo generated
FORCE LOGGING có thể ghi đè tất cả các cài đặt đó. Có thể có một số công tắc khác mà tôi không biết. Và tất nhiên có nhiều hạn chế ngăn cản đường dẫn trực tiếp - trình kích hoạt, khóa ngoại, cụm, bảng được tổ chức chỉ mục, v.v.
Các quy tắc thậm chí còn hạn chế hơn đối với các chỉ mục. Một chỉ mục sẽ luôn luôn tạo REDO trong các câu lệnh DML. Chỉ các câu lệnh DDL, như CREATE INDEX ... NOLOGGING
hoặc ALTER INDEX ... REBUILD
trên chỉ mục CÔNG NGHỆ sẽ không tạo REDO.
Tại sao có nhiều cách? Bởi vì khả năng phục hồi là vô cùng quan trọng và các vai trò khác nhau có thể có quan điểm khác nhau về vấn đề này. Và đôi khi quyết định của một số người cần phải thay thế những người khác.
Nhà phát triển quyết định ở cấp câu lệnh, "Chế độ chèn". Nhiều điều kỳ lạ có thể xảy ra với /*+ APPEND */
gợi ý và các nhà phát triển cần phải lựa chọn cẩn thận khi sử dụng nó.
Kiến trúc sư quyết định ở cấp độ đối tượng, "Chế độ bảng". Một số bảng, bất kể nhà phát triển muốn chèn vào nó nhanh đến mức nào, phải luôn có thể khôi phục được.
Quản trị viên cơ sở dữ liệu quyết định ở chế độ cơ sở dữ liệu hoặc vùng bảng, "Nhật ký lưu trữ" và FORCE LOGGING. Có thể tổ chức không quan tâm đến việc khôi phục một cơ sở dữ liệu cụ thể, vì vậy hãy đặt nó ở chế độ NOARCHIVELOG. Hoặc có thể tổ chức có một quy tắc nghiêm ngặt rằng mọi thứ phải có thể khôi phục được, vì vậy hãy đặt vùng bảng thành FORCE LOGGING.