Hiển thị các bài đăng có nhãn data dictionary. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn data dictionary. Hiển thị tất cả bài đăng

Thứ Ba, 1 tháng 7, 2014

[Oracle cơ bản] Database Instance

Nội dung:
  • Giới thiệu Database Control, Enterprise Manger.
  • Tham số cấu hình hệ thống Initialization Parameters
  • Các trạng thái của database khi startup.
  • Các lựa chọn khi shutdown database.
  • Đề cập Alert log và Trace files.
  • Giới thiệu Dynamic performance views.
I - Giới thiệu Database Control, Enterprise Manger
Oracle Database cung cấp một giao diện quản lý độc lập (stand-alone management console) database gọi là Database Control. Mỗi database control chỉ quản lý 1 database duy nhất. Enterprise manager là một Web-based database control. Các câu lệnh liên quan đến enterprise manager
emctl status dbconsole
emctl start dbconsole
emctl stop dbconsole
Chú ý, để sử dụng những câu lệnh này, cần set biến môi trường, ở ví dụ của mình là "orcl"

Khi start enterprise manager lên, ta có thể truy cập vào giao diện web để xem. Đường dẫn có dạng
https://ip_server:port/em
Trong đó:
- ip_server là ip của server database
- port kết nối, mặc định là 1158 (nhớ mở kết nối iptables cho port này). Có thể cấu hình lại port này trong file $ORACLE_HOME/install/portlist.ini

II - Initialization Parameter Files
Initialization parameter file là file chứa những tham số cấu hình cho database. Những file dạng này sẽ được đọc khi start instance.

1. Phân biệt hai loại file cấu hình
  1. Server parameter file (SPFILE): Dạng file binary được đọc và ghi bởi server, chúng ta đừng nên đụng vào file này vì là dạng binary nên có đụng vào cũng không hiểu được ^^. SPFILE nằm trên server. Tên mặc định của file này có dạng "spfile<SID>.ora".
  2. Text initialization parameter file (PFILE): Dạng file này có thể được đọc bởi server, nhưng server không thể ghi được. PFILE là dạng text nên người thường có thể đọc được bằng mắt. PFILE vừa nằm trong server, vừa phải có 1 bản copy trên client. Dạng file "init<SID>.ora"
Tăng giá trị cho các tham số parameters có thể găng performance của hệ thống, tuy nhiên đòi hỏi tăng kích thước SGA.

Oracle tìm kiếm parameter file theo thứ tự
  1. Tìm file spfile<SID>.ora trong $ORACLE_HOME/dbs.
  2. Tìm file spfile.ora trong $ORACLE_HOME/dbs.
  3. Tìm file init<SID>.ora trong $ORACLE_HOME/dbs.
2. Phân biệt hai dạng của Initialization Parameter File
Có 2 dạng: basic và advance
Oracle khuyên rằng, trong phần lớn các trường hợp ta chỉ cần sửa 30 basic parameters để tăng performance cho database.
Một số ví dụ về basic parameters:
  • DB_NAME và DB_DOMAIN để xác định tên global của database.
  • Kích thước tổng cộng của SGA: SGA_TARGET.
Một số ví dụ về Initialization Parameters File
  • CONTROL_FILES: chỉ định số lượng control filenames cho database. Oracle đề nghị ít nhất có 2 control file cho mỗi database.
  • DB_FILES: chỉ định tối đa bao nhiêu database files được opened cho 1 database. Giá trị mặc định : 200.
  • PROCESSES: giới hạn số lượng tối đa user processes có thể đồng thời kết nối đến Oracle server. Giá trị mặc định: 100.
  • DB_BLOCK_SIZE: xác định kích thước (bytes) của 1 Oracle database block.
  • DB_CACHE_SIZE: xác định kích thước chuẩn của block buffer cache.
SGA_TARGET
Xác định tổng kích thước vùng SGA, bao gồm các thành phần con bên trong nó. Nếu cấu hình cho SGA_TARGET, thì vùng nhớ của các thành phần con bên trong cũng được tự động cấu hình theo, bao gồm:
  • Buffer cache (DB_CACHE_SIZE).
  • Shared pool (SHARED_POOL_SIZE).
  • Large pool (LARGE_POOL_SIZE).
  • Java pool (JAVA_POOL_SIZE).
  • Streams pool (STREAMS_POOL_SIZE).
3. Thay đổi giá trị trong Initialization Paramter
Chia làm 2 loại tham số: static parameters và dynamic parameters
1. Static parameters: Thay đổi static paramters đòi hỏi phải restart lại database để thay đổi có hiệu lực.
2. Dynamic parameters: Có thể thay đổi được ngay khi database đang chạy. Chia làm 2 loại
- Session-level parameters: chỉ ảnh hưởng trong 1 user session. Sẽ hết tác dụng khi kết thúc user session đó.
- System-level parameters: ảnh hưởng đến toàn bộ database và các session khác trong hệ thống.

4. Tầm vực giá trị trong Initialization Paramter
Giá trị tham số SCOPE áp dụng khi thay đổi static hay dynamic parameters:
  • SCOPE=SPFILE: chỉ thay đổi trên SPFILE. Và chỉ có hiệu lực lần startup tiếp theo của database. Chỉ áp dụng cho static parameters.
  • SCOPE=MEMORY: thay đổi áp dụng trên memory. Có hiệu lực ngay lập tức. Không áp dụng cho static parameters.
  • SCOPE=BOTH: thay đổi áp dụng cả trên SPFILE và memory. Đối với dynamic parameters sẽ có hiệu lực ngay lập tức và ngay cả lần startup tiếp theo của database do đã lưu trên SPFILE. Còn đối với static parameters thì chế độ này không được phép. (Vì static parameters không thể nào có hiệu lực ngay lập tức nên có lưu trên memory cũng vô tác dụng).
Ví dụ
ALTER SESSION SET NLS_DATE_FORMAT = 'mon dd yyyy';
ALTER SYSTEM SET SEC_MAX_FAILED_LOGIN_ATTEMPTS=2 COMMENT='Reduce from 10 for tighter security.' SCOPE=SPFILE;

III - Các trạng thái của database khi startup
Khi start database instance, có nhiều trạng thái để lựa chọn vị trí bắt đầu start: NOMOUNT, MOUNT, OPEN.

1. Chế độ NOMOUNT
Các công việc thực hiện trong chế độ NOMOUNT:
  • Tìm kiếm initialization parameter file theo thứ tự: kiếm spfile<SID>.ora đầu tiên, nếu không có kiếm spfile.ora, nếu không có nữa thì kiếm init<SID>.ora.
  • Cấp phát vùng nhớ SGA.
  • Start background processes.
  • Mở alert<SID>.log file và trace files.
2. Chế độ MOUNT
Các công việc thực hiện trong chế độ MOUNT:
  • Kế thừa trạng thái database ở chế độ NOMOUNT.
  • Xác định vị trí và open tất cả các control files xác định trong parameter file.
  • Đọc từ control files để lấy ra tên và trạng thái hoạt động của data files và online redo log files. Tuy nhiên, bước này không cần kiểm tra sự tồn tại thực sự của data files và online redo log files.
Một số trường hợp sử dụng chế độ MOUNT nhưng không cần OPEN database:
  • Rename data files.
  • Enable hoặc Disable online redo log file archiving.
  • Performing full database recovery.
3. Chế độ OPEN
Trạng thái hoạt động của database tức là instance được started và datase được mounted và opented để bất kì user hợp lệ nào cũng đều có thể kết nối được đến database.
Các công việc thực hiện trong chế độ OPEN:
  • Open data files
  • Open online redo log files
Trong bước cuối cùng này, Oracle server sẽ kiểm tra tất cả data files và online redo log files phải được opened và kiểm tra luôn tính nhất quán (consistency) của database. Nếu không đảm bảo điều kiện này, Oracle server sẽ văng lỗi trả về.


4. Ví dụ sử dụng sqlplus để start instance
Start instance, sau đó mount và open database
SQL> startup
Start instance và database ở chế độ NOMOUNT
SQL> startup nomount
Lệnh mount database từ trạng thái NOMOUNT
SQL> alter database mount;
Lệnh open database từ trạng thái MOUNT
SQL> alter database open;

Ngoài ra, khi cài đặt Oracle Restart, có thể sử dụng srvctl utility để start database instance. Ưu điểm khi dùng srvctl utility là nó có thể start tất cả các resource khác như ASM instance, ASM disk groups và listener.

IV - Các lựa chọn khi shutdown database
Có 4 chế độ shutdown:
  1. NORMAL: chờ đến khi tất cả session disconnect, là loại shutdown chậm nhất.
  2. TRANSACTIONAL: cho phép những transaction hiện tại kết thúc, nhưng không cho phép tạo mới transaction nữa.
  3. IMMEDIATE: loại thường được sử dụng nhất. Những transaction nào chưa commit sẽ bị roll back.
  4. ABORT: thực hiện ít công việc nhất có thể trước khi shutdown, là loại shutdown nhanh nhất. Khi sử dụng shutdown ABORT thì lần start tới sẽ đòi hỏi chạy instance recovery.

Quá trình shutdown ở các chế độ: NORMAL, TRANSACTIONAL, IMMEDIATE
1. NORMAL
Là chế độ mặc định (sử dụng SQL*PLUS) khi shutdown nếu không chỉ định cụ thể shutdown ở chế độ nào. NORMAL shutdown chỉ thực hiện trong những điều kiện sau:
  • Không tạo thêm connection mới.
  • Chờ cho tất cả users disconnect.
  • Database và redo buffers được ghi xuống disk.
  • Tắt background processes và thu hồi vùng nhớ của SGA.
  • Oracle server close và dismount database trước khi shutdown instance.
  • Lần start kế tiếp không cần instance recovery.
  • Bảo toàn tính toàn vẹn database.
2. TRANSACTION
Chế độ này đảm bảo dữ liệu của client không bị mất, chờ đến khi transaction của client hoàn thành. Thực hiện trong các điều kiện sau:
  • Không cho tạo mới transaction từ client.
  • Client sẽ bị disconnect khi kết thúc transaction.
  • Khi tất cả các transaction hoàn tất, thực hiện shutdown ngay lập tức.
  • Lần start kế tiếp không cần instance recovery.
  • Bảo toàn tính toàn vẹn database.
3. IMMEDIATE
Là chế độ default khi thực hiện shutdown trong Enterprise Manager.
Thực hiện trong điều kiện:
  • Những câu lệnh SQL nào đang chạy sẽ bị ngắt.
  • Oracle server không chờ user tự disconnect khỏi database.
  • Roll back tất cả transactions và disconnect tất cả users.
  • Close và dismount database trước khi shutdown instance.
  • Lần start kế tiếp không cần instance recovery.
  • Bảo toàn tính toàn vẹn database.
Quá trình shutdown ABORT
4. ABORT
Thực hiện trong các điều kiện:
  • Những câu lệnh SQL nào đang chạy sẽ bị ngắt.
  •  Oracle server không chờ user tự disconnect khỏi database.
  • Database và redo buffers không được ghi xuống disks.
  • Uncommitted transactions không được roll back.
  • Instance sẽ bị tắt mà không đóng lại các files.
  • Database không được closed và dismounted.
  • Lần start tiếp theo yêu cầu chế độ instance recovery. 
  • Không bảo toàn tính toàn vẹn của database.
V - Alert Log và Trace Files
Phần này chủ yếu nói về phần ghi log các tác động đến DB, hay các lỗi phát sinh khi server và background processes chạy.

VI - Dynamic Performace Views
Phần này đề cập 2 khái niệm về Dynamic Performance Views và Data Dictionary Views

1. Dynamic Performance Views
Là những bảng ảo lưu trữ trên memory structure của database, bắt đầu bằng từ khóa "v$", chứa thông tin vận hành và hiệu năng (performance) của database instance.
Dynamic performance views chứa các thông tin gồm:
  • Sessions
  • File states
  • Tiến trình
  • Locks
  • Backup status
  • Cấp phát và sử dụng memory
  • System và session parameters
  • SQL execution
Một số ví dụ về cách sử dụng dynamic performance views:
Lấy ra câu truy vấn nào có thời gian CPU thực hiện trên 200,000 microseconds
SQL> SELECT sql_text, executions FROM v$sql WHERE cpu_time > 200000;
Lấy ra các sessions IDs đang dữ lock
SQL> SELECT sid, ctime FROM v$lock WHERE block > 0;

2. Data Dictionary
Chứa thông tin metadata của database, bao gồm tên và thuộc tính của tất cả các objects trong database. Những thay đổi ảnh hưởng đến bất kì object nào trong database đều được update vào data dictionary.
Data dictionary dùng để:
  • Được Oracle database server dùng để tìm kiếm thông tin users, objects, constraints, lưu trữ.
  • Được vận hành bởi Oracle database server.
  • User có thể truy vấn thông tin về database thông qua các view truy xuất thông tin từ data dictionary.
  • Được sở hữu bởi user SYS.
  • Không nên chỉnh sửa trực tiếp thông qua câu SQL vào những thông tin của data dictionary.
Một số loại view chính trong Data dictionary
- Prefix DBA_ : được xem tất cả thông tin và  một số thông tin chỉ dành cho DBA, chỉ có người dùng có quyền DBA mới xem được.
- Prefix ALL_ : được xem tất cả thông tin objects mà user được cấp quyền xem, bất kể đối objects đó có thuộc sở hữu của user đó hay không.
- Prefix USER_ : có tầm vực nhỏ nhất, chỉ được xem thông tin những objects mà user sở hữu.

Một số ví dụ về truy vấn thông tin trong data dictionary view
Lấy thông tin table_name, tablespace_name trong shema đang sử dụng:
SELECT table_name, tablespace_name FROM user_tables;
Lấy thông tin các user có thể log in vào hệ thống:
SELECT username, account_status FROM dab_users WHERE account_status = 'OPEN';


Link tham khảo:

Thứ Năm, 26 tháng 6, 2014

[Oracle cơ bản] Kiến trúc Oracle Database

Các nội dung chính:
  • Liệt kê các thành phần quan trọng trong Oracle Database.
  • Mô tả thành phần memory (memory structure).
  • Mô tả các tiến trình background processes.
  • Cấu trúc lưu trữ logic và vật lý.
  • Mô tả tổng quan các thành phần ASM.
I - Các thành phần trong Oracle Database
1. Oracle database gồm 3 thành phần chính
  1. Memory structure
  2. Process structure
  3. Storage structure
Kiến trúc tổng quan Oracle Database
Như hình trên, thì khái niệm Instance bao gồm 2 thành phần 1,2, còn khái niệm Database bao gồm thành phần thứ 3.
Mô hình quan hệ giữa Instance - Database
2. Mối liên hệ giữa Instance - Database
  • 1 instance kết nối đến 1 và chỉ 1 database duy nhất.
  • Trên 1 server có thể có nhiều database, mỗi database có 1 instance riêng (như mô hình Nonclustered System ở hình trên).
  • 1 database có thể có nhiều instance (mô hình Real Applications Cluster (RAC) như hình trên).
3. Luồng kết nối từ user đến instance
Mô hình kết nối user đến database instance
Phân biệt User processServer process
  • User process:"When a user runs an application program (such as a Pro*C program) or an Oracle tool (such as Oracle Enterprise Manager or SQL*Plus), Oracle Database creates a user process to run the user's application"
  • Server process: Oracle database tạo ra server process để xử lý những request của user process khi kết nối đến instance. Nếu user process và server process là cùng 1 máy, thì có thể gọp chung thành 1 process để giảm tải cho server. Nếu user process đến từ 1 máy khác server, thì Oracle database sẽ luôn luôn tạo ra 1 server process để phục vụ cho 1 user process khi kết nối đến.
Phân biệt connection và session
  • Connection: là kết nối thực sự từ user process đến instance (thông qua giao thức tcp/ip).
  • Session: là trạng thái hiện tại của user khi kết nối vào server, do server tạo ra (có thể là process hoặc thread), dựa trên connection kết nối tới. 1 session kéo dài từ lúc user đăng nhập đến khi log out khỏi hệ thống hoặc thời gian của session tồn tại đạt đến giá trị expire (hết hạn).
  • 1 user oracle có thể tạo ra nhiều session kết nối đến database từ nhiều máy khác nhau.
II - Memory structure
Mô hình memory structure
Mô hình memory structure
Một instance có 2 thành phần memory cơ bản:
  1. System Global Area (SGA)
  • Chứa dữ liệu (data) và thông tin điều khiển (control information) của 1 instance.
  • 1 SGA + n Processes = 1 Instance. Mỗi instance có phần SGA riêng.
     2.  Program Global Area (PGA):
  • Chứa dữ liệu và thông tin điều khiển cho từng server process hoặc background process - không chia sẻ giữa các server process hay background process với nhau.
  • 1 server process sẽ phục vụ cho những request từ 1 client. Khi start 1 server process sẽ cấp phát vùng nhớ PGA cho riêng server process đó. 
1. SGA: 
Gồm các thành phần chính như shared pool, data buffer cache, redo log buffer, large pool...
1.1. Shared pool
Là một thành phần quan trọng trong SGA, bao gồm những thành phần chính như Library Cache, Dictionary Cache, Result Cache.
Mô hình shared pool
Giá trị lưu trữ trong shared pool sẽ bị mất đi chỉ khi vùng nhớ cấp phát mới không đủ, cách hủy các giá trị cũ sẽ dựa vào thuật toán LRU (least recently used), căn bản của thuật toán này là, thèn nào ít dùng nhất sẽ bị loại bỏ.

1.1.1. Library cache
Bao gồm các thành phần như: private SQL areas, shared SQL areas, PL/SQL procedures và packages...
Thành phần private SQL areas và shared SQL areas:
  • Oracle ghi nhận việc thực hiện 1 câu lệnh SQL ở 2 thành phần: Shared SQL areas và private SQL areas (nằm trong vùng PGA - đến đây có thể đặt ra câu hỏi: shared pool thuộc SGA, library cache thuộc shared pool, trong library cache bao gồm shared và private SQL areas, vậy tại sao private SQL areas lại nằm trong PGA ? Câu trả lời được oracle giải thích tại đây, mình trích dẫn "The location of a private SQL area depends on the type of connection established for a session. If a session is connected through a dedicated server, private SQL areas are located in the server process's PGA. However, if a session is connected through a shared server, part of the private SQL area is kept in the SGA.").
  • Khi 1 user thực hiện 1 câu lệnh Oracle sẽ cấp phát vùng nhớ từ vùng shared pool. Nếu vùng shared pool đầy và không tìm thấy những vùng nhớ còn trống. Thì lúc này, oracle sẽ sử dụng thuộc toán LRU  để loại bỏ những thành phần ít được dùng nhất trong shared pool. Quá trình thực hiện 1 câu lệnh được lưu trữ trong cả private và shared SQL areas. Lưu vào vùng priavate SQL areas là đương nhiên rồi. Còn lưu vào shared SQL areas là để khi 2 users cùng thực hiện 1 câu lệnh, Oracle sẽ không chạy lại quá trình thực hiện câu lệnh đó nữa, mà vào thẳng vùng shared SQL areas để lấy luôn, giúp tiếc kiệm time & resource hệ thống.
  • Đối với PL/SQL procedures hay packages: Quá trình quản lý, cấp phát vùng nhớ cũng tương tự như khi thực hiện 1 câu lệnh statement.
1.1.2. Result cache
Một tính năng mới trong Oracle 11g. Result cache giúp lưu lại kết quả thực hiện của câu lệnh hoặc procedures/packages, nhằm tăng tốc độ cho câu truy vấn.

1.1.3. Data dictionary 
Một trong những thành phần quan trọng nhất trong Oracle database. Được sở hữu bởi user SYS trong hệ thống. Data dictionary bao gồm:
  • Định nghĩa tất cả các đối tượng scheme trong database như: views, tables, indexes, clusters, sequences, procedures, triggers, packages v.v...
  • Thông tin bộ nhớ chiếm dụng, đang sử dụng của các đối tượng shema.
  • Default value trong các cột.
  • Thông tin các ràng buộc (constraints).
  • Tên các users trong database.
  • Phân quyền và vai trò của các users trong database.
  • Thông tin về auditing như ai truy cập hay cập nhật các đối tượng schema.
Thông tin của data dictionary được lưu dưới dạng table và view (read-only), lưu trữ tại SYSTEM tablespace. Cấu trúc của data dictionary gồm 2 phần chính:
  • Basic tables: lưu trữ các thông tin liên quan về database. Những thông tin này được mã hóa và chỉ có Oracle mới được quyền thao tác dữ liệu trên đây.
  • User-Accessible views: những views chưa các thông tin từ basic table, nhưng được giải mã ra và đưa ra những thông tin cần thiết cho người dùng như các thông tin về table hay user trong hệ thống.
Dữ liệu của data dictionary phần lớn được lưu ở SGA, trong phần data dictionary cache. Lý do bởi vì Oracle database thường xuyên truy cập vào đây để lấy các thông tin về chứng thực người dùng, thông tin về tables hay các đối tượng trong schema khi nhận request từ client, cho nên việc lưu cache trong SGA giúp tăng performance hệ thống.
User bình thường, sử dụng các thông tin trong data dictionary thông qua các views. Một số prefix views chính trong data dictionary:
  • USER: chứa các thông tin về user. Ví dụ:
    # SELECT object_name, object_type FROM USER_OBJECTS;
  • ALL: các thông tin khác mà user có thể truy xuất. Ví dụ:
    # SELECT owner, object_name, object_type FROM ALL_OBJECTS; 
  • DBA: view dành cho quản trị database. Đối với prefix là DBA, muốn truy xuất cần chỉ định owners, ở đây chính là SYS. Ví dụ:
    # SELECT owner, object_name, object_type FROM SYS.DBA_OBJECTS; 
Tiện thể, ở đây mình giới thiệu 1 tí về dynamic performance tables. Khi gặp câu truy vấn mà nó có dạng "select <1 vài thứ gì đó> from V$_xxx". Thì cái v$ đó gọi là dynamic performance table, đây không phải là table thực sự, mà là table ảo lưu trữ những trạng thái hiện tại của database. Cái này thích thì tìm hiểu thêm, có nhiều cái thú vị để cấu hình cho database thông qua v$ này ^^.

1.2. Data buffer cache 
Cũng là 1 thành phần trong SGA như shared pool. Data buffer cache lưu trữ dữ liệu lấy từ datafile dưới database lên. Những dữ liệu này được lưu theo dạng block. Khái niệm buffer có thể được hiểu là 1 vùng trống trong data buffer cache có thể chứa hoặc không chứa dữ liệu.
Mô hình data buffer cache
Cấu trúc của data buffer cache:
  • Tổ chức thành 2 list: write list và the least recently used (LRU) list.
  • Write list: chứa những dirty buffers, tức là bao gồm những dữ liệu đã bị thay đổi (modified) nhưng chưa được lưu xuống database.
  • LRU list chứa free buffers (những vùng còn trống có thể lưu dữ liệu được), pinned buffers (những dữ liệu đang được truy xuất) và những dirty buffers chưa được đưa xuống write list.
Cơ chế hoạt động trong data buffer cache:
  • Khi có 1 process nào đó truy cập vào 1 buffer, buffer đó sẽ được đưa vào cuối LRU list. Mục đích là khi dọn dẹp data buffer cache theo thuật toán LRU, những buffer nằm ở top trên cùng của LRU list (tức là ít dùng đến nhất) sẽ bị bỏ đi.
  • Khi user process yêu cầu dữ liệu, đầu tiên hệ thống sẽ tìm kiếm trong data buffer cache, nếu tìm thấy (gọi là cache hit) sẽ gửi dữ liệu về cho user, nếu không tìm thấy (cache miss), hệ thống phải xuống dưới database, lấy dữ liệu từ datafile để đổ vào data buffer cache. Và tất nhiên là truy xuất dữ liệu từ cache hit nhanh hơn cache miss nhiều.
  • Trong trường hợp cache miss, trước khi đổ data block vào cache, process cần tìm ra free buffer trong cache. Quá trình tìm kiếm bắt đầu từ phía dưới LRU list tìm lên. Tìm kiếm kết thúc khi tìm thấy free buffer hoặc đạt tới ngưỡng tìm kiếm (không thể tìm thêm được nữa).
  • Nếu process tìm được dirty buffer trong LRU list, dirty buffer này sẽ được chuyển xuống write list, process tiếp tục tìm kiếm. Nếu process tìm được free buffer, thì data block sẽ được đưa vào đây, và buffer này được chuyển xuống cuối của LRU list.
  • Nếu process đạt tới ngưỡng tìm kiếm mà vẫn chưa tìm ra được free buffer. Thì lúc này, process sẽ ra hiệu cho DBW0 background process, là tiến trình giúp đưa những dirty buffer xuống đĩa cứng.
  • Chú ý: Nếu thực hiện full scan bảng, thì dữ liệu đọc từ datafile lên cache sẽ được đổ lên đầu (thay vì cuối) LRU list. Lý do là thèn Oracle nói rằng, full scan bảng là không nên, và nếu có dùng thì cũng chỉ trong 1 khoảng thời gian ngắn thôi. Nên dữ liệu của nó nên để lên đầu LRU list để được dọn dẹp sớm nhất có thể.
1.3. Redo log buffer
- Là một dạng circular buffer (hình dung nó là dạng vòng tròn, lưu trữ xoay vòng), lưu trữ tất cả những thông tin về việc tác động tới database. Những thông tin này lưu trữ trong redo entries.
Mô hình lưu trữ của redo log buffer
- Redo entries lưu thông tin về việc tác động vào database như: INSERT, UPDATE, DELETE, CREATE, ALTER, hay DROP. Mục đích nhằm phục hồi dữ liệu sau này (nếu cần).

1.4. Large pool 
Theo mình tự hiểu thì cái này do dba cấu hình memory cấp phát cho large pool. Mục đích dùng để chia sẽ memory cho phần shared pool khi thực hiện chạy các câu query yêu cầu memory lớn, hay dùng trong backup hệ thống. Tóm lại, như là một dạng memory dự trữ cho các phần khác khi cần.

2. PGA
Là vùng nhớ được cấp phát cho mỗi server process hoặc background process. PGA dùng để thực hiện những câu truy vấn, hoặc lưu trữ session. Tập hợp các PGAs gọi là 1 instance PGA. Kích thước của PGA instance này, thèn DBA có thể cấu hình để dễ quản lý. Cấu trúc PGA gồm 2 phần chính: Stack space và User Global Area (UGA).
Mô hình PGA

  1. Stack space: chứa các thông tin lưu trữ của session.
  2. UGA: với loại dedicated server, mỗi user connect vào database sẽ tạo ra 1 server process. Với loại này, PGA sẽ cấp phát 1 vùng nhớ gọi là UGA. Với loại shared server, nhiều client users chia sẻ chung server process. Trong loại này, UGA sẽ được chuyển vào trong SGA, lúc này vùng PGA chỉ còn stack space.
III - Process architecture
Thành phần thứ 2 cần tìm hiểu sau memory structure là process trong Oracle database.
Cấu trúc process

Process trong oracle chia làm 2 thành phần chính:
  1. User process.
  2. Oracle database process bao gồm server process và background process.
Mối liên hệ giữa user process và server process cũng khác nhau, tùy thuộc vào kiến trúc hệ thống (delicated server hay shared server) (đã giải thích ở những phần đầu blog).
Mô hình instance, trong đó có mối liên hệ user processes và Oracle processes
1. User processes
Khi người dùng sử dụng ứng dụng để kết nối đến Oracle database thì lúc này sẽ tạo ra 1 user process.

2. Server processes
-  Sinh ra là để phục vụ các request từ user process:
  •  Parse và thực hiện các câu truy vấn SQL nhận được từ ứng dụng.
  • Đọc các blocks dữ liệu từ ổ đĩa vào data buffer cache nếu như không tìm thấy dữ liệu cần tìm kiếm trên data buffer cache.
  • Trả kết quả về cho ứng dụng thực hiện truy vấn tương ứng.
-  User process muốn yêu cầu tạo ra server process phải thông qua listener process. Hay nói cách khác, listener là cấu nối để client kết nối được vào instance. Sau khi đã kết nối tạo ra session xong, thì listener không còn tác dụng với client đó nữa, có disable listener đi thì cũng không ảnh hưởng gì đến client đó.

3. Background processes
Thành phần giúp Oracle database quản lý bộ nhớ, đồng bộ dữ liệu xuống ổ cứng v.v..
Mô hình tổng quan hoạt động các process trong Oracle database
Một số background process chính
3.1. Database Writer Process (DBWn)

- Tiến trình thực hiện việc ghi những dirty buffers trong data buffer cache xuống ổ đĩa. Có thể cấu hình số lượng DBWn (DBW0, DBW1, DBW2 ...) để tăng performance hệ thống thông qua tham số DB_WRITER_PROCESSES (tối đa 20 processes).
- Khi 1 buffer trong data buffer cache bị chỉnh sửa (modified), nó được đánh dấu là dirty buffer. Cold buffer là khái niệm chỉ những buffer ít được dùng tới trong LRU list. DBWn sẽ ghi những dirty và cold buffer xuống đĩa cứng, nhờ đó user process có thể tìm thấy những clean và cold buffer để lưu những blocks dữ liệu mới vào trong data buffer cache. Nhờ có DBWn mà user processes luôn tìm được những buffer trống để lưu blocks dữ liệu mới.

3.2. Log Writer Process (LGWR)

- Thực hiện ghi tất cả các redo entries trong redo log buffer xuống redo log file (kể từ lần ghi gần nhất).
- Do redo log buffer là dạng circular buffer, cho nên, những redo entries nào đã được ghi xuống redo log file có thể được ghi đè lên bởi server process. Tốc độ LGWR đủ nhanh để đam bảo server process luôn ghi được vào redo entries.
- LGWR thực hiện việc ghi redo log buffer xuống redo log file trong các trường hợp:
  • Khi 1 user process commit 1 transaction.
  • Khi redo log buffer đầy 1/3.
  • Trước khi 1 DBWn thực hiện ghi buffer xuống ổ đĩa.
  • 3 giây thì ghi 1 lần.
- Khi user thực hiện lệnh commit 1 transaction, transaction này được gán 1 số SCN (system change number). Chỉ số SCN được ghi nhận vào redo log dùng khi thực hiện việc phục hồi trong hệ thống RAC hay distributed database.
- Trong trường hợp hệ thống cao tải, LGWR có thể ghi xuống redo log bằng hình thức group commits. Cụ thể, khi user commit 1 transaction, LGWR phải ghi redo entries của transaction đó xuống redo log file, trong thời gian đó, có thể có 1 user khác thực hiện commit 1 transaction khác. Bình thường, tại 1 thời điểm, LGWR chỉ có thể ghi xuống redo entries của 1 transaction. Muốn ghi redo entries của transaction kế tiếp phải chờ việc ghi redo entries transaction này kết thúc. Tuy nhiên, nếu số lượng commit tăng cao, thì tại 1 thời điểm, LGWR có thể ghi xuống nhiều redo entries của nhiều transactions.

3.3. Check point process (CKPT)
- 1 checkpoint là một cấu trúc dữ liệu dùng để định nghĩa chỉ số SCN dùng trong quá trình recovery của database. Checkpoint được lưu trong control file và header của data file.
- Khi xảy ra 1 check point, CKPT có nhiệm vụ cập nhật tất cả header của các data files.

3.4. Archiver Processes (ARCn)
- Khi 1 log switch xảy ra, ARCn tiến hành sao chép redo log file đến thiết bị lưu trữ (tạm gọi là quá trình archiving).
- ARCn chỉ chạy khi database bật chế độ ARCHIVELOG mode và thiết lập chế độ tự động thực hiện archiving.

IV - Database Storage Architecture

1. Các thành phần trong database storage
  1. Control files: chứa dữ liệu của database. Files này cực kỳ quan trọng đối với database. Không có control file, không thể truy xuất vào dữ liệu trong data files.
  2. Data files: chứa dữ liệu của user và của ứng dụng, cũng như dữ liệu metadata và data dictionary.
  3. Online redo log files: lưu trữ thông tin giúp việc recovery database. Cụ thể, nếu database bị crashes và không mất data files, thì instance có thể được recovery từ những thông tin lưu trữ trong files này.
  4. Parameter file: file cấu hình instance.
  5. Password file: cho phép user sử dụng quyền sysdba, sysoper và sysasm kết nối từ xa (remote) vào instance để thực hiện công việc quản trị hệ thống.
  6. Backup files: dùng cho recovery database.
  7. Archied redo log files: chứa tất cả dữ liệu mang tính lịch sử về những thay đổi đối với database. Từ files này cộng thêm một bản backup của database, chúng ta có thể lấy lại những dữ liệu bị mất của database.
  8. Trace files: Mỗi server và background process đều ghi nhận quá trình hoạt động vào trong trace files tương ứng, để khi lỗi phát sinh, sẽ được lưu trữ vào trace files.
  9. Alert log file: Là một dạng đặc biệt của trace file. Tóm lại là, khi databse bị lỗi, việc đầu tiên là chui vào đây xem có đứa nào (process) méc lại cho mình biết vì sao lỗi hay không.
2. Mối liên hệ giữa lưu trữ logic (logical) và vật lý (physical)
Mối quan hệ giữa Logical và Physical Storage
- Đơn vị lưu trữ nhỏ nhất trong Oracle database là Oracle data block. Mỗi Oracle data block tương ứng với con số cụ thể (ví dụ 2 bytes) của OS block.
- 1 extent gồm nhiều Oracle data block.
- 1 segment gồm nhiều extent.
- 1 tablespace gồm nhiều segment và có thể được lưu trữ trên nhiều data file.

V. Giới thiệu tổng quan về ASM (Automatic Storage Management)
ASM là một tính năng của Oracle, giúp cho việc quản lý, lưu trữ thông tin xuống disks dễ dàng. ASM và file system hoàn toàn có thể chạy song song với nhau. Khi ta tạo một database, có thể chỉ định hoặc trên ASM hoặc trên file system đều được.
1. Các thành phần trong ASM
Các thành phần trong ASM
- Oracle database file có mối quan hệ 1-1 với ASM file hay File system.
- 1 ASM disk group gồm nhiều ASM disk.
- 1 ASM disk gồm nhiều ASM allocation unit (AU), đơn vị nhỏ nhất mà ASM dùng để lưu trữ. Kích thước của AU có thể được cấu hình khi tạo ASM disk group.
- 1 ASM extent gồm nhiều ASM AU.
- 1 ASM file gồm nhiều ASM extent.

2. Tóm tắt lại luồng hoạt động tổng quan Oracle database

  1. Start instance.
  2. Người dùng mở ứng dụng để kết nối đến Oracle database (tạo ra user process).
  3. Listener trên server có nhiệm vụ tạo cầu nối để user process kết nối được với server thông qua server process.
  4. Người dùng thực hiện các câu lệnh SQL, sau đó commit transactions.
  5. Server process tiếp nhận các câu lệnh từ user process, tiếp theo kiểm tra xem trong vùng shared SQL area đã có câu lệnh này chưa, nếu có sẽ kiểm tra quyền truy xuất dữ liệu của user truy xuất và thực hiện truy xuất dữ liệu. Nếu chưa có, cấp phát 1 shared SQL area để câu lệnh có chỗ được parse và thực hiện.
  6. Server process sẽ lấy dữ liệu từ data buffer cache hoặc từ data file nếu không tìm thấy trong data buffer cache.
  7. Khi user commit transaction, tiến trình Log Writer (LGWR) ngay lập tức ghi dòng dữ liệu lưu trữ thông tin transaction đó trong redo entries xuống redo log file. Khi server process thay đổi (modified) dữ liệu trong data buffer cache thì tiến trình Database Writer (DBWn) sẽ ghi dirty buffers xuống data file trong trường hợp cần thiết.
  8. Transaction thực hiện thành công hay không, server process đều sẽ thông báo về ứng dụng truy cập vào database.
  9. Trong suốt luồng thực hiện này, những background process sẽ chạy để tiến hành hỗ trợ quá trình hoạt động của hệ thống.
Nhìn chung, phần này dừng lại ở mức giới thiệu tổng quan các khái niệm trong kiến trúc Oracle database. Những chi tiết khác có thể tìm hiểu sau dựa trên nền tảng này.

Link tham khảo: