Đăng bởi: daoquanghuynh | 19/05/2009

Tổng quan về kiến trúc Oracle

Tổng quan về các thành phần trong kiến trúc Oracle
1/ Oracle server
Là tập hợp những file, những tiến trình và cấu trúc bộ nhớ trong một Oracle server, tuy nhiên, không phải tất cả trong số chúng đều được sử dụng khi ta đưa ra một câu lệnh SQL. Một vài trong số chúng nhằm nâng cao hiệu năng hoạt động của cơ sở dữ liệu, và đảm bảo rằng có thể khôi phục lại cơ sở dữ liệu trong tình huống một thiết bị phần cứng hay một chương trình nào đó bị lỗi.

2/ Oracle Instance
Một Oracle Instance là tập hợp của các tiến trình ngầm (background processes) và cấu trúc bộ nhớ (memory structure). Một Instance có thể được khởi động để truy cập dữ liệu trong cơ sở dữ liệu. Mỗi một lần khi một Instance được khởi động, một System Global Area (SGA) được cấp phát và các tiến trình ngầm của Oracle cũng sẽ được khởi động. Các tiến trình ngầm này sẽ thực hiện tác vụ vào/ra và quản lý các tiến trình khác của Oracle nhằm cung cấp khả năng chạy song song để thi hành tốt hơn và tin cậy hơn.

3/ Oracle Database
Một cơ sở dữ liệu của Oracle (Oracle database) là một tập hợp các file hệ thống hay còn gọi là database file, cung cấp khả năng quản lý các database file trên các thiết bị lưu trữ. Database file được sử dụng để đảm bảo rằng dữ liệu được lưu giữ ở trạng thái nhất quán, và có thể được khôi phục lại tại thời điểm một Instance bị lỗi.

4/ Các thành phần khác

a/ Các tiến trình user và server
Các tiến trình user và server là những tiến trình thay mặt một câu lệnh SQL nào đó khi câu lệnh này được chạy, tuy nhiên, các tiến trình khác cũng cũng giúp server hoàn thành một tiến trình chạy câu lệnh SQL
b/ Các tiến trình khác
Rất nhiều các tiến trình khác cũng được sử dụng bên trong Oracle bởi các mục đích khác, ví dụ như Advanced Queing, Real Application Server, Shared Server, Advanced Replication và nhiều tiến trình khác nữa.
I/ Oracle Server
Một Oracle server là một
– Hệ quản trị cơ sở dữ liệu cung cấp khả năng mở, tính bao hàm toàn diện, và gần gũi nhằm quản lý các thông tin
– Gồm Oracle Database và Oracle Instance
Một Oracle server có thể chạy trên nhiều máy tính khác nhau theo một trong những cách sau
– Client – Application server – Server: (Mô hình 3 lớp) User có thể truy cập vào cơ sở dữ liệu từ máy tính cá nhân của họ (Client) thông qua một ứng dụng máy chủ (application server), nơi sử dụng cho những yêu cầu chạy chương trình
– Client – Server: (Mô hình 2 lớp) User có thể truy cập vào cơ sở dữ liệu thông qua máy tính cá nhân của họ (Client) và qua một mạng nào đó (network), và cơ sở dữ liệu cũng có thể được đặt trên nhiều máy tính khác nhau
– Host – Based: User truy cập trực tiếp vào chính máy tính của họ, nơi đặt cơ sở dữ liệu trên đó.

II/ Oracle Instance
Một Oracle Instacne là một
– Sự truy cập vào một cơ sở dữ liệu của Oracle
– Luôn luôn cho phép mở một và chỉ một cơ sở dữ liệu
– Bao gồm các cấu trúc bộ nhớ và tiến trình khác
Kết nối tới một Oracle Instance

Trước khi một user chạy một câu lệnh SQL trên một cơ sở dữ liệu Oracle, họ bắt buộc phải kết nối tới một Instance
– User có thể khởi động một công cụ, ví dụ i*SQL/Plus hoặc chạy một ứng dụng phát triển, ví dụ như Oracle Form. Ứng dụng này được thi hành như một tiến trình của user
– Ở hầu hết các thiết lập cơ bản nhất, khi một user truy cập vào Oracle server, một tiến trình được tạo ra trên máy tính, nơi chạy Oracle server. Tiến trình này được gọi là một tiến trình máy chủ (server process), và nó giao tiếp với Oracle Instance, thay mặt cho tiến trình của user chạy trên máy Client, và nó cũng sẽ thực hiện câu lệnh SQL đưa ra bởi một user

Kết nối
Một kết nối thực chất là một giao tiếp giữa một tiến trình của user và một Oracle server, một user sử dụng database có thể kết nối tới một Oracle server thông qua một trong các bước sau đây:
– Một user truy cập vào một hệ thống đang chạy Oracle Instance, và khởi động một ứng dụng hoặc một công cụ nào đó để truy cập vào cơ sở dữ liệu trên hệ thống này. Cách giao tiếp này được thiết lập để sử dụng một liên tiến trình kết nối máy tính hiện hữu trên chính hệ thống đang vận hành
– Một user khởi động một ứng dụng và một công cụ trên máy tính cục bộ và kết nối tới máy tính đang chạy Oracle Instance thông qua một mạng nào đó, trong trường hợp này, ta gọi đó là client – server, phần mềm mạng được sử dụng để giao tiếp giữa user và Oracle server
– Trong một kết nối của mô hình 3 lớp, máy tính của user giao tiếp thông qua một mạng tới một ứng dụng hoặc một mạng chủ nào đó, và nó giao tiếp thông qua một mạng khác tới máy chủ đang sử dụng Oracle Instance. Lấy ví dụ, một user chạy một trình duyệt trên một máy tính sử dụng một mạng để dùng một ứng dụng nằm trên một NT Server để lấy dữ liệu từ một cơ sở dữ liệu Oracle nằm trên một máy chủ Unix.

Phiên làm việc – Session
Một phiên làm việc là một kết nối được chỉ định của một user với một Oracle server, một phiên làm việc được khởi động khi một user được thông qua và xác nhận bởi một Oracle server, và nó kết thúc khi user đó thoát ra khỏi hoặc có kết thúc bất bình thường. Với một user khi đăng nhập vào nhiều ứng dụng hay sử dụng nhiều công cụ cùng một lúc, cũng có nghĩa đã tạo ra nhiều phiên làm việc đồng thời ngay lúc đó, tương tự như thế khi user đó thoát ra khỏi nhiều ứng dụng đồng thời.
Chỉ trừ một số các công cụ quản trị cơ sỡ dữ liệu đặc biệt, thì khi bắt đầu một phiên làm việc, cũng là lúc đòi hỏi Oralce server phải hiện hữu để sử dụng.

Chú ý: Loại kết nối được giải thích ở đây, là loại kết nối 1-1 giữa một tiến trình của một user và tiến trình của một server, được gọi là Dedicated server connection. Khi cấu hình cho server chạy mô hình shared server, nó cho phép kết nối nhiều tiến trình của user tới server.
III/ Oracle Database
Một Oralce Database là một
– Là một tập hợp dữ liệu được xem như một đơn vị
– Bao gồm 3 loại file

Mục đích chính của một cơ sở dữ liệu là lưu trữ và lấy thông tin liên quan. Một cơ sở dữ liệu Oracle có 2 cấu trúc vật lý và logic. Cấu trúc vật lý của cơ sỡ dữ liệu là tập hợp các hệ thống file trong cơ sở dữ liệu. Một cơ sở dữ liệu Oralce bao gồm 3 loại file chính sau:
– Data file chứa các dữ liệu thực của cơ sở dữ liệu
– Redo log file chứa các bản ghi thông tin về sự thay đổi dữ liệu nhằm mục đích khôi phục lại dữ liệu trong trường hợp xảy ra lỗi
– Control file chứa các thông tin cần thiết để duy trì và kiểm tra tính toàn vẹn của cơ sở dữ liệu

Các cấu trúc file khác
Oracle server cũng chứa đựng các loại file khác nhưng không phải là phần của cơ sở dữ liệu
– File tham số (parameter file) xác định tính đặc thù của cơ sở dữ liệu Oralce. Lấy ví dụ, nó chứa tham số xác định kích cỡ của một số cấu trúc bộ nhớ trong SGA
– File mật mã (password file) xác định quyền hạn của user để tắt hay mở một Oracle Instance
– Archive redo log file là những bản copy của redo log files, có mục đích để khôi phục lại dữ liệu trong trường hợp xảy ra lỗi.

Giới thiệu về Data block, Segment, và Extent

Hinh1 : Mô tả quan hệ giữa data blocks, extents và segments.

Oracle cấp phát không gian logic cho toàn bộ dữ liệu trong Database, đơn vị của không gian cấp phát này được gọi là data blocks, extents và segments. Oracle lưu giữ data block trong một khái niệm được gọi là granule (1), và lưu giữ dữ liệu trong khái niệm gọi là data block (hay cũng được gọi là logical block, Oracle block hay page). 1 data block tương ứng với một số lượng byte nhất định của không gian vật lý (2) database trên ổ đĩa.

Khái niệm tiếp theo của không gian logical database là extent, một extent là một nhóm các data blocks liền kề nhau được cấp phát, nhằm lưu giữ một loại thông tin nào đó.

Một segment là tập hợp của nhiều extents, mỗi một segment được cấp phát cho một cấu trúc dữ liệu cụ thể, và tất cả chúng được lưu giữ trong cùng một tablespace. Oracle cấp phát cho segment theo đơn vị từ một extent, khi những extent đang tồn tại trong một segment bị đầy, Oracle sẽ cấp phát extent khác cho segment đó. Bởi vì, extent chỉ được cấp phát khi cần thiết, nên những extent của một segment có thể có tính chất liên tục, liền kề hoặc không nằm trên cùng một không gian vật lý nhất định của ổ đĩa (3).
Một segment và tất cả các extents của nó đều được lưu giữ trong 1 tablespace. Bên trong 1 tablespace, một segment có thể bao gồm nhiều extents từ nhiều file, chính vì thế, segment có thể “trải dài” trên các datafile. Tuy nhiên, mỗi một extent lại chỉ chứa dữ liệu từ duy nhât một datafile.

Mặc dù bạn có thể cấp phát thêm các extents, tuy nhiên, bản thân các data block cũng đã được cấp phát một cách riêng rẽ, nếu như bạn cấp phát thêm extent tại một instance được chỉ định, data block ngay lập tức được cập nhập vào free list (4). Tuy nhiên, nếu extent không được cấp phát cho một instance chỉ định, thì bản thân các data block chỉ được cấp phát khi high water mark (5) đã đạt ngưỡng.

Ghi chú
1. Granule được hiểu như một đơn vị lưu trữ của Oracle, được cấp phát bởi một vùng nhớ ảo liền kề nhau (Sau này, chúng ta sẽ biết thêm Oracle quản lý vùng nhớ như thế nào với 2 khái niệm paging và swapping)
2. Data block hiểu như một đơn vị đo lường của riêng Oracle. Bởi vì, đơn vị này là một đơn vị logic, chính vì thế, quan hệ giữa data block với một đơn vị lưu trữ vật lý của ổ đĩa (nhưng chính xác phải là của hệ điều hành O/S) theo một luật nhất định nào đó. Có nghĩa rằng một data block có thể chiếm 8KB, 10KB, .. của một đơn vị lưu trữ vật lý.
3. Nguyên văn : the extents of a segment may or may not be contiguous on disk.
4. Free list: Oracle sử dụng một thuật toán – * LRU để xác định xem có những data block nào đang ở trạng thái free hoặc used.. Ngoài ra, free list còn có rất nhiều tính năng khác nhau..
5. High water mark : Là một khái niệm, được mô tả giống như một ranh giới, giữa không gian của segment đã được sử dụng hay vẫn đang free. Nguyên văn của câu trên là then the blocks themselves are allocated only when the high water mark moves, tuy nhiên có thể hiểu khi high water mark đạt ngưỡng, có nghĩa là ranh giới giữa phần đã được sử dụng và đang còn trống thu hẹp lại, giống như một cái hộp, khi bạn đổ đầy nước tới một mức nhất định nào đó, vạch hay tô đậm bằng bút mức nước đầy trong hộp, xả nước ra, và lại đổ lại nước một lần nữa, nhưng không đổ đầy tới vạch đã tô. Mức nước mới sẽ được tô đậm lại, bây giờ chúng ta có 2 vạch: 1 mới, 1 cũ. Khoảng cách giữa 2 vạch chính là high water mark. Oracle cũng quản lý HWM theo thuật toán riêng biệt LRU để xác định khi nào cần phải cấp phát thêm blocks dựa vào HWM.
* LRU – Least Recently Used
A/ Data block
Oracle quản lý không gian lưu trữ trong các datafile của một DB với một đơn vị, đơn vị này được gọi là data block. 1 data block là một đơn vị nhỏ nhất của dữ liệu được sử dụng bởi DB. Khác với data block, ở mức hệ điều hành, tòan bộ data được quản lý theo đơn vị là byte. Mỗi một hệ điều hành có một block size (1) riêng biệt. Data block là sự kết hợp của nhiều block size của hệ điều hành.[i]
1 data block size chuẩn của Oracle được xác định bởi tham số db_block_size (2). Oracle data block (3) là đơn vị lưu trữ nhỏ nhất được Oracle cấp phát.

Ghi chú:
1: Trong bất kỳ hệ điều hành nào (Microsoft Windows, Linux, Solaris, Mac…) đều có một chuẩn riêng của mình về block size.
2: Để xem Oracle block size chuẩn trong DB của chúng ta được cấp phát là bao nhiêu, ta sử dụng câu lệnh query
SQL> Show parameter db_block_size
3: Ta cũng có thể gọi Oracle data block là DB block.

2/ Data block Format
Như vậy, một data block sẽ bao gồm những gì? Đó là các thành phần sau:
+ Header: 1 header sẽ chứa những thông tin chung của block, ví dụ như địa chỉ của block đó, hoặc loại segment nào
+ Table directory: Là một phần của block chứa các thông tin về một bảng (table) đang có row nằm trong block đó.
+ Row directory: Là một phần của block chứa các thông tin về các row thật sự nằm trong block đó (bao gồm những địa chỉ của mỗi một phần nhỏ của row nằm trong vùng dữ liệu có row đó)
+ Over head: Tập hợp của các Header, table directory và row directory được hiểu như là overhead.
+ Row data: 1 phần của data block chứa table hoặc index. Row có thể trải dàn sang các blocks
+ Freespace: Được hiểu như là một không gian, nhằm cung cấp thêm khả năng lưu trữ khi một row mới được update thêm vào. Trong một data block được cấp phát cho một table, 1 cluster hoặc 1 index segment của 1 index, freespace có thể nắm giữ các transaction entries. 1 Transaction entry sẽ bị yêu cầu dùng tới khi đưa ra các câu lệnh INSERT, UPDATE, DELETE, SELECT…FOR UPDATE khi truy cập vào 1 hoặc nhiều row trong data block.

Ghi chú: Liên quan tới khái niệm FreeSpace là một số các khái niệm cũng như kiến thức cần phải biết đến, cũng khó khăn để nắm vững, như PCTUSED, PCTFREE và 1 khái niệm rất khó chịu để nắm vững, đó là Row Chaining và Migrating.

http://bachkhoa-aptech.com/index.aspx?u=f&su=ThreadDetail&id=2809


Danh mục

%d bloggers like this: