Tôi không có DBA, và tôi đang có một chút khó khăn trong việc hiểu quy trình quản lý giao dịch của Oracle.Oracle - Giao dịch, phân đoạn rollback và thông số undo_retention hoạt động như thế nào?
Từ những gì tôi hiểu bằng cách đọc một số trang đáng tin cậy trên Internet (đáng chú ý nhất là AskTom note - nhưng đừng bận tâm với nhận xét), khi giao dịch được cam kết, dữ liệu mới là không được báo cáo khối dữ liệu thực tế, nhưng vẫn đăng nhập vào phân đoạn rollback. Khi ai đó phát hành SELECT trên dữ liệu hoặc sau khi UNDO_RETENTION giây trôi qua - bất kỳ sự kiện nào trong hai sự kiện này xảy ra trước - thì dữ liệu mới sau đó được (và chỉ sau đó) được ghi trên các khối dữ liệu.
Nhưng một người nào đó trong công ty chúng tôi cho rằng ngược lại: theo ông, khi giao dịch được cam kết, dữ liệu mới là ngay lập tức được ghi trên khối dữ liệu và phân đoạn rollback/hoàn tác không gian bảng lưu giữ dữ liệu cũ trong thời lượng UNDO_RETENTION giây. Dữ liệu cũ này vẫn có sẵn trong thời gian này để truy cập bằng truy vấn được khởi chạy trên SCN trước giao dịch.
Vì vậy, những gì thực sự xảy ra bên trong Oracle và bạn có thể cung cấp tham chiếu để sao lưu câu trả lời của mình không?
Chúng tôi đang sử dụng Oracle 9.2.0.8.
Xin cảm ơn trước.
Cảm ơn câu trả lời đầy đủ này. – Manur
Có, bạn nói đúng rằng các khối bẩn có thể được ghi vào đĩa trước khi cam kết xảy ra. Đây là lý do tại sao một phát biểu SELECT có thể tạo lại - nó có thể cần phải thực hiện một "chậm khối làm sạch". Phần quan trọng là cam kết chỉ đảm bảo rằng làm lại được ghi vào đĩa - không phải chính dữ liệu. –