Đây là một bài viết cực kỳ quan trọng.

Việc bật tắt database có thể bạn đã không còn xa lạ gì. Tuy nhiên nếu bạn hiểu được rằng sau mỗi lệnh bật/tắt, database thực sự làm những việc gì phía sau, điều đó sẽ giúp tăng kỹ năng phán đoán lỗi và khoanh vùng vấn đề của bạn mỗi khi database có sự cố. Đây là một kỹ năng rất quan trọng mà mọi DBA phải có.

Ok, chúng ta sẽ bắt đầu tìm hiểu nhé.

Đầu tiên chúng ta sẽ bắt đầu từ bước khởi động database. Tức là đưa database từ trạng thái shutdown (hay tắt hoàn toàn) lên trạng thái open (trạng thái hoạt động đầy đủ, cho phép người dùng có thể truy cập và thao tác với dữ liệu trong database).

Lệnh để khởi động database là:

startup

Khi chạy lệnh này, Oracle database sẽ được đưa qua lần lượt các trạng thái: Shutdown    No mount   Mount   Open.

Chúng ta sẽ cùng lần lượt tìm hiểu ý nghĩa và vai trò của từng trạng thái ở phần tiếp theo


   Trạng thái Close

Không có gì để nói nhiều, đây là trạng thái database hoàn toàn không hoạt động.


   Trạng thái No mount

Khi bạn gõ lệnh startup, database từ trạng thái Close sẽ bắt đầu chuyển sang trạng thái No mount . Ở trạng thái này, Oracle database sẽ tìm file tham số khởi tạo. Nó còn có tên gọi khác là parameter file, pfile hay spfile ( Sự khác nhau của pfile và spfile tôi sẽ trình bày ở một bài viết khác). Ở bài viết này tôi cứ gọi chung là parameter file cho ngắn gọn nhé

Parameter file là 1 file chứa các tham số quy định nhiều hoạt động hay thành phần trong database.

VD: Một vài tham số như:

   control_files: Quy định đường dẫn đến control file

   memory_target: Quy định kích thước Memory được cấp phát cho database instance.

Đọc thêm  Cấu hình chức năng archive mode trong PostgreSQL

   db_files: Quy định số lượng tối đa của data file trong database

   processes: Quy định số lượng tối đa các tiến trình trong database.

Như vậy, sau khi Oracle tìm thấy và đọc xong Parameter file, nó sẽ bắt đầu khởi tạo Memory và khởi động các process dựa trên các tham số cấu hình mà nó đã đọc được.

Xong xuôi, database hoàn thành trạng thái No mount và đi lên trạng thái tiếp theo.

Bạn sẽ thấy màn hình sẽ xuất hiện như sau khi database đã No mount thành công.

SQL> startup
ORACLE instance started.

Total System Global Area 88080384 bytes
Fixed Size               1217836 bytes
Variable Size            79694548 bytes
Database Buffers         4194304 bytes
Redo Buffers             2973696 bytes

 


   Trạng thái Mount

Trạng thái tiếp theo là Mount. Ở trạng thái này, Oracle Database sẽ đi tìm control file và đọc nó.

Vậy làm sao nó biết được control file nằm ở đâu? Bạn đoán xem

Chính là từ tham số control_files mà nó đã đọc ra từ parameter file ở trạng thái No mount trước đó đấy. Rất logic phải không?

Trong control file có các thông tin điều khiển của database, nhưng quan trọng nhất bao gồm các thông tin sau:

   Đường dẫn đến các datafile

   Đường dẫn đến các redo log file

   Thông tin checkpoint

Các thông tin về đường dẫn và redo log file thì cần thiết là rõ rồi. Tuy nhiên, thông tin checkpoint là gì, chúng ta sẽ cùng tìm hiểu ở phần tiếp theo.

Sau khi đã đọc xong control file, database đã hoàn thành trạng thái Mount và bắt đầu đi lên trạng thái Open.

Màn hình có thể sẽ trông giống như sau:

SQL> startup 
ORACLE instance started. 
Total System Global Area 88080384 bytes 
Fixed Size               1217836 bytes 
Variable Size            79694548 bytes 
Database Buffers         4194304 bytes 
Redo Buffers             2973696 bytes
Database mounted.

 


   Trạng thái Open

Trạng thái cuối cùng trong toàn bộ quá trình khởi động đó là Open.

Bắt đầu trạng thái open, Database sẽ đi tìm kiếm các datafile dựa trên thông tin về đường dẫn đến các datafile (đã đọc được từ control file ở trạng thái Mount trước đó).

Đọc thêm  [Ebook] Expert Oracle SQL - Download PDF

Sau đó, nó sẽ kiểm tra header của các datafile này để tìm kiếm thông tin checkpoint.

Tiếp theo, nó sẽ so khớp thông tin checkpoint mà nó tìm được ở datafile với thông tin checkpoint ở control file.

   Nếu 2 thông tin này trùng khớp, database sẽ hoàn tất trạng thái opensẵn sàng mở cho các kết nối đi vào.

   Còn nếu thông tin checkpoint giữa datafile và control file không trùng khớp, database sẽ hiểu là “database gặp trục trặc rồi” và nó sẽ tìm đến các redo log file (đường dẫn redo log cũng có trong control file). Một tiến trình sẽ làm nhiệm vụ gọi là instance recovery. Nó sẽ khôi phục lại database từ thông tin được lưu trong redo log. Quá trình này còn gọi là roll forward. Kết thúc quá trình này, checkpoint của datafile và control file là bằng nhau và database đã có thể open lên được rồi.

Màn hình khi database hoàn tất quá trình khởi động sẽ như sau:

SQL> startup 
ORACLE instance started. 
Total System Global Area 88080384 bytes 
Fixed Size               1217836 bytes 
Variable Size            79694548 bytes 
Database Buffers         4194304 bytes 
Redo Buffers             2973696 bytes 
Database mounted.
Database opened.
SQL>

   Thảo luận

Như vậy là tôi đã cùng các bạn tìm hiểu xong về các pha khởi động trong Oracle Database. Tại sao ở đầu bài viết tôi lại nói, những kiến thức này sẽ giúp bạn tăng kỹ năng phán đoán lỗi và khoanh vùng vấn đề khi database gặp sự cố?

Cùng kiểm chứng luôn nhé!

Giả sử bạn đã đọc kỹ phần trên bài viết của tôi và nắm được nội dung rồi. Vậy tôi đưa ra tình huống sau, bạn thử phán đoán xem lỗi có thể nằm tại đâu nhé

Tôi gõ lệnh startup để khởi động database thì bắt gặp lỗi sau:

SQL> startup
ORA-00845: MEMORY_TARGET not supported on this system

Chưa cần search google, bạn cũng đã thấy database còn chưa hoàn thành bước No mount, tức là ít nhất bạn cũng khoanh vùng được vấn đề đang nằm ở parameter file. Bạn sẽ không mất công đi kiểm tra control file, data file hay redo log file nữa.

Đọc thêm  So sánh Pgpool-II và Pgbouncer - Phần 1

Ok, hi vọng bài viết này đã giúp bạn hiểu rõ hơn về các bước Oracle sẽ thực hiện khi khởi động. Nếu bạn còn chưa hiểu rõ, bạn hãy để lại comment ở bên dưới bài viết này, hoặc tham gia vào group “Kho tài liệu kiến thức về Database” của tôi trên Facebook nhé

https://www.facebook.com/groups/khotailieukienthucdatabase

Nguồn: https://dangxuanduy.com/

Xin cho tôi được biết, bạn cảm thấy bài viết này như thế nào? Ý kiến của bạn sẽ giúp tôi nâng cao chất lượng bài viết của mình.

    Hãy chia sẻ bài viết này nếu bạn thấy có ích nhé
    0 0 votes
    Article Rating
    Subscribe
    Notify of
    guest
    0 Comments
    Inline Feedbacks
    View all comments