Tổng quan kiến trúc Oracle Database
Có ba cấu trúc chính trong kiến trúc Oracle Database: cấu trúc bộ nhớ(memory structures), cấu trúc tiến trình(Process structure) và cấu trúc lưu trữ(Storage structures). Một hệ thống cơ bản của cơ sở dữ liệu Oracle bao gồm một cơ sở dữ liệu Oracle(Oracle database) và một thể hiện cơ sở dữ liệu(Oracle Instance).
Cơ sở dữ liệu bao gồm cả các cấu trúc vật lý và cấu trúc logic. Bởi vì các cấu trúc vật lý và logic là riêng biệt, việc quản lý lưu trữ vật lý dữ liệu có thể được thực hiện mà không ảnh hưởng đến truy cập đến các cấu trúc lưu trữ logic.
Thể hiện cơ sở dữ liệu bao gồm các cấu trúc bộ nhớ và các tiến trình nền liên quan đến thể hiện đó. Mỗi khi một thể hiện được khởi động, một khu vực bộ nhớ chia sẻ được gọi là Khu vực Toàn cục Hệ thống (SGA) được phân bổ và các tiến trình nền được khởi động.
Tiến trình là các công việc được thực hiện trong bộ nhớ của máy tính. Một tiến trình được xác định là một "luồng điều khiển" hoặc một cơ chế trong hệ điều hành có thể chạy một loạt các bước.
Sau khi khởi động một thể hiện cơ sở dữ liệu (Database instance), phần mềm Oracle liên kết thể hiện(Instance) với một cơ sở dữ liệu cụ thể. Điều này được gọi là gắn kết cơ sở dữ liệu. Cơ sở dữ liệu sẽ sẵn sàng để mở, đó là khi người dùng được phép truy cập vào nó.
Lưu ý: Oracle Automatic Storage Management (ASM) sử dụng khái niệm thể hiện(Instance) cho các thành phần bộ nhớ và tiến trình, nhưng không liên quan đến một cơ sở dữ liệu cụ thể.
Mỗi trường hợp cơ sở dữ liệu liên kết với một và chỉ một database instance. Nếu có nhiều cơ sở dữ liệu trên cùng một máy chủ, thì sẽ có một database instance riêng biệt cho mỗi cơ sở dữ liệu. Một database instance không thể được chia sẻ.
Một cơ sở dữ liệu Real Applications Cluster (RAC) thường có nhiều instance trên các máy chủ riêng biệt cho cùng một cơ sở dữ liệu chia sẻ. Trong mô hình này, cùng một cơ sở dữ liệu được liên kết với mỗi instance RAC, đáp ứng yêu cầu rằng tối đa chỉ có một cơ sở dữ liệu được liên kết với một instance.
Kết nối và phiên (connections và sessions) liên quan mật thiết đến các quy trình người dùng nhưng có ý nghĩa rất khác nhau.
Một kết nối là một đường truyền thông tin giữa một quy trình(process) người dùng và một instance cơ sở dữ liệu Oracle(Oracle database instance). Một đường truyền thông tin được thiết lập bằng cách sử dụng các cơ chế giao tiếp giữa các quy trình (trên máy tính chạy cả quy trình người dùng và cơ sở dữ liệu Oracle) hoặc phần mềm mạng (khi các máy tính khác nhau chạy ứng dụng cơ sở dữ liệu và Oracle Database, và giao tiếp thông qua mạng).
Một phiên đại diện cho trạng thái của một đăng nhập người dùng hiện tại vào Oracle database instance. Ví dụ, khi người dùng bắt đầu SQL * Plus, người dùng phải cung cấp tên người dùng và mật khẩu hợp lệ, sau đó một phiên được thiết lập cho người dùng đó.
Một phiên tồn tại từ thời điểm người dùng kết nối cho đến khi người dùng ngắt kết nối hoặc thoát khỏi ứng dụng cơ sở dữ liệu.
Nhiều phiên có thể được tạo ra và tồn tại đồng thời cho một người dùng cơ sở dữ liệu Oracle duy nhất sử dụng cùng một tên đăng nhập. Ví dụ, một người dùng có tên đăng nhập / mật khẩu là HR / HR có thể kết nối đến trường hợp cơ sở dữ liệu Oracle cùng một lúc.
Kiến trúc Oracle database memory
Oracle Database tạo và sử dụng các cấu trúc bộ nhớ cho các mục đích khác nhau. Ví dụ, bộ nhớ lưu trữ mã chương trình đang chạy, dữ liệu được chia sẻ giữa người dùng và các khu vực dữ liệu riêng tư cho từng người dùng đã kết nối.
Hai cấu trúc bộ nhớ cơ bản được liên kết với một instance như sau:
- Vùng toàn cục hệ thống (System Global Area - SGA): Nhóm các cấu trúc bộ nhớ được chia sẻ, được gọi là các thành phần SGA, chứa dữ liệu và thông tin điều khiển cho một instance Oracle Database. SGA được chia sẻ bởi tất cả các tiến trình máy chủ và nền tảng. Ví dụ về dữ liệu được lưu trữ trong SGA bao gồm các khối dữ liệu được bộ đệm và các khu vực SQL được chia sẻ.
- Khu vực toàn cục chương trình (Program Global Area - PGA): Vùng bộ nhớ chứa dữ liệu và thông tin điều khiển cho một tiến trình máy chủ hoặc nền tảng. PGA là bộ nhớ không được chia sẻ được tạo ra bởi Oracle Database khi một tiến trình máy chủ hoặc nền tảng bắt đầu. Truy cập vào PGA là độc quyền đối với quá trình máy chủ. Mỗi tiến trình máy chủ và nền tảng có một PGA riêng của nó.
System Global Area - SGA:
SGA là khu vực bộ nhớ chứa dữ liệu và thông tin điều khiển cho phiên bản cài đặt. SGA bao gồm các cấu trúc dữ liệu sau đây:
- Share pool (Bể bộ nhớ chung): Lưu trữ các cấu trúc khác nhau có thể được chia sẻ giữa các người dùng.
- Database Buffer Cache(Bộ đệm bộ nhớ cơ sở dữ liệu): Lưu trữ các khối dữ liệu được lấy từ cơ sở dữ liệu.
- Redo Log Buffer(Bộ đệm ghi lại): Lưu trữ thông tin redo (được sử dụng cho phục hồi phiên bản) cho đến khi nó có thể được ghi vào các tệp redo vật lý được lưu trữ trên đĩa.
- Large Pool: Vùng tùy chọn cung cấp các phân bổ bộ nhớ lớn cho một số quy trình lớn cụ thể, chẳng hạn như các hoạt động sao lưu và khôi phục Oracle và các quy trình máy chủ I/O.
- Java Pool(Bể bộ nhớ Java): Sử dụng cho tất cả các mã Java cụ thể cho phiên và dữ liệu trong Java Virtual Machine (JVM).
- Steams Pool: Được sử dụng bởi Oracle Streams để lưu trữ thông tin yêu cầu bởi capture và apply.
- Fixed SGA: Một khu vực quản lý nội bộ chứa thông tin tổng quát về trạng thái của cơ sở dữ liệu và phiên bản cài đặt và thông tin truyền tải giữa các quy trình.
Khi bạn khởi động phiên bản cài đặt, lượng bộ nhớ được phân bổ cho SGA sẽ được hiển thị.
(Xem bài viết chi tiết về System Global Area - SGA)
Program Global Area(PGA):
Một Program Global Area (PGA) là một vùng nhớ chứa dữ liệu và thông tin điều khiển cho mỗi tiến trình máy chủ. Một tiến trình máy chủ Oracle phục vụ các yêu cầu của client.
Mỗi tiến trình máy chủ có một PGA riêng được phân bổ khi tiến trình máy chủ được khởi động. Truy cập vào PGA chỉ được cho phép đối với tiến trình máy chủ đó, và PGA chỉ được đọc và ghi bởi mã Oracle thực hiện thay mặt cho tiến trình đó. PGA được chia thành hai khu vực chính: không gian stack(stack space) và khu vực toàn cục người dùng (UGA).
Với cơ sở hạ tầng SGA động, kích thước của database buffer cache, shared pool, large pool, Java pool, và Streams pool có thể thay đổi mà không cần tắt bỏ phiên. Máy chủ cơ sở dữ liệu Oracle sử dụng các thông số khởi tạo để tạo và quản lý các cấu trúc bộ nhớ.
Cách đơn giản nhất để quản lý bộ nhớ là cho phép cơ sở dữ liệu tự động quản lý và điều chỉnh nó cho bạn. Để làm điều này (trên hầu hết các nền tảng), bạn chỉ cần thiết lập thông số khởi tạo kích thước bộ nhớ mục tiêu (MEMORY_TARGET) và thông số khởi tạo kích thước bộ nhớ tối đa (MEMORY_MAX_TARGET).
Kiến trúc Oracle Process Architecture
Server Processes
Oracle Database tạo ra các server processes để xử lý các yêu cầu của các user processes đã kết nối với instance. User process đại diện cho ứng dụng hoặc công cụ kết nối đến cơ sở dữ liệu Oracle.
Nó có thể nằm trên cùng một máy với cơ sở dữ liệu Oracle, hoặc nó có thể tồn tại trên một máy khách từ xa và sử dụng một mạng để kết nối đến cơ sở dữ liệu Oracle.
Đầu tiên, User process giao tiếp với một tiến trình nghe (listener process) tạo ra một server process trong một môi trường được cấp phát riêng biệt.
Các server processes được tạo ra đại diện cho ứng dụng của từng user có thể thực hiện một hoặc nhiều trong các công việc sau đây:
Background Processes
Để tối đa hóa hiệu suất và phục vụ nhiều người dùng, một hệ thống Oracle Database đa tiến trình sử dụng một số tiến trình Oracle Database(Oracle database processes) bổ sung được gọi là các tiến trình nền(Background Processes). Một Oracle Database Instance có thể có nhiều tiến trình nền.
Các tiến trình nền thông thường được thấy trong môi trường không sử dụng RAC, không sử dụng ASM bao gồm các tiến trình sau:
- Tiến trình Database Writer (DBWn)
- Tiến trình Log Writer (LGWR)
- Tiến trình Checkpoint (CKPT)
- Tiến trình giám sát hệ thống (SMON)
- Tiến trình giám sát quá trình (PMON)
- Tiến trình phục hồi (RECO)
- Tiến trình đăng ký trình nghe (LREG)
- Tiến trình giám sát khả năng quản lý (MMON)
- Tiến trình giám sát khả năng quản lý nhẹ (MMNL)
- Tiến trình điều phối hàng đợi công việc (CJQ0)
- Các tiến trình con công việc (Jnnn)
- Tiến trình lưu trữ (ARCn)
- Tiến trình giám sát hàng đợi (QMNn)
Ngoài ra, các tiến trình nền khác có thể được tìm thấy trong các cấu hình nâng cao hơn như RAC. Xem thông tin thêm về các tiến trình nền trong view V$BGPROCESS.
Một số tiến trình nền được tạo tự động khi một instance được khởi động, trong khi các tiến trình khác chỉ được khởi động khi cần thiết.
Các Processes Structure khác không được chỉ định cho một cơ sở dữ liệu duy nhất, mà có thể được chia sẻ giữa nhiều cơ sở dữ liệu trên cùng một máy chủ. Hạ tầng lướivà các tiến trình (Grid Infrastructure and networking process) mạng là thuộc loại này.
Các tiến trình Oracle Grid Infrastructure trên hệ thống Linux và UNIX bao gồm những tiến trình sau đây:
- ohasd (Oracle High Availability Service daemon): Đảm nhiệm khởi động các tiến trình Oracle Clusterware.
- ocssd: Tiến trình dịch vụ đồng bộ hóa cụm.
- diskmon (Disk Monitor daemon): Đảm nhiệm cho việc ngăn chặn các truy cập vào dữ liệu không đồng bộ trên hệ thống Oracle Exadata Storage.
- cssdagent: Khởi động, dừng và kiểm tra trạng thái của tiến trình CSS daemon, ocssd.
- oraagent: Mở rộng Clusterware để hỗ trợ các yêu cầu và nguồn tài nguyên đặc thù của Oracle.
- orarootagent: Là một tiến trình đặc biệt của Oracle agent giúp quản lý các tài nguyên thuộc quyền sở hữu của người dùng root, chẳng hạn như mạng.
Lưu ý: Để có danh sách chi tiết hơn về các tiến trình nền, hãy tham khảo hướng dẫn Cơ sở dữ liệu Oracle.
BÀI VIẾT LIÊN QUAN
Kiến trúc Oracle Database Storage Architecture
Kiến trúc Oracle Automatic Storage Management
Automatic Storage Management (ASM) cung cấp tích hợp dọc của hệ thống files và trình quản lý block cho các tập tin cơ sở dữ liệu Oracle. ASM có thể cung cấp quản lý cho các máy đơn đối xứng đa tiến trình (SMP) hoặc trên nhiều nút(node) của một cụm(Cluster) để hỗ trợ Real Application Clusters (RAC) của Oracle.
Hệ thống tập tin cụm(file cluster) Oracle ASM (ACFS) là một công nghệ quản lý lưu trữ và hệ thống tập tin có khả năng mở rộng trên nhiều nền tảng, và mở rộng chức năng ASM để hỗ trợ các tập tin ứng dụng bên ngoài Cơ sở dữ liệu Oracle, chẳng hạn như các tập tin thực thi, báo cáo, BFILE, video, âm thanh, văn bản, hình ảnh và dữ liệu tập tin ứng dụng khác.
ASM phân phối tải I/O trên tất cả các tài nguyên có sẵn để tối ưu hóa hiệu suất trong khi loại bỏ nhu cầu điều chỉnh I/O thủ công. ASM giúp các quản trị viên cơ sở dữ liệu (DBA) quản lý môi trường cơ sở dữ liệu động bằng cách cho phép tăng kích thước cơ sở dữ liệu mà không cần tắt cơ sở dữ liệu để điều chỉnh phân bổ lưu trữ.
ASM có thể duy trì các bản sao dữ liệu để cung cấp khả năng chống lỗi hoặc có thể được xây dựng trên các cơ chế lưu trữ được cung cấp bởi nhà cung cấp. Quản lý dữ liệu được thực hiện bằng cách chọn các đặc tính đáng tin cậy và hiệu suất cho các lớp dữ liệu thay vì tương tác con người trên cơ sở từng tập tin.
Các khả năng ASM tiết kiệm thời gian của DBA bằng cách tự động hóa lưu trữ thủ công và do đó tăng hiệu suất, giảm chi phí và đảm bảo khả năng mở rộng của hệ thống.
ASM không loại bỏ bất kỳ chức năng cơ sở dữ liệu hiện có nào. Các cơ sở dữ liệu hiện có vẫn có thể hoạt động như trước đây. Các tập tin mới có thể được tạo ra dưới dạng tập tin ASM, trong khi các tập tin hiện có được quản lý theo cách cũ hoặc có thể được di chuyển sang ASM.
Sơ đồ phía trên đây minh họa mối quan hệ giữa tập tin dữ liệu cơ sở dữ liệu Oracle và các thành phần lưu trữ ASM. Notation crow’s foot biểu thị mối quan hệ một-nhiều. Một tập tin dữ liệu cơ sở dữ liệu Oracle có mối quan hệ một-một với một tập tin được lưu trữ trên hệ thống hoạt động trong hệ thống tập tin hoặc một tập tin ASM.
Một nhóm đĩa ASM Oracle là một bộ sưu tập của một hoặc nhiều đĩa ASM Oracle được quản lý như một đơn vị logic. Các cấu trúc dữ liệu trong một nhóm đĩa được tự chứa bằng cách sử dụng một số không gian cho các nhu cầu siêu dữ liệu.
Các đĩa ASM Oracle là các thiết bị lưu trữ được cung cấp cho một nhóm đĩa ASM Oracle và có thể là đĩa vật lý hoặc phân vùng, một số đơn vị số (LUN) từ mảng lưu trữ, một khối logic (LV), hoặc một tập tin được kết nối mạng. Mỗi đĩa ASM được chia thành nhiều đơn vị phân bổ ASM, đó là số lượng không gian đĩa nhỏ nhất liên tục mà ASM phân bổ.
Khi bạn tạo một nhóm đĩa ASM, bạn có thể thiết lập kích thước đơn vị phân bổ ASM là 1, 2, 4, 8, 16, 32 hoặc 64 MB tùy thuộc vào cấp độ tương thích của nhóm đĩa. Một hoặc nhiều đơn vị phân bổ ASM tạo thành một phạm vi ASM.
Một phạm vi ASM Oracle là không gian lưu trữ nguyên chất được sử dụng để chứa nội dung của một tập tin ASM Oracle.
Một tập tin ASM Oracle bao gồm một hoặc nhiều phạm vi tập tin. Kích thước phạm vi thay đổi của 1 * kích thước đơn vị phân bổ, 4 * kích thước đơn vị phân bổ, và 16* kích thước đơn vị phân bổ được sử dụng để hỗ trợ cho các file lớn ASM.
Kiến trúc Oracle Container Database
Pluggable Database (PDB) là một tập hợp các schema cơ sở dữ liệu mà về mặt logic, nó xuất hiện như một cơ sở dữ liệu riêng biệt đối với người dùng và các ứng dụng. Tuy nhiên, ở mức vật lý, cơ sở dữ liệu Multitenant Container Database (CDB) có một instance cơ sở dữ liệu và các tập tin cơ sở dữ liệu giống như một cơ sở dữ liệu không phải container.
Việc cắm(plugin) các cơ sở dữ liệu None-CDB vào CDB rất dễ dàng. Một CDB tránh sự trùng lặp của các tiến trình nền, phân bổ bộ nhớ và các siêu dữ liệu Oracle trong một số từ điển dữ liệu.
Một CDB tổng hợp một số ứng dụng có một instance, do đó có một tập các tiến trình nền, phân bổ SGA và từ điển dữ liệu duy nhất trong container gốc, chung cho tất cả các PDB, mỗi PDB giữ từ điển dữ liệu ứng dụng riêng của nó.
Khi các ứng dụng cần được vá hoặc nâng cấp, thao tác bảo trì chỉ được thực hiện một lần trên CDB và do đó, tất cả các ứng dụng được cập nhật cùng một lúc.
Hình trên mô tả về một CDB (multitenant container database) với bốn container: root, seed và hai PDB. Hai ứng dụng HR và SALES sử dụng một instance và được bảo trì riêng biệt. Ở mức vật lý, CDB có một instance cơ sở dữ liệu và các tập tin cơ sở dữ liệu như một cơ sở dữ liệu không phải container.
Các thông tin redo log files được sử dụng chung cho toàn bộ CDB. Thông tin này có chứa thông tin về PDB - nơi xảy ra thay đổi. Oracle GoldenGate được tối ưu hóa để hiểu định dạng redo log cho CDB. Tất cả các PDB trong một CDB chia sẻ chế độ ARCHIVELOG của CDB.
Control files được sử dụng chung cho toàn bộ CDB. Control files được cập nhật để phản ánh bất kỳ bảng không gian lưu trữ và tập tin dữ liệu nào của PDBs đã được Plugin. Undo tablespace được sử dụng chung cho tất cả các container.
Một temporary tablespace chung cho tất cả các container là bắt buộc. Nhưng mỗi PDB có thể giữ temporary tablespace riêng cho người dùng địa phương(Local) của mình.
Mỗi container có bảng điều khiển dữ liệu của riêng mình được lưu trữ trong bảng không gian SYSTEM của chính nó, chứa siêu dữ liệu của chính nó, và một bảng không gian SYSAUX.
Các PDB có thể tạo các bảng không gian theo nhu cầu ứng dụng của mình. Mỗi tập tin dữ liệu được liên kết với một container cụ thể, được đặt tên là CON_ID.
Tương tác với cơ sở dữ liệu oracle: Memory, Process và Storage
Ví dụ dưới đây mô tả các hoạt động của cơ sở dữ liệu Oracle ở mức cơ bản nhất. Nó minh họa một cấu hình cơ sở dữ liệu Oracle trong đó người dùng và quá trình máy chủ liên kết với nhau thông qua mạng.
- Một Instance đã được khởi động trên một node nơi Oracle Database được cài đặt, thường được gọi là máy chủ hoặc máy chủ cơ sở dữ liệu.
- Người dùng khởi động một ứng dụng và tạo ra một User processes. Ứng dụng cố gắng thiết lập kết nối với máy chủ. (Kết nối có thể là cục bộ, máy khách / máy chủ hoặc một kết nối ba lớp từ tầng trung gian.)
- Máy chủ chạy một trình nghe(Listener) có bộ xử lý Oracle Net Services phù hợp. Trình nghe phát hiện yêu cầu kết nối từ ứng dụng và tạo ra một tuyến trình máy chủ(Server processes) được dành riêng cho User Process.
- Người dùng chạy một câu lệnh SQL loại DML và sau đó thực hiện lệnh Commit. Ví dụ, người dùng thay đổi địa chỉ của một khách hàng trong một bảng khách hàng và commit các thay đổi.
- Quá trình máy chủ(Server Processes) nhận câu lệnh và kiểm tra shared pool (một thành phần trong SGA) để tìm bất kỳ khu vực SQL chia sẻ nào chứa một câu lệnh SQL giống như câu sql mà user processes gữi vào. Nếu tìm thấy khu vực SQL chia sẻ, quá trình máy chủ kiểm tra quyền truy cập dữ liệu được yêu cầu của người dùng và sử dụng khu vực SQL chia sẻ hiện có để xử lý câu lệnh. Nếu không tìm thấy khu vực SQL chia sẻ, một khu vực SQL chia sẻ mới được phân bổ cho câu lệnh để có thể phân tích cú pháp và xử lý.
- Quá trình máy chủ(Server Processes) truy xuất các giá trị dữ liệu cần thiết, data file thực (table) hoặc từ các giá trị được lưu trữ trong bộ đệm đệm cơ sở dữ liệu(Buffer database).
- Quá trình tiếp theo, tiến trình máy chủ thay đổi dữ liệu trong SGA. Vì giao dịch được Commit, tiến trình Ghi Log (LGWR) ngay lập tức ghi lại giao dịch trong tập tin redo log. Quá trình ghi cơ sở dữ liệu (DBWn) bắt đầu ghi các khối(Blocks) đã được sửa đổi vĩnh viễn vào đĩa.
- Nếu giao dịch thành công, tiến trình máy chủ gửi một thông điệp qua mạng đến ứng dụng. Nếu không thành công, một thông báo lỗi được bắn ra.
- Trong suốt quá trình này, các tiến trình nền(Background Processes) khác cũng đang chạy, giám sát các điều kiện đòi hỏi can thiệp. Ngoài ra, máy chủ cơ sở dữ liệu quản lý các giao dịch của người dùng khác và ngăn chặn sự tranh chấp giữa các giao dịch yêu cầu cùng một dữ liệu.