Sau phần 1 – tìm hiểu về kiến trúc bộ nhớ và phần 2 – tìm hiểu về kiến trúc process, phần này chúng ta sẽ tìm hiểu về kiến trúc lưu trữ trong Oracle Database. Có thể coi nó chính là … Oracle database. Do memory + process = instance, instance để vận hành database, vậy database là gì? Chính là những gì lưu trữ ở dưới hệ thống đĩa.

 

Kiến trúc lưu trữ bao gồm kiến trúc luận lý (logical structure)kiến trúc vật lý (physical structure), có mối quan hệ mật thiết với nhau.

  

Physical Structure

 

physical structure

 

Phyical structure – kiến trúc vật lý – chính là các tập tin, là những gì chúng ta có thể thấy được trực tiếp trên hệ điều hành, được lưu trữ trên hệ thống lưu trữ (có thể là local disk, SAN, NAS…, disk có thể format theo file system như ext3, hay format thành ASM disk…), bao gồm:

 

Data files

Đúng như tên gọi, data files là các tập tin chứa dữ liệu của database, bao gồm cả dữ liệu của user hay ứng dụng, data dictionary của Oracle database. 

Mỗi data file chỉ thuộc về 1 tablespace, có thể tự tăng kích thước (AUTOEXTEND) và tối đa đến 1 giới hạn (MAXSIZE) nếu ta cấu hình khi tạo. 

Data file có thể là:

  • Datafile: các tập tin chứa dữ liệu
  • Tempfile: các tập tin chứa dữ liệu tạm thời phục vụ cho hoạt động của database
  • Undo datafile: các tập tin chứa dữ liệu undo phục vụ cho hoạt động của database

Các tập tin này hay có đuôi là .dbf

 

Control files

Đây là tập tin hết sức quan trọng với database, nếu không có nó sẽ không open được database. Tập tin này chứa metadata về database, như tên database, vị trí các data files, redo log files, thông tin về backup,…

Do là tập tin quan trọng, nên chúng ta cần nhân bản (multiplex) file này ra làm 2, 3 bản ở các vị trí lưu trữ khác nhau, để trong trường hợp 1 file bị hư vẫn còn các file còn lại, đảm bảo hệ thống hoạt động.

Các tập tin này hay có đuôi là .ctl

 

Online redo log files

Đây chính là các tập tin mà process LGWR ghi dữ liệu ra từ Redo log buffer. Các tập tin này cần thiết trong trường hợp instance crash, phải recover lại.

Các redo log files được chia vào các log group. Mỗi log group cũng nên có 2 redo log files trở lên (cũng multiplex như control file), để đảm bảo khi có 1 file hư thì vẫn còn file còn lại để hệ thống hoạt động.

Do được sử dụng xoay vòng, cần ít nhất 2 log group trong database. 

 

Khi hoạt động, log group có thể có các trạng thái sau:

  • UNUSED: log group mới tạo, chưa sử dụng bao giờ
  • CURRENT: log group đang được ghi dữ liệu
  • ACTIVE: log group đang không ghi dữ liệu, nhưng đang cần phòng trường hợp instance crash
  • INACTIVE: log group đang không ghi dữ liệu, không cần trong trường hợp instance crash

Archived redo log files

Nếu database chạy trong chế độ ARCHIVELOG, các redo log file khi đầy / khi switch sẽ được ghi ra archived log files. Các archived redo log files này dùng với các bản backup để đảm bảo có thể restore hệ thống đến 1 thời điểm xác định. Ngoài ra, archived redo log files còn dùng cho các tính năng khác như Data Guard.

 

Initialization files

Đây là tập tin chứa các tham số cấu hình liên quan đến bộ nhớ, vị trí control files, vị trí các thư mục log, các tham số cấu hình hoạt động của database… được dùng khi startup instance. Có 2 loại file:

  • Pfile (parameter file): là dạng file text, thường có tên init<SID>.ora
  • Spfile (server parameter file): là dạng file binary, thường có tên spfile<SID>.ora

Các tập tin này thường nằm trong ORACLE_HOME/dbs. Nếu dùng ASM để lưu trữ thì spfile hay nằm trong ASM. 

Spfile có nhiều ưu điểm hơn pfile và thường được dùng chính cho database. Tuy vậy pfile cũng cần thiết trong nhiều trường hợp. Việc nắm vững thao tác với 2 loại file này sẽ rất có ích. 

 

Password files

Tập tin này chứa password của các user được cấp quyền SYSDBA hay SYSOPER, cho phép các user có quyền admin này kết nối từ xa để thực hiện các thao tác cần xác thực bên ngoài database, chẳng hạn như startup.

Tập tin này thường có tên orapw<SID> nằm trong ORACLE_HOME/dbs.

 

Alert log & Trace files

Alert log là tập tin ghi lại log các hoạt động chính của database (startup, shutdown, switch log…), các thao tác liên quan đến tablespace và datafile, ALTER DATABASE, ALTER SYSTEM, các lỗi liên quan đến hoạt động database…

Đây là tập tin cần thường xuyên theo dõi kiểm tra để đảm bảo hoạt động của database. Tập tin này thường có tên alert_<SID>.log

Trace files là các file log ghi lại các lỗi xảy ra trên các background process và server process. Ngoài ra cũng có lúc DBA chủ động ghi trace file để kiểm tra 1 số thông tin rõ ràng hơn. 

 

Backup files

Backup files là các file sao lưu lại nội dung database, mục đích chính là phòng trường hợp có hư hỏng gì thì dùng để khôi phục database.

Backup files có thể là các file copy của các file khác (data file, control file, redo log, archived log…) nếu sử dụng “cold backup”, hoặc có thể là các tập tin do RMAN sinh ra nếu dùng RMAN để backup.

 

Note
Do đây là các tập tin trên OS, nên nó cũng có các tính chất như các tập tin khác (lưu trữ theo kích thước OS block, có phân quyền owner, read/write…) 

 

Logical Structure

 

Nếu như trên OS ta thấy các tập tin database đơn giản chỉ là … các tập tin, thì trong database, việc lưu trữ logic lại tổ chức phức tạp hơn, theo nhiều cấp.

 less05-storage-3-638

 

Oracle data block

Data block là cấp độ lưu trữ logic nhỏ nhất trong Oracle database. Thường 1 Oracle data block sẽ gồm nhiều OS block để tăng I/O. Mặc định block size là 8KB. Tuy nhiên khi tạo tablespace, có thể đặt block size khác tùy theo nhu cầu.  

Extents

Extent là mức độ lưu trữ cao hơn, bao gồm nhiều data block liền kề (về mặt logical, còn về mặt physical có thể là các block rải rác trên disk). Khi 1 object cần tăng thêm kích thước, Oracle sẽ cấp phát thêm ở mức độ extent. 

Segments

Segment là đơn vị lưu trữ logic bao gồm nhiều extent. Có 4 loại segment chính:

  • Data segment: là segment tạo nên table. Mỗi table được lưu hoàn toàn trong 1 segment (với partitioned table thì mỗi partition là 1 segment)
  • Index segment: là segment tạo nên index.  Mỗi index được lưu hoàn toàn trong 1 segment (với partitioned index thì mỗi partition là 1 segment)
  • Undo segment: các segment lưu trữ thông tin undo trong undo tablespace
  • Temporary segment: các segment lưu trữ thông tin tạm thời trong temporary tablespace

Tablespace

Việc lưu trữ nhìn từ trong database, ở mức độ cao nhất sẽ là các tablespace.

Tablespace là tập hợp các data files (quan hệ giữa physical và logical nhìn thấy rõ nhất là đây), mục đích tất nhiên là … để lưu trữ dữ liệu. Có 3 loại tablespace lưu trữ:

  • Data tablespace: tablespace chứa dữ liệu. Khi cài đặt thường có sẵn tablespace SYSTEM và SYSAUX, là các tablespace hệ thống chứa dữ liệu của Oracle (ta không nên lưu trữ dữ liệu khác vào đây), 1 tablespace USERS để chứa dữ liệu của user/ứng dụng. Thường ta sẽ tạo thêm các tablespace khác để quy hoạch việc lưu trữ
  • Undo tablespace: là các tablespace chứa dữ liệu undo, liên quan đến hoạt động của database, do Oracle quản lý. Chỉ có 1 undo tablespace trong database
  • Temporary tablespace: là các tablespace chứa dữ liệu tạm thời, liên quan đến hoạt động của database, cũng do Oracle quản lý. Có thể có nhiều temporary tablespace trong database

Về cách tổ chức, tablespace có thể được tổ chức theo 1 trong 2 kiểu:

  • Smallfile tablespace: tablespace gồm nhiều datafile, kích thước tối đa mỗi datafile phụ thuộc vào kích thước block (vd với block 8KB thì kích thước datafile tối đa là 32GB)
  • Bigfile tablespace: tablespace chỉ có 1 datafile duy nhất, tuy nhiên kích thước tối đa rất lớn (vd với block 8KB thì kích thước datafile tối đa là 32TB)

Chúng ta sẽ tìm hiểu chi tiết về tablespace ở trong các bài viết khác.

 

Tổng kết lại, ta thấy physical structure là các tập tin khác nhau, có mục đích khác nhau, lưu trữ trực tiếp trên hệ thống lưu trữ, nên phần lưu trữ này ta cần quan tâm tổ chức sắp xếp rõ ràng.

Còn ở logical structure, thường ta hay quan tâm quy hoạch việc lưu trữ ở mức độ tablespace, thỉnh thoảng cân nhắc block size cho phù hợp, và chống phân mảnh cho tablespace nếu dữ liệu quá rải rác, ảnh hưởng đến performance.