Để có thể thiết kế và xây dựng CSDL đợc tốt trớc hết chúng ta cần phải hiểu đợc kiến trúc cơ bản cũng nh sự quản lý CSDL của Oracle.
II.1 Cấu trúc CSDL Oracle
Một CSDL Oracle bao gồm hai phần là cấu trúc logic và cấu trúc vật lý. Sự phân chia này đảm bảo sự lu trữ vật lý của dữ liệu không làm ảnh hởng đến các truy nhập trên cấu trúc logic của dữ liệu.
II.1.1 Cấu trúc CSDL vật lý
Cấu trúc vật lý đợc xác định bởi các tệp (file) xây dựng nên CSDL, chúng bao gồm 3 loại file là : một hoặc nhiều file dữ liệu (datafiles), hai hoặc nhiều file nhật ký (redo log files), một hoặc nhiều file điều khiển (control files).
• Các file dữ liệu (datafiles) chứa toàn bộ dữ liệu của CSDL. Khi có yêu cầu về dữ liệu thì dữ liệu sẽ đợc đọc từ datafile tơng ứng và đợc đặt trong bộ nhớ Cache của Oracle. Thao tác ghi dữ liệu có thể không đợc ghi lên datafile ngay lập tức mà sẽ đợc ghi tại một thời điểm thích hợp và đợc thực hiện bởi tiến trình nền DBW của Oracle.
• Các file nhật ký (redo log files) có chức năng ghi lại tất cả các thay đổi đã thực hiện trên dữ liệu. Các file này đợc sử dụng để khôi phục lại CSDL khi có sự cố về hệ thống hoặc bởi các tác động bên ngoài trong lúc dữ liệu đang đợc ghi từ bộ nhớ tới các datafile.
• Các file điều khiển (control files) ghi lại cấu trúc vật lý của CSDL nh tên CSDL, nhãn thời gian mà CSDL đợc tạo ra, tên và nơi đặt các file dữ liệu và các file nhật ký,…
II.1.2 Cấu trúc CSDL logic
Cấu trúc logic của CSDL Oracle đợc xác định bởi các thành phần : Một hoặc nhiều các Tablespaces
Các đối tợng lợc đồ CSDL (Database’s schema objects). Data blocks, Extents và Segment
Xây dựng hệ thống phần mềm thao tác, hiển thị thông tin địa lý trên môi trờng mạng Internet
Tablespace là đơn vị lu trữ logic của CSDL, với mục đích phân chia cấu trúc logic
thành các nhóm có liên quan với nhau.
Nh vậy :
• Mỗi CSDL đợc chia nhỏ thành một hoặc nhiều tablespace
• Các file dữ liệu đặt trong một tablespace sẽ lu trữ (về mặt vật lý) dữ liệu của cấu trúc logic trong một tablespace đó.
Sau Tablespace là các đơn vị Data blocks, Extents và Segment.
Các Tablespace có thể đợc đặt là trực tuyến (online)/ngoại tuyến (offline) (ngoại trừ tablespace SYSTEM) hoặc trong chế độ READ ONLY/READ WRITE. Trong trạng thái offline thì dữ liệu thuộc tablespacelà không sẵn sàng với user nhng có thể phục vụ cho quá trình backup tablespace.
Đối t ợng l ợc đồ (Schema Object) lợc đồ là một tập các đối tợng (Object). Các đối tợng của lợc đồ bao gồm các cấu trúc nh các bảng (tables), khung nhìn (views), các dẫy (sequences), hay các thủ tục đã lu trữ (stored procedures), synonyms, chỉ số (indexes), clusters, và các liên kết CSDL (database links)
Data blocks, Extents và Segment là các cấu trúc lu trữ logic của Oracle
Xây dựng hệ thống phần mềm thao tác, hiển thị thông tin địa lý trên môi trờng mạng Internet
Sơ đồ quan hệ giữa Datablocks, Extents và Segment
1. Data block : tơng ứng với một số bytes xác định trong không gian lu trữ vật lý trên đĩa. Kích thớc của các khối đợc xác định khi tạo CSDL và không thể thay đổi lại đợc trừ phi tạo lại CSDL. Kích cỡ thờng 2 -> 4 KB đợc xác định bởi biến DB_BLOCK_SIZE.
Khuôn dạng của một datablock bao gồm 5 phần :
- Header (Common and Variable) : chứa những thông tin chung về khối nh địa chỉ của khối, kiểu segment,…
- Table directory : bao gồm các thông tin về các bảng (table) có các hàng (row) trong khối.
- Row directory : chứa thông tin về các hàng hiện tại trong khối.
- Row data : chứa dữ liệu bảng hoặc dữ liệu chỉ số (Table or index data), các hàng có thể trải dài trên các khối.
- Free space : là tập các byte trong khối dành cho việc chèn các hàng mới hay cập nhật lại các hàng có đòi hỏi thêm không gian lu trữ (ví dụ sự chuyển đổi từ giá trị null sang giá trị non-null).
Việc điều khiển Free Space thông qua hai tham số là PCTFREE và PCTUSED. Đây là hai tham số đợc xác định khi tạo hay hiệu chỉnh bảng (table), chỉ số (index) hoặc cluster (tập các segment).
Xây dựng hệ thống phần mềm thao tác, hiển thị thông tin địa lý trên môi trờng mạng Internet
+ PCTFREE : là tham số xác định tỷ lệ phần trăm nhỏ nhất của khối để cập nhật các hàng đã tồn tại trong khối. Dữ liệu sẽ chỉ đợc phép thêm vào khối chừng nào tỷ lệ không gian trống của khối còn lớn hơn PCTFREE.Ví dụ PCTFREE=20 (minum free space = 20% block).
+ PCTUSED : xác định tỷ lệ phần trăm nhỏ nhất của khối mà có thể chứa dữ liệu hàng (row data) trớc khi thêm các hàng mới tới khối. Khối đợc xem là sẵn sàng nhận các hàng mới nếu tỷ lệ phần trăm dữ liệu hiên tại đã sử dụng là nhỏ hơn PCTUSED. Giá trị ngầm định của PCTUSED = 40.
Trong trờng hợp dữ liệu hàng(row) đợc chèn (insert) lần đầu tiên vào một đối tợng l- ợc đồ là quá lớn so với một datablock. Thì hàng này sẽ đợc lu trữ trên một chuỗi các datablock (đợc gọi là Row chaining). Hoặc khi một hàng đã tồn tại trong một block nhng đợc cập nhật lại (update) và kích thớc mới không đủ chứa trong block hiện tại thì Oracle sẽ thực hiện ‘di trú’ toàn bộ dữ liệu của hàng này tới một block mới khác (gọi là quá trình Migrating).
2. Extent : là một đơn vị logic đợc cấp phát không gian lu trữ CSDL trên một số
datablock. Một hoặc nhiều các Extent tạo thành một Segment. Khi không gian lu trữ cho một Segment đã đợc sử dụng hoàn toàn thì Oracle sẽ cấp một Extent mới cho Segment đó.
Mỗi segment cần có ít nhất là 1 extent, riêng các Segment khôi phục (Rollback Segments) cần có ít nhất là 2 extent.
Có hai loại extent là :
- Initial Extent : Khi một đối tợng (table,index,…) đợc tạo ra thì Oracle sẽ cấp
cho nó một Extent khởi đầu gồm một số xác định các datablock và đợc gọi là
Initial Extent.
- Incremental Extent : Khi Initial Extent của một Segment đã đầy và nhiều
không gian lu trữ đợc đòi hỏi cho việc lu trữ dữ liệu mới thì Oracle sẽ tự động cấp phát cho Segment đó thêm một Extent mới gọi là Incremental Extent. Kích thớc của extent thêm có thể có kích thớc bằng hoặc lớn hơn kích thớc của extent trớc đó. Vì vậy, trong khối header của Segment chứa một th mục (directory) của các extents thuộc về Segment đó.
Xác định số lợng và kích thớc của các extent :
Việc điều chỉnh các extent cho mỗi Segment đợc thực hiện thông qua các tham số lu trữ (Storage parameters NEXT, PCTINCREASE, MINEXTENTS, MAXEXTENTS, và DEFAULT STORAGE). Ví dụ có thể xác định các tham số này bằng mệnh đề STORAGE khi thực hiện lệnh CREATE TABLE, nếu không thì các tham số ngầm định của Tablespace sẽ đợc sử dụng.
Tablespace có thể quản lý các extent theo hai cách cục bộ (locally) hoặc thông qua
từ điển dữ liệu (data dictionary).
Xây dựng hệ thống phần mềm thao tác, hiển thị thông tin địa lý trên môi trờng mạng Internet
- Extent đợc quản lý một cách cục bộ : Theo cách này kích thớc của các extent
có thể đồng nhất (uniform) hoặc biến đổi (variable). Khi tạo tablespace lựa chọn UNIFORM hoặc AUTOALLOCATE(đợc quản lý bởi hệ thống) sẽ xác định kiểu cấp phát.
+Với các extent UNIFORM : ta có thể xác định kích thớc của mỗi extent hoặc sử dụng kích thớc ngầm định (là 1 MB).
+Với các extent đợc quản lý bởi hệ thống, ta có thể xác định kích thớc của Initial extent và kích thớc tối u của các extent thêm vào cùng với kích thớc extent nhỏ nhất (ngầm định là 64 KB).
- Extent đợc quản lý bởi từ điển dữ liệu : Lúc này tablespace sẽ sử dụng từ điển
dữ liệu để quản lý các extent của nó và kích thớc của các extent tăng thêm. Khi tạo ra một đối tợng lợc đồ trong một tablespace có thể sử dụng các tham số lu trữ
để xác định kích thớc và số lợng của các extent:
+ INITIAL : xác định kích cỡ của extent đầu tiên đợc định vị cho segment ngầm định là 5 data block.
+ NEXT : xác định kích cỡ của các extent tiếp theo ngầm định là 5 blocks + MAXEXTENTS : tổng số lớn nhất các extent cấp cho segment (ngầm định là 99)
+ MINEXTENTS : tổng số extent đợc cấp cho segment khi segment đợc tạo (ngầm định là 1).
+ PCTINCREASE : tỷ lệ % mà mỗi extent tiếp theo đợc phát triển có thể vợt quá extent cuối cùng (ngầm định là 50%).
+ OPTIMAL : kích cỡ tối u cho 1 đoạn khôi phục (ngầm định là null).
+ FREE LIST: số danh sách của các khối rỗi cho insert vào bảng (ngầm định là 1)
3. Segment : là một tập các extent chứa tất cả dữ liệu cho một cấu trúc lu trữ logic
xác định trong một tablespace. Ví dụ, với mỗi table Oracle sẽ cấp một hoặc nhiều extent tạo thành một segment dữ liệu của table đó.
CSDL Oracle sử dụng các kiểu segment sau :
- Data segment : tập tất cả cá extent mà chúng cất giữ tất cả dữ liệu cho một
bảng hoặc 1 cluster
- Index segment : chứa tất cả các dữ liệu chỉ số cho việc tìm kiếm đợc tối u,
nhanh chóng.
- Temporary Segment : khi xử lý các câu hỏi SQL, nếu cần thiết thì Oracle sẽ tự
động cấp phát một không gian đĩa đợc gọi là Temporary Segment. Thờng là khi xử lý các câu lệnh có yêu cầu sắp xếp nh (SELECT … ORDER BY, SELECT … GROUP BY,…)
Xây dựng hệ thống phần mềm thao tác, hiển thị thông tin địa lý trên môi trờng mạng Internet
- Roll back segment : tập các extent mà chúng cất giữ các dữ liệu cho quá trình
khôi phục lại.
- Bootstrap segment : là 1 extent chứa các định nghĩa về từ điển cho các bảng từ
điển và đợc nạp vào khi CSDL đợc mở
II.2 Oracle Instance
Sơ đồ minh hoạ một Oracle Instance (Multiple-process Oracle Instance)
Khái niệm : Mỗi khi đợc khởi tạo, Oracle sẽ cấp phát một vùng bộ nhớ gọi là SGA
(System Global Area) và khởi tạo một hoặc nhiều các tiến trình nền (Background Processes). SGA là một vùng bộ nhớ chứa thông tin CSDL đợc chia sẻ bởi các User. Sự kết hợp giữa SGA và các tiến trình Oracle đợc gọi là một Oracle Instance.
Một Oracle Instance có 2 kiểu tiến trình : User Processes và Oracle Processes
- User Process : thực hiện mã của một chơng trình ứng dụng (nh ứng dụng Oracle
Forms) hoặc Oracle Tool (ví dụ Oracle Enterprise Manager).
- Oracle Processes : là các tiến trình server (Server Process) thực hiện công việc
đợc yêu cầu bởi User Process, các tiến trình nền (Background Proces) sẽ thực hiện công việc duy trì Oracle Server.
Nếu các User Process và Server Process nằm trên những máy tính khác nhau của một mạng hoặc cùng chia sẻ thông qua các tiến trình Dispatcher thì giao thức Net8 sẽ đợc sử dụng để truyền thông giữa hai loại tiến trình này. Dispatchers là các tiến
Xây dựng hệ thống phần mềm thao tác, hiển thị thông tin địa lý trên môi trờng mạng Internet
trình nền lựa chọn chỉ có trong cấu hình server multi-threaded. Net8 là giao diện của Oracle với các giao thức truyền thông chuẩn thực hiện trao đổi dữ liệu giữa các máy tính.
Xây dựng hệ thống phần mềm thao tác, hiển thị thông tin địa lý trên môi trờng mạng Internet
II.2.1 Cấu trúc bộ nhớ Oracle
Xây dựng hệ thống phần mềm thao tác, hiển thị thông tin địa lý trên môi trờng mạng Internet
Xây dựng hệ thống phần mềm thao tác, hiển thị thông tin địa lý trên môi trờng mạng Internet
Sơ đồ cấu trúc bộ nhớ và các tiến trình Oracle
Oracle tạo và sử dụng cấu trúc bộ nhớ để thực hiện các công việc khác nhau (nh chứa mã chơng trình sẽ đợc thực hiện hay dữ liệu chia sẻ cho các user). Cấu trúc bộ nhớ cơ sở bao gồm SGA(database buffer, redo log buffer, shared pool) và PGA (Program Golobal Area).
Vùng bộ nhớ SGA :
• Database Buffer Cache : lu trữ các khối dữ liệu đợc sử dụng gần đây nhất.
Xây dựng hệ thống phần mềm thao tác, hiển thị thông tin địa lý trên môi trờng mạng Internet
• Redo Log Buffer : lu trữ các khoản mục đã thay đổi trên CSDL. Các mục lu trữ trong Redo Log Buffer sẽ đợc ghi tới các tệp redo log trực tuyến.
• Shared Pool : vùng nhớ SGA xây dựng nên vùng SQL dùng chung (Shared SQL Areas). Shared SQL Area cần thiết cho việc xử lý mỗi lệnh SQL đã đợc đệ trình (Submitted) tới CSDL. Đây là vùng chứa các thông tin nh cây phân tích, sơ đồ thực hiện lệnh. Một vùng Shared SQL Area đơn lẻ có thể đợc sử dụng bởi nhiều ứng dụng mà yêu cầu cùng một lệnh.
• Larger Pool : vùng tuỳ chọn trong SGA cung cấp các sự cấp phát bộ nhớ rộng cho Oracle backup, các thao tác khôi phục, các Server Process vào/ra và bộ nhớ phiên cho multi-threaded server và Oracle XA.
Program Global Area (PGA) : là vùng nhớ đệm chứa dữ liệu và thông tin điều khiển cho một Server Process. Nó đợc tạo ra khi một Server Process đợc khởi tạo. Thông tin trong một PGA phụ thuộc vào cấu hình của Oracle.
II.2.2 Kiến trúc tiến trình Oracle
Các tiến trình Oracle đợc gọi bởi các tiến trình khác nhau và bao gồm 2 loại tiến trình là Server Process và Background Process.
1. Các tiến trình phục vụ (Server Processes) :
Điểu khiển các yêu cầu đến từ một User Process kết nối tới. Một Server Process đảm nhiệm truyền thông với User Process và giao tiếp với Oracle để thực hiện yêu cầu từ User Process.
Trong một Dedicated Server Configuration, một Server Process điều khiển cho một User Process đơn. Một Multi-threaded Server Configuration cho phép nhiều User Process chia sẻ một số lợng nhỏ các Server Process.
2. Các tiến trình nền (Background Processes) :
Oracle tạo ra một tập các tiến trình nền cho mỗi Instance. Các tiến trình nền không đồng bộ thực hiện vào/ra và giám sát các tiến trình Oracle nhằm mục đích gia tăng sự song song và đạt đợc một hiệu năng và độ tin cậy tốt hơn. Các tiến trình này là
DBWn, LGWR, CKPT, SMON, PMON, ARCn, RECO, Dnnn, LCK0, SNPn, và QMNn.
- Database Writer (DBWn) : ghi các khối đã biến đổi từ Database Buffer Cache
tới các Datafiles. Tham số DB_WRITER_PROCESSES xác định số các tiến trình DBWn đợc sử dụng.
- Log Writer (LGWR) : ghi các mục trong Redo Log Buffer tới các tệp Redo
Log trực tuyến. Nếu CSDL là Multiplexed Redo Log thì LGWR sẽ ghi tới một nhóm các tệp Redo Log trực tuyến.
- Checkpoint (CKPT) : báo hiệu cho DBWn tại các điểm kiểm tra (checkpoint)
cập nhật tất cả các datafiles và control files của CSDL.
Xây dựng hệ thống phần mềm thao tác, hiển thị thông tin địa lý trên môi trờng mạng Internet
- System Monitor (SMON) : thực hiện khôi phục Instance khi một Instance khác
bị thất bại. Nó sẽ làm sạch Temporaray Segment không còn sử dụng, khôi phục các giao dịch chết, hợp nhất các extent rỗi trong một không gian liên tục tạo điều kiện dễ dàng trong cấp phát.
- Process Monitor (PMON) : thực hiện khôi phuc tiến trình khi một User process
bị thất bại (làm sạch bộ nhớ cache, giải phóng tài nguyên,…)
- Archiver (ARCn) : sao chép các tệp Redo Log trực tuyến tới thiết bị lu trữ khi
chúng đã đầy hoặc khi có sự chuyển đổi nhật ký đợc sinh ra. Số các tiến trình này có thể xác định bởi tham số khởi tạo LOG_ARCHIVE_MAX_PROCESSES (lớn nhất là bằng 10). ARCn đợc kích hoạt chỉ khi CSDL trong chế độ ARCHIVELOG.
- Recover (RECO) : giải quyết các giao dịch phân tán trên mạng mà bị treo hoặc
lỗi hệ thống trong CSDL phân tán, nó sẽ kết nối tới các CSDL ở xa và tự động thực hiện commit hoặc rollback.
- Dispatcher (Dnn) : chỉ có trong cấu hình multi-threaded server, có trách nhiệm
định đờng cho các request từ các User Process tới các Shared Server Process và gửi trả kết quả trở về tới các User Process thích hợp.
- Lock (LCK0) : sử dụng cho việc khoá Inter-Instance trong Oracle Parallel
Server.
- Job Queue (SNPn) : trong cấu hình CSDL phân tán có 36 tiến trình (SNP0,…,