Chào bạn, bài viết về "Kiến trúc Storage trong Oracle Database" sẽ giúp bạn hiểu rõ hơn về cách mà Oracle Database quản lý và lưu trữ dữ liệu trong hệ thống. Bài viết tập trung vào giải thích các khái niệm cơ bản về storage như: datafile, tablespace, segment, extent, block, ... cũng như cách mà chúng liên kết với nhau để tạo nên một cấu trúc lưu trữ toàn diện trong Oracle Database.
Ngoài ra, bài viết cũng cung cấp thông tin về những cải tiến mới nhất trong kiến trúc storage của Oracle Database và cách chúng ảnh hưởng đến hiệu suất hệ thống. Hy vọng bài viết sẽ giúp bạn có được cái nhìn tổng quan về kiến trúc storage trong Oracle Database.
Giới thiệu về Oracle Database Storage
Oracle Database Storage là một phần quan trọng trong kiến trúc của Oracle Database, là nơi lưu trữ dữ liệu và thông tin liên quan đến cơ sở dữ liệu của bạn. Trong Oracle Database, Storage được quản lý bởi các thành phần quản lý file, bao gồm các file dữ liệu, file redo log và file control.
Việc quản lý Storage là một phần quan trọng trong việc đảm bảo tính toàn vẹn và sẵn sàng của dữ liệu trong Oracle Database. Điều này đặc biệt quan trọng khi có một số người dùng truy cập cùng một lúc vào cơ sở dữ liệu hoặc khi có các ứng dụng phức tạp đang chạy trên hệ thống.
Trong phần tiếp theo của bài viết, chúng ta sẽ tìm hiểu thêm về các thành phần quản lý file trong Oracle Database Storage, cách chúng hoạt động và tầm quan trọng của chúng trong việc bảo vệ dữ liệu của bạn.
Kiến trúc Storage trong Oracle Database
Kiến trúc Physical Storage
Trong Oracle Database, kiến trúc physical storage bao gồm các thành phần chính sau:
- Datafiles: Là các file lưu trữ dữ liệu trong Oracle Database, bao gồm các thông tin về các bảng, chỉ mục, view, các đối tượng khác và metadata của database.
- Control files: Là các file lưu trữ thông tin cấu hình của Oracle Database, bao gồm danh sách các datafiles, các checkpoint, redo log file, transactional information và các thông tin khác.
- Redo log files: Là các file lưu trữ thông tin về các hoạt động cập nhật dữ liệu được thực hiện trong Oracle Database. Khi các thay đổi dữ liệu được thực hiện, Oracle sẽ ghi lại các thông tin về thay đổi này vào các redo log files để có thể phục hồi dữ liệu khi cần thiết.
- Archived redo log files: Là các file lưu trữ các redo log files đã được lưu trữ trước đó. Các archived redo log files có thể được sử dụng để phục hồi dữ liệu trong trường hợp các redo log files gốc bị mất hoặc hỏng.
- Control file backups: Là các bản sao lưu của các control files được tạo ra để đảm bảo tính toàn vẹn của các thông tin cấu hình của database.
- Parameter file (init.ora): là file cấu hình của Oracle Database, chứa các thông tin về cấu hình hệ thống, như các giá trị tham số, đường dẫn, tên instance, tên database, bộ nhớ, cách thức kết nối với các client, v.v. File này là file văn bản và được tạo ra bởi DBA hoặc công cụ Oracle Database Configuration Assistant (DBCA).
- Password file: là file chứa thông tin về các người dùng được phép truy cập vào database. Các thông tin này được mã hóa và bảo mật để đảm bảo an toàn cho hệ thống. Password file được tạo ra bởi DBA hoặc công cụ Oracle Enterprise Manager (OEM).
- Alter log files: là các file ghi lại các thay đổi trong database, bao gồm các giao dịch (transaction) đã thực hiện và các lệnh SQL được thực thi. Alter log files được tạo ra bởi instance và là một phần quan trọng của việc sao lưu và phục hồi dữ liệu. Các file này có thể được lưu trữ trên các ổ đĩa riêng biệt hoặc trên các thiết bị lưu trữ phân tán.
- Trace files: là các file được tạo ra bởi Oracle Database để ghi lại các thông tin liên quan đến lỗi, vấn đề hoặc hoạt động của database. Các file trace này rất hữu ích trong việc phân tích và khắc phục các sự cố của hệ thống. Các file trace này có thể được tạo ra tự động bởi Oracle Database hoặc được DBA tạo ra để ghi lại các hoạt động của hệ thống.
Các thành phần trên được quản lý bởi Oracle Database Instance và được lưu trữ trên các thiết bị lưu trữ như ổ đĩa cứng, ổ đĩa mạng hoặc hệ thống lưu trữ khác. Kiến trúc physical storage được thiết kế để đảm bảo tính toàn vẹn của dữ liệu trong Oracle Database và để cung cấp hiệu suất tối ưu cho các hoạt động đọc/ghi dữ liệu.
Kiến trúc Logical Storage
Cơ sở dữ liệu có cấu trúc logic và cấu trúc vật lý. Các cấu trúc cơ bản bao gồm database, tablespace và data files. Mối quan hệ giữa cơ sở dữ liệu, tablespace và data files được minh họa như hình trên.
Mỗi cơ sở dữ liệu được chia thành hai hoặc nhiều tablespace. Một hoặc nhiều data file được tạo cho mỗi tablespace để lưu trữ vật lý dữ liệu của tất cả các đoạn trong một tablespace.
Nếu đó là một tablespace tạm thời, nó sẽ có một tệp tạm thời thay vì một data file. Data file của một tablespace có thể được lưu trữ vật lý trên bất kỳ công nghệ lưu trữ được hỗ trợ nào.
Tablespace là các đơn vị lưu trữ logic chia cắt database thành các phân vùng khác nhau, nhóm các cấu trúc logic liên quan hoặc các data file cùng nhóm với nhau. Ví dụ, tablespaces thường nhóm tất cả các đoạn của một ứng dụng để đơn giản hóa một số hoạt động quản trị.
Ở mức độ chi tiết nhất, dữ liệu của cơ sở dữ liệu Oracle được lưu trữ trong các data blocks. Một data block tương ứng với một số byte cụ thể của không gian vật lý trên đĩa. Kích thước data block được chỉ định cho mỗi tablespace khi được tạo. Cơ sở dữ liệu sử dụng và phân bổ không gian cơ sở dữ liệu miễn phí trong khối dữ liệu Oracle.
Phần tiếp theo của không gian cơ sở dữ liệu logic là các Extent. Một Extent là một số lượng cụ thể các data blocks Oracle liên tục (được lấy trong một phân bổ duy nhất) được sử dụng để lưu trữ một loại thông tin cụ thể. Các data blocks Oracle trong một Extent là liên tục logic nhưng có thể được phân tán vật lý trên đĩa do việc RAID striping và các cài đặt hệ thống tập tin.
Mức độ lưu trữ cơ sở dữ liệu logic ở trên mức extent được gọi là segment. Một segment là một tập hợp các extent được phân bổ cho một cấu trúc logic nhất định.
Ví dụ:
- Segment dữ liệu: Mỗi bảng không gom nhóm hoặc không sắp xếp theo chỉ mục đều có một segment dữ liệu, ngoại trừ các bảng bên ngoài, bảng tạm thời toàn cầu và các bảng phân vùng (trong đó mỗi bảng có một hoặc nhiều segment). Tất cả dữ liệu của bảng được lưu trữ trong các extent của segment dữ liệu của nó. Đối với một bảng phân vùng, mỗi phân vùng đều có một segment dữ liệu. Mỗi cụm có một segment dữ liệu. Dữ liệu của mỗi bảng trong cụm được lưu trữ trong segment dữ liệu của cụm.
- Segment chỉ mục: Mỗi chỉ mục có một segment chỉ mục lưu trữ tất cả dữ liệu của nó. Đối với một chỉ mục phân vùng, mỗi phân vùng đều có một segment chỉ mục.
- Segment undo: Một tablespace UNDO được tạo ra cho mỗi trường hợp cơ sở dữ liệu. Tablespace này chứa nhiều segment undo để tạm thời lưu trữ thông tin undo. Thông tin trong một segment undo được sử dụng để tạo ra thông tin cơ sở dữ liệu đồng nhất về đọc và, trong quá trình khôi phục cơ sở dữ liệu, để quay lại các giao dịch chưa được cam kết cho người dùng.
- Segment tạm thời: Các segment tạm thời được tạo bởi cơ sở dữ liệu Oracle khi một câu lệnh SQL cần một khu vực làm việc tạm thời để hoàn thành thực thi. Khi câu lệnh kết thúc thực thi, các extent của segment tạm thời được trả lại cho cơ sở dữ liệu để sử dụng trong tương lai. Chỉ định một tablespace tạm thời mặc định cho mỗi người dùng hoặc một tablespace tạm thời mặc định được sử dụng trên toàn cơ sở dữ liệu.
Lưu ý: Có các loại segment khác không được liệt kê ở đây. Cũng có các đối tượng schema như views, packages, triggers và các đối tượng cơ sở dữ liệu khác không được xem là các segment. Một segment sở hữu phân bổ không gian đĩa tương ứng của nó. Các đối tượng khác tồn tại dưới dạng các hàng được lưu trữ trong một segment siêu dữ liệu hệ thống.
Máy chủ Oracle Database cấp phát không gian động. Khi các extents hiện có của một segment đã đầy, các extent bổ sung được thêm vào. Vì các extent được cấp phát khi cần, các extent của một segment có thể liền kề trên đĩa hoặc không liền kề, và chúng có thể đến từ các tệp dữ liệu khác nhau thuộc cùng một tablespace.
Một tập hợp các đối tượng cơ sở dữ liệu như bảng và chỉ mục được lưu trữ dưới dạng các đoạn trong các tablespace. Mỗi đoạn chứa một hoặc nhiều phạm vi. Một phạm vi bao gồm các khối dữ liệu liền kề, điều này có nghĩa rằng mỗi phạm vi chỉ có thể tồn tại trong một tệp dữ liệu. Các khối dữ liệu là đơn vị I/O nhỏ nhất trong cơ sở dữ liệu.
Khi cơ sở dữ liệu yêu cầu một tập hợp các khối dữ liệu từ hệ điều hành (OS), OS sẽ ánh xạ chúng sang một khối hệ thống tệp hoặc khối đĩa thực tế trên thiết bị lưu trữ. Do đó, bạn không cần biết địa chỉ vật lý của bất kỳ dữ liệu nào trong cơ sở dữ liệu của mình. Điều này cũng có nghĩa là một tệp dữ liệu có thể được strip hoặc sao lưu trên một số đĩa.
Kích thước khối dữ liệu có thể được thiết lập vào thời điểm tạo cơ sở dữ liệu. Kích thước mặc định của 8 KB là đủ cho phần lớn cơ sở dữ liệu. Nếu cơ sở dữ liệu của bạn hỗ trợ một ứng dụng kho dữ liệu có các bảng và chỉ mục lớn, kích thước khối lớn hơn có thể có lợi.
Nếu cơ sở dữ liệu của bạn hỗ trợ một ứng dụng giao dịch trong đó việc đọc và ghi là ngẫu nhiên, xác định một kích thước khối nhỏ hơn có thể có lợi. Kích thước khối tối đa phụ thuộc vào hệ điều hành của bạn. Kích thước khối Oracle tối thiểu là 2 KB và nên ít được sử dụng.
Một cơ sở dữ liệu được chia thành các tablespace, đó là các đơn vị lưu trữ logic có thể được sử dụng để nhóm các cấu trúc logic liên quan. Một hoặc nhiều data file được tạo ra cho mỗi tablespace để lưu trữ vật lý của tất cả các cấu trúc logic trong một tablespace.
Hình ảnh trên minh họa tablespace 1, bao gồm hai data file. Một đoạn dữ liệu có kích thước 128 KB, gồm hai phần mở rộng, chia qua hai data file. Phần mở rộng đầu tiên có kích thước 64 KB nằm trong data file đầu tiên và phần mở rộng thứ hai cũng có kích thước 64 KB nằm trong data file thứ hai. Cả hai phần mở rộng này đều được tạo thành từ các khối Oracle 8 KB liên tục.
Lưu ý: Bạn cũng có thể tạo các tablespace bigfile, chỉ có một tệp lớn thường. Tệp có thể có bất kỳ kích thước nào lên đến tối đa mà kiến trúc ID hàng cho phép. Kích thước tối đa là kích thước khối cho tablespace nhân với 236, hoặc 128 TB cho kích thước khối 32 KB. Tablespace smallfile truyền thống (là giá trị mặc định) có thể chứa nhiều tệp dữ liệu, nhưng các tệp không thể lớn như thế.
Mỗi cơ sở dữ liệu Oracle phải chứa một tablespace hệ thống (SYSTEM) và một tablespace SYSAUX. Chúng được tạo tự động khi tạo cơ sở dữ liệu. Mặc định hệ thống là tạo một tablespace smallfile, tuy nhiên bạn cũng có thể tạo bigfile tablespaces, cho phép Oracle quản lý các tập tin cực lớn.
Một tablespace có thể trực tuyến (có thể truy cập) hoặc ngoại tuyến (không thể truy cập). Tablespace SYSTEM luôn luôn trực tuyến khi cơ sở dữ liệu được mở. Nó lưu trữ các bảng hỗ trợ chức năng cốt lõi của cơ sở dữ liệu, chẳng hạn như các bảng từ điển dữ liệu.
Tablespace SYSAUX là một tablespace phụ trợ cho tablespace SYSTEM. Nó lưu trữ nhiều thành phần cơ sở dữ liệu, và nó phải trực tuyến để các thành phần của cơ sở dữ liệu hoạt động đúng cách. Tablespace SYSTEM và SYSAUX không được khuyến khích để lưu trữ dữ liệu của ứng dụng. Các tablespace bổ sung có thể được tạo ra cho mục đích này.
Lưu ý: Tablespace SYSAUX có thể bị đưa ngoại tuyến để thực hiện phục hồi tablespace, trong khi điều này không thể thực hiện được với tablespace SYSTEM. Không một trong hai tablespace này có thể được đặt là chỉ đọc.
BÀI VIẾT LIÊN QUAN
Kết luận
Trong bài viết này, chúng ta đã tìm hiểu về kiến trúc storage trong Oracle Database, bao gồm các khái niệm cơ bản như tablespaces, segments, và extents. Bài viết đã giải thích chi tiết về cách Oracle Database quản lý vùng lưu trữ và cung cấp thông tin về các loại tablespaces và các đối tượng database khác.
Ngoài ra, bài viết cũng đề cập đến những điểm quan trọng cần lưu ý khi xây dựng database như việc chọn kích thước block phù hợp và việc tạo các bigfile tablespaces để quản lý các file kích thước lớn.
Tóm lại, kiến trúc storage trong Oracle Database là một phần quan trọng của hệ thống, cho phép người dùng quản lý và lưu trữ dữ liệu một cách hiệu quả. Hi vọng bài viết sẽ giúp bạn hiểu rõ hơn về kiến trúc storage trong Oracle Database và ứng dụng kiến thức này vào công việc của mình.