Quản trị các loại segments khác nhau trong cơ sở dữ liệu Oracle là một phần quan trọng của việc duy trì hiệu suất và hiệu quả của cơ sở dữ liệu. Oracle Database sử dụng các segment khác nhau để lưu trữ dữ liệu, Index, undo data, và nhiều loại dữ liệu khác. Dưới đây là tổng quan về các loại segment phổ biến và cách quản lý chúng.
Trong Oracle Database, có nhiều loại segment khác nhau, mỗi loại phục vụ cho một mục đích cụ thể trong việc lưu trữ và quản lý dữ liệu. Dưới đây là các loại segment chính trong Oracle Database:
- Table Segments:
- Lưu trữ dữ liệu của bảng.
- Mỗi bảng thông thường sẽ có một table segment trừ khi bảng đó được phân vùng.
- Index Segments:
- Lưu trữ dữ liệu Index giúp tăng tốc độ truy vấn.
- Mỗi Index sẽ có một index segment.
- Temporary Segments:
- Sử dụng cho các hoạt động tạm thời như sắp xếp hoặc nhóm dữ liệu trong các câu lệnh SQL.
- Được tự động quản lý bởi Oracle.
- Undo Segments:
- Lưu trữ thông tin hoàn tác cho các giao dịch.
- Giúp hỗ trợ chức năng rollback và đảm bảo tính nhất quán của dữ liệu.
- LOB Segments (Large Object Segments):
- Lưu trữ các đối tượng lớn như BLOBs (Binary Large Objects), CLOBs (Character Large Objects).
- Thường được sử dụng để lưu trữ dữ liệu không cấu trúc như hình ảnh, video, hoặc văn bản lớn.
- Nested Table Segments:
- Lưu trữ dữ liệu cho các bảng lồng nhau (nested tables) trong bảng chính.
- Các bảng lồng nhau là các bảng được sử dụng làm kiểu dữ liệu trong bảng chính.
- Cluster Segments:
- Lưu trữ các bảng được nhóm lại với nhau dựa trên một hoặc nhiều cột chung.
- Giúp tối ưu hóa truy vấn đối với các bảng có mối quan hệ chặt chẽ.
- Materialized View Segments:
- Lưu trữ dữ liệu cho các materialized views.
- Materialized views lưu trữ kết quả của một truy vấn SQL để tăng tốc độ truy vấn.
- Partition Segments:
- Lưu trữ dữ liệu cho các phân vùng của bảng hoặc Index phân vùng.
- Giúp quản lý và tối ưu hóa dữ liệu với khối lượng lớn bằng cách phân chia thành các phân vùng nhỏ hơn.
1. Table Segments
Table segments lưu trữ dữ liệu của bảng.
Tạo bảng (Table):
CREATE TABLE employees (
employee_id NUMBER PRIMARY KEY,
first_name VARCHAR2(50),
last_name VARCHAR2(50)
) TABLESPACE users;
Di chuyển bảng sang một tablespace khác:
ALTER TABLE employees MOVE TABLESPACE new_tablespace;
Thu hồi không gian không sử dụng:
ALTER TABLE employees SHRINK SPACE;
2. Index Segments
Index segments lưu trữ các Index của bảng.
Tạo Index (Index):
CREATE INDEX emp_last_name_idx
ON employees(last_name)
TABLESPACE indx;
Di chuyển Index sang một tablespace khác:
ALTER INDEX emp_last_name_idx REBUILD TABLESPACE new_tablespace;
Thu hồi không gian không sử dụng:
ALTER INDEX emp_last_name_idx COALESCE;
3. Partitioned Segments
Partitioned segments là các segment của các bảng hoặc Index được phân vùng.
Tạo bảng phân vùng (Partitioned Table):
CREATE TABLE sales ( sale_id NUMBER, sale_date DATE, amount NUMBER ) PARTITION BY RANGE (sale_date) ( PARTITION p1 VALUES LESS THAN (TO_DATE('2022-01-01','YYYY-MM-DD')), PARTITION p2 VALUES LESS THAN (TO_DATE('2023-01-01','YYYY-MM-DD')), PARTITION p3 VALUES LESS THAN (MAXVALUE) );
Di chuyển phân vùng sang một tablespace khác:
ALTER TABLE sales MOVE PARTITION p1 TABLESPACE new_tablespace;
4. LOB Segments
LOB segments lưu trữ các đối tượng lớn như văn bản, hình ảnh, video.
Tạo bảng với cột LOB:
CREATE TABLE documents ( doc_id NUMBER PRIMARY KEY, doc_name VARCHAR2(100), doc_content BLOB ) TABLESPACE users LOB (doc_content) STORE AS (TABLESPACE lob_data);
Di chuyển segment LOB sang một tablespace khác:
ALTER TABLE documents MOVE LOB (doc_content) STORE AS (TABLESPACE new_lob_tablespace);
5. Undo Segments
Undo segments lưu trữ thông tin hoàn tác của các giao dịch.
Quản lý undo tablespace:
CREATE UNDO TABLESPACE undo_ts DATAFILE 'path_to_datafile' SIZE 500M;
Chuyển đổi undo tablespace hiện tại:
ALTER SYSTEM SET UNDO_TABLESPACE = undo_ts;
6. Temporary Segments
Temporary segments được sử dụng cho các hoạt động sắp xếp hoặc nhóm tạm thời.
Tạo temporary tablespace:
CREATE TEMPORARY TABLESPACE temp_ts TEMPFILE 'path_to_tempfile' SIZE 500M;
Thiết lập temporary tablespace mặc định:
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp_ts;
7. Monitoring Segments
Theo dõi và quản lý không gian sử dụng của các segments là rất quan trọng để đảm bảo hiệu suất.
Kiểm tra thông tin về các segments:
SELECT segment_name, segment_type, tablespace_name, bytes/1024/1024 AS size_mb FROM dba_segments WHERE tablespace_name = 'users';
Kiểm tra phân phối không gian:
SELECT tablespace_name, SUM(bytes)/1024/1024 AS total_size_mb, SUM(bytes) - SUM(blocks * block_size) /1024/1024 AS used_space_mb FROM dba_extents GROUP BY tablespace_name;
Quản lý các loại segment khác nhau đòi hỏi sự hiểu biết sâu sắc về cấu trúc cơ sở dữ liệu Oracle và các công cụ quản lý mà nó cung cấp. Bằng cách sử dụng các lệnh SQL và các công cụ như Oracle Enterprise Manager, bạn có thể duy trì và tối ưu hóa không gian lưu trữ trong cơ sở dữ liệu một cách hiệu quả.