Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Mục đích của tùy chọn ghi nhật ký / ghi nhật ký trong Oracle là gì

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sự phụ thuộc của các biểu mẫu Oracle

  2. BEGIN / END và CREATE Table trong một tệp .sql duy nhất

  3. ký tự Ả Rập không được chèn đúng cách (như ????) trong cơ sở dữ liệu oracle?

  4. Kiểu dữ liệu Java nào tương ứng với kiểu dữ liệu SQL của Oracle là NUMERIC?

  5. Hibernate mất độ chính xác trong kết quả khi ánh xạ một số (22,21) sang BigDecimal