Kiến trúc Oracle Database Server

Tác giả server360, T.M.Một 21, 2013, 10:33:04 SÁNG

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Kiến trúc Oracle Database Server


I. Kết nối tới Oracle Server.
 
Một User có thể kết nối tới Oracle Server thông qua một trong ba cách sau.

  • User sẽ logon trực tiếp trên hệ thống đang chạy Oracle Instance và sử dụng các ứng dụng, công cụ để thao tác lên cơ sở dữ liệu của hệ thống này.
  • User sử dụng ứng dụng, công cụ từ một máy trạm nào đó và kết nối tới Oracle Server (mô hình Client-Server). Trong mô hình này chúng ta có 2 thành phần là: Front-End (client) và Back-End (Server) được kết nối thông qua mạng.
  • User sẽ truy xuất tới một máy chủ ứng dụng (Application Server) trung gian bằng các công cụ (như Web Browser chẳn hạn) từ một máy trạm (Client). Sau đó máy chủ ứng dụng trung gian này sẽ thay mặt Client tương tác với máy chủ cơ sỡ dữ liệu (Database Server).

Quá trình kết nối tới Database Instance.
 
Về User process và Server process: Về mặt lý thuyết thì User không thể thao tác trực tiếp tiếp trên cơ sỡ dữ liệu được. Mà User sẽ tạo ra các yêu cầu (gọi là User process), các yêu cầu này sẽ được gửi tới Server và Server sẽ thực hiện các yêu cầu này (Server Process) để tác động lên cơ sỡ dữ liệu.

Ở cơ sở dữ liệu Oracle, việc kết nối tới một Database Instance có hai khai niệm mà chúng ta cần biết đó là Connection và Session.

  • Connection: Là quá trình giao tiếp giữa một User Process và một Instance. Con đường liên lạc này có thể được thiết lập như một trong ba cách kết nối tới Oracle Server mà mình đã nói ở trên. Có nghĩa là một hệ thống có thể vừa chạy cả User Process và Oracle Database, hoặc có thể tách ra, kết nối thông qua một mạng.
  • Session: Là một kết nối cụ thể từ một User tới một Instance thông qua User Process. Ví dụ khi một User sử dụng SQL*Plus đăng nhập vào Oracle Server, nếu quá trình đăng nhập thất bại thì sẽ không có chuyện gì xãy ra. Nếu User đăng nhập thành công, thì một Session (phiên làm việc) sẽ được thiết lập từ đây. Session sẽ tồn tại cho tới khi User ngắt kết nối khỏi hệ thống.

II. Oracle Instance Architecture.

Kiến trúc tổng quát của Oracle Database Server.


Như trong hình cho thấy, kiến trúc của Oracle Server bao gồm 2 thành phần chính đó là: Oracle Instance và Oracle Database.

1. Oracle Database Memory Structure.


Oracle Database phân chia và sử dụng cấu trúc bộ nhớ theo nhiều mục đích khác nhau. Ví dụ bộ nhớ để lưu trữ đoạn code chương trình đang chạy, dữ liệu được share giữa các User hoặc các dữ liệu riêng tư cho mỗi kết nối của User đến Server...

Có hai cấu trúc bộ nhớ cơ bản trong một Instance.

  • System Global Area (SGA): Là vùng bộ nhớ chia sẻ được sử dụng để lưu trữ dữ liệu và các thông tin điều khiển của Oracle server. Được chỉ định khi một Instance được khởi động, và là thành phần cơ bản của một Oralce Instance.
  • Program Global Area (PGA): Là một phần cấu trúc bộ nhớ lưu trữ dành cho 1 User process kết nối tới 1 Instance bao gồm dữ liệu và thông tin điều khiển cho một Server hoặc một Background process. Được chỉ định khi một Server Process được khởi động.

a. Các thành phần trong System Global Area (SGA)

  • Shared pool: Được dùng để lưu trữ những đoạn SQL vừa được thực thi gần đây nhất và những định nghĩa dữ liệu được dùng gần đây nhất.


Ở Shared Pool bao gồm.

  • Library cache: Lưu trữ những định nghĩa về những đoạn lệnh SQL và PL/SQL vừa được thực thi gần đây nhất theo thuật giải Least Recently Used (LRU). Library cache bao gồm 2 cấu trúc là Shared SQL area và Shared PL/SQL area. Kích thước của vùng này được xác định bởi Shared pool sizing.
  • Data dictionary cache: Thu thập những định nghĩa được dùng gần đây nhất trên cơ sỡ dữ liệu bao gồm các thông tin về Database file, tables, indexes, columns, user, privileges,...Trong quá trình phân tích cú pháp đoạn lệnh, Server Process sẽ đọc các thông tin định nghĩa ở Data dictionary cache để lấy tên các đối tượng, xác nhận truy cập,...Kích thước của vùng này được xác định bởi Shared pool sizing.
  • Control structures.
  • Database Buffer Cache: Lưu trữ những bản copy của Block dữ liệu đã được đọc từ Data File. Khi một đoạn SQL được thực thi, thì Server Process sẽ đọc các thông tin từ Database buffer cache để lấy các block dữ liệu cần thiết, điều này giúp cho tốc độ hoạt động của hệ thống sẽ cao hơn vì đọc trên cache sẽ nhanh hơn là đọc trên đĩa cứng Smile. Nếu các block dữ liệu không có trong Database buffer cache thì Server process mới đọc dữ liệu từ data file. Database buffer cache cũng sử dụng thuật giải LRU như ở Shared Pool.


Database buffer cache bao gồm các thông số.

Mã nguồn [Chọn]
DB_CACHE_SIZE (bắt buộc)
    DB_KEEP_CACHE_SIZE (tùy chọn)
    DB_RECYCLE_CACHE_SIZE (tùy chọn)
    DB_nK_CACHE_SIZE (tùy chọn)
  • Redo Log Buffer: Là một bản ghi tạm thời, ghi lại tất cả những thay đổi trên các Data Block với mục đích chính là để phục hồi dữ liệu. Được thực hiện bởi các background process.


Một số đặc điểm của Redo log buffer.

  • Kích thước được xác định bởi tham số LOG_BUFFER.
  • Lưu trữ các redo records (bản ghi hồi phục) mỗi khi có thay đổi dữ liệu.
  • Redo log buffer được sử dụng một cách thường xuyên và các thay đổi bởi một transaction có thể nằm đan xen với các thay đổi của các transactions khác.
  • Bộ đệm được tổ chức theo kiểu circular buffer (bộ đệm nối vòng) tức là dữ liệu thay đổi sẽ tiếp tục được nạp lên đầu sau khi vùng đệm đã được sử dụng hết.
  • Large Pool: Cung cấp một vùng nhớ lớn, được cấp phát cho các trường hợp như: Vùng bộ nhớ cho UGA, xử lý I/O, sao lưu và phục hồi hệ thống. Không giống như Shared Pool, Large Pool không sử dụng thuật giải LRU. Tham số xác định của Large Pool là LARGE_POOL_SIZE.


  • Java Pool và Streams Pool: Java Pool là vùng dùng cho các Procedure viết bằng Java. Stream Pool dùng cho Oracle Stream.


b. Các thành phần trong Program Global Area (PGA)


Program Global Area (OGA) là vùng nhớ riêng tư bao gồm dữ liệu và thông tin điều khiển của một Server Process. Mỗi Server Process đều có một PGA riêng biệt. PGA bao gồm:

  • Session information.
  • Cursor information.
  • SQL execution work area.

2. Process Architecture.

Trong hệ thống Oracle Database thì Process có thể được chia làm ba nhóm là.

  • User Process: Bao gồm ứng dụng hay công cụ kết nối tới Oracle Database.
  • Database Process: Bao gồm Server Process và Background Process. Trong đó Server Process được tạo ra khi một Session được thiết lập. Còn Background Process được khởi động mỗi khi Instance được khởi động.
  • Daemon/Application Process: Bao gồm Networking listeners và Grid infrastructure daemons.

 
Về Server Process.

  • Đối với Dedicated Server: Một Server Process sẽ phục vụ cho 1 User Process (1-1).
  • Đối với Shares Server: Một Server Process sẽ phục vụ cho nhiều User Process (1-n)
  • Về Background Process: Thực hiện các chức năng thay cho lời gọi tiến trình xử lý tương ứng. Nó điều khiển vào ra, cung cấp các cơ chế xử lý song song nâng cao hiệu quả và độ tin cậy.

Có các Background Process.

  • Database writer process (DBWn)
  • Log Writer process (LGWR)
  • Checkpoint process (CKPT)
  • System monitor process (SMON)
  • Recoverer process (RECO)
  • Job queue coordinator (CJQ0)
  • Job slave processes (Jnnn)
  • Archiver processes (ARCn)
  • Queue monitor processes (QMNn)

Trong các Background Process trên thì DBWn, PMON, CKPT, LGWR, SMON và RECO là các Background Process bắt buộc phải có. Chúng ta hãy phân tích qua về chúng Smile.

Database Writer (DBWn)


Database Writer (DBWn) sẽ có nhiệm vụ ghi các modified (dirty) buffer từ Database buffer xuống đĩa (Data files).

Những trường hợp mà DBWn thực hiện công việc ghi trên.

  • Đã hết các free buffers.
  • Có quá nhiều dirty buffers.
  • Cứ mỗi 3 giây một lần.
  • Xảy ra Checkpoint.

Giải thích thêm về các trạng thái của buffer Smile.

  • Free: trống.
  • Pinned: Có Process đang thực thi trên buffer này.
  • Dirty: Nội dung trong buffer đã được thay đổi, cần được ghi xuống datafile.

Log Writer Process (LGWR)


Log Writer Process (LGWR): Có nhiệm vụ ghi các Redo log buffer xuống một Redo log file.Các trường hợp LGWR thực hiện công việc ghi trên:

  • Khi User Process thực hiện commit một transaction.
  • Khi Redo log buffer đã đầy.
  • Trước khi DBWn ghi dữ liệu xuống đĩa.
  • Cứ mỗi 3 giây một lần.
  • Checkpoint (CKPT):


  • Checkpoint (CKPT) có thể được coi như là một sự kiện khi thực hiện ghi tất cả các dirty buffer trong SGA, bao gồm cả những dữ liệu đã được commit và chưa được commit xuống Data files.

System Monitor Process (SMON)


System monitor process (SMON) có các nhiệm vụ.

  • Phục hồi lại những thay đổi trong redo logs.
  • Mở database cho User truy xuất.
  • Phục hồi các transactions chưa được commit.

Process Monitor Process (PMON)


Process Monitor Process (PMON) có nhiệm vụ "thu dọn" sau khi một Process thất bại:

  • Quay trở lại transaction.
  • Giải phóng blocks.
  • Giải phóng những tài nguyên khác.
  • Khởi động lại các dispathcers.
  • Tự động đăng ký Database services với Listeners

III. Oracle Database Architecture.

  • Oracle database là tập hợp các dữ liệu được xem như một đơn vị thành phần (Unit).
  • Database có nhiệm vụ lưu trữ và trả về các thông tin liên quan.
  • Database được xem xét dưới hai góc độ cấu trúc logic và cấu trúc vật lý . Tuy vậy, hai cấu trúc dữ liệu này vẫn tồn tại tách biệt nhau, việc quản lý dữ liệu theo cấu trúc lưu trữ vật lý không gây ảnh hưởng tới cấu trúc logic
  • Oracle database được xác định bởi tên một tên duy nhất và được quy định trong tham số DB_NAME của parameter file.


Cấu trúc vật lý và logic của Database.

1. Cấu trúc vật lý của Database.

Cấu trúc vật lý bao gồm tập hợp các control file, online redo log file và các datafile:

Datafiles.

Mỗi một Oracle database đều có thể có một hay nhiều datafiles. Các database datafiles chứa toàn bộ dữ liệu trong database. Các dữ liệu thuộc cấu trúc logic của database như tables hay indexes đều được lưu trữ dưới dạng vật lý trong các datafiles của database.

Một số tính chất của datafiles.

  • Mỗi datafile chỉ có thể được sử dụng trong một database.
  • Bên cạnh đó, datafiles cũng còn có một số tính chất cho phép tự động mở rộng kích thước mỗi khi database hết chỗ lưu trữ dữ liệu.
  • Một hay nhiều datafiles tạo nên một đơn vị lưu trữ logic của database gọi là tablespace.
  • Một datafile chỉ thuộc về một tablespace.

Dữ liệu trong một datafile có thể đọc ra và lưu vào vùng nhớ bộ đệm của Oracle. Ví dụ: khi một user muốn truy cập dữ liệu trong một table thuộc database. Trong trường hợp thông tin yêu cầu không có trong cache memory hiện thời, nó sẽ được đọc trực tiếp từ các datafiles ra và lưu trữ vào trong bộ nhớ.

Tuy nhiên, việc bổ sung hay thêm mới dữ liệu vào database không nhất thiết phải ghi ngay vào các datafile. Các dữ liệu có thể tạm thời ghi vào bộ nhớ để giảm thiểu việc truy xuất tới bộ nhớ ngoài (ổ đĩa) làm tăng hiệu năng sử dụng hệ thống. Công việc ghi dữ liệu này được thực hiện bởi DBWn background process.

Redo Log Files.

Mỗi Oracle database đều có một tập hợp từ 02 redo log files trở lên. Các redo log files trong database thường được gọi là database's redo log. Một redo log được tạo thành từ nhiều redo entries (gọi là các redo records).

Chức năng chính của redo log là ghi lại tất cả các thay đổi đối với dữ liệu trong database. Redo log files được sử dụng để bảo vệ database khỏi những hỏng hóc do sự cố. Oracle cho phép sử dụng cùng một lúc nhiều redo log gọi là multiplexed redo log để cùng lưu trữ các bản sao của redo log trên các ổ đĩa khác nhau.

Các thông tin trong redo log file chỉ được sử dụng để khôi phục lại database trong trường hợp hệ thống gặp sự cố và không cho phép viết trực tiếp dữ liệu trong database lên các datafiles trong database. Ví dụ: khi có sự cố xảy ra như mất điện bất chợt chẳng hạn, các dữ liệu trong bộ nhớ không thể ghi trực tiếp lên các datafiles và gây ra hiện tượng mất dữ liệu. Tuy nhiên, tất cả các dữ liệu bị mất này đều có thể khôi phục lại ngay khi database được mở trở lại. Việc này có thể thực hiện được thông qua việc sử dụng ngay chính các thông tin mới nhất có trong các redo log files thuộc datafiles. Oracle sẽ khôi phục lại các database cho đến thời điểm trước khi xảy ra sự cố.

Công việc khôi phục dữ liệu từ các redo log được gọi là rolling forward.

Control Files.

Mỗi Oracle database đều có ít nhất một control file. Control file chứa các mục thông tin quy định cấu trúc vật lý của database như:

  • Tên của database.
  • Tên và nơi lưu trữ các datafiles hay redo log files.
  • Time stamp (mốc thời gian) tạo lập database...

Mỗi khi nào một instance của Oracle database được mở, control file của nó sẽ được sử dụng để xác định data files và các redo log files đi kèm. Khi các thành phần vật lý cả database bị thay đổi (ví dụ như, tạo mới datafile hay redo log file), Control file sẽ được tự động thay đổi tương ứng bởi Oracle.
Control file cũng được sử dụng đến khi thực hiện khôi phục lại dữ liệu.

2. Cấu trúc Logic của Database.

Cấu trúc logic của Oracle database bao gồm các đối tượng tablespaces, schema objects, data blocks, extents, và segments.

Tablespaces.

Một database có thể được phân chia về mặt logic thành các đơn vị gọi là các tablespaces, Tablespaces thường bao gồm một nhóm các thành phần có quan hệ logic với nhau.


Mối quan hệ giữa Databases, Tablespaces, và Datafiles.

  • Mỗi database có thể phân chia về mặt logic thành một hay nhiều tablespace.
  • Mỗi tablespace có thể được tạo nên, về mặt vật lý, bởi một hoặc nhiều datafiles.
  • Kích thước của một tablespace bằng tổng kích thước của các datafiles của nó.
  • Kích thước của database cũng có thể xác định được bằng tổng kích thước của các tablespaces của nó.

Schema và Schema Objects.

Schema là tập hợp các đối tượng (objects) có trong database. Schema objects là các cấu trúc logic cho phép tham chiếu trực tiếp tới dữ liệu trong database. Schema objects bao gồm các cấu trúc như tables, views, sequences, stored procedures, synonyms, indexes, clusters, và database links.

Data Blocks, Extents, and Segments.


Oracle điểu khiển không gian lưu trữ trên đĩa cứng theo các cấu trúc logic bao gồm các data blocks, extents, và segments.

  • Oracle Data Blocks:Là mức phân cấp logic thấp nhất, các dữ liệu của Oracle database được lưu trữ trong các data blocks. Một data block tương ứng với một số lượng nhất định các bytes vật lý của database trong không gian đĩa cứng. Kích thước của một data block được chỉ ra cho mỗi Oracle database ngay khi database được tạo lập. Database sử dụng, cấp phát và giải phóng vùng không gian lưu trữ thông qua các Oracle data blocks.
  • Extents: Là mức phân chia cao hơn về mặt logic các vùng không gian trong database. Một extent bao gồm một số data blocks liên tiếp nhau, cùng được lưu trữ tại một thiết bị lưu giữ. Extent được sử dụng để lưu trữ các thông tin có cùng kiểu.
  • Segments: Là mức phân chia cao hơn nữa về mặt logic các vùng không gian trong database. Một segment là một tập hợp các extents được cấp phát cho một cấu trúc logic.