• Table
Table là nơi l−u giữ dữ liệu của database. Các dòng dữ liệu trong table đ−ợc l−u giữ theo một trật tự tuỳ thuộc vào tính chất của table.
• Patitioned Table
Để tăng c−ờng tính sẵn dùng (availability) và mở rộng (scalability) đối với các bảng hay đ−ợc sử dụng đồng thời (hight concurrent usage). Dữ liệu trong một bảng có thể đ−ợc l−u giữ thành nhiều vùng riêng biệt gọi là partition. Các partition này có thể thuộc các tablespace khác nhau. Oracle Server hỗ trợ việc quản lý các phân vùng của table bằng các giá trị khoá hay các hàm băm.
• Index-Organized Table
Trong index-organized table, dữ liệu trong index đ−ợc l−u trữ theo các giá trị khoá. Do đó không cần phải có lookup table để xác định dòng dữ liệu. Có thể truy xuất trực tiếp tới dữ liêu.
• Clustered Table
Clustered table là một kiểu của table, cho phép l−u giữ dữ liệu một cách tối −u. Clustered table đ−ợc tạo bởi nhóm các table cùng có chung các data blocks. Các table này có thể có chung các cột dữ liệu. Dòng dữ liệu trong cluster có thể đ−ợc truy xuất theo index hay theo hàm băm.
• Cấu trúc dòng dữ liệu trong table
Dòng dữ liệu đ−ợc l−u giữ trong các database blocks d−ới dạng các bản ghi có độ dài có thể thay đổi (variable-length records). Các cột t−ơng ứng trên một dòng dữ liệu đ−ợc l−u trữ theo nh− thứ tự lúc định nghĩa bảng. Các cột nhận giá trị NULL sẽ không đ−ợc l−u trữ. Nh− vậy, số cột dữ liệu giữa các dòng khác nhau có thể là khác nhau.
Cấu trúc mỗi dòng dữ liệu trong table:
• Phần đầu: L−u giữ số l−ợng cột dữ liệu trên dòng đó, các thông tin ràng buộc, và các trạng thái lock của dòng đó.
Hình vẽ 6 Cấu trúc dòng dữ liệu trong table
Dịch chuyển dòng dữ liệu (Row migration): Khi phần trăm không gian trống quá nhỏ, có thể sẽ không đủ chỗ trống cho việc l−u giữ dòng dữ liệu (trong tr−ờng hợp nó đ−ợc update). Khi đó Oracle Server sẽ di chuyển toàn bộ dòng dữ liệu đó sang một block mới.
Gộp dòng dữ liệu(Row Chaining): Row chaining xảy ra khi dòng dữ liệu quá lớn để đặt vừa một block. Khi đó, Oracle Server sẽ chia dòng dữ liệu đó thành nhiều khúc (chunks) gọi là các row pieces. Mỗi một row piece sẽ đ−ợc đặt trong block. Các row piece đ−ợc gộp lại với nhau.
12.2 Quản lý table
• Tạo table
• Sử dụng câu lệnh:
CREATE TABLE [schema.] table
(column datatype [ , column datatype ] ...) [TABLESPACE tablespace ] [ PCTFREE integer ] [ PCTUSED integer ] [ INITRANS integer ] [ MAXTRANS integer ] [ STORAGE storage-clause ] [LOGGING | NOLOGGING] [CACHE | NOCACHE] ]
- TABLESPACE: tên của tablespace l−u giữ table
- PCTFREE: phần trăm không gian trống thuộc block trên mỗi dòng dữ liệu
- PCTUSED: vùng trống nhỏ nhất đ−ợc sử dụng trên một block
- INITRANS: số l−ợng transactions entries cho mỗi block
- MAXTRANS: số l−ợng tối đa các transactions entries cho mỗi block
- STORAGE: cách thức các vùng trống (extents) đ−ợc cấp phát cho mỗi table.
- CACHE: dữ liệu trong table có thể đ−ợc truy xuất qua cache Ví dụ:
CREATE TABLE employee( id NUMBER(7), last_name VARCHAR2(25), dept_id NUMBER(7)) PCTFREE 20 PCTUSED 50 STORAGE(INITIAL 200K NEXT 200K PCTINCREASE 0 MAXEXTENTS 50) TABLESPACE data;
Có thể tạo table bằng cách copy từ một bảng khác theo cú pháp:
CREATE TABLE [schema.]table [ LOGGING | NOLOGGING ] ...
AS
subquery
• Sử dụng Schema manager:
- Chọn mục Object/Create trong menu bar
- Chọn kiểu Object t−ơng ứng là table, sử dụng Table Wizard để tạo table.
• Temporary table (bảng trung gian)
Temporary table l−u giữ giá trị của dữ liệu tồn tại trong khoảng thời gian của transaction hay session.
• Tạo temporary table: CREATE GLOBAL TEMPORARY TABLE
• Đặt chế độ tồn tại cho dòng dữ liệu trong temprary table
- ON COMMIT DELETE ROWS: dòng dữ liệu chỉ tồn tại trong transsaction
- ON COMMIT PRESERVE ROWS: dòng dữ liệu tồn tại trong cả session.
• Thay đổi các tham số l−u trữ trong table
• Sử dụng câu lệnh:
ALTER TABLE [schema.]table {[ storage-clause ] [ PCTFREE integer ] [ PCTUSED integer ] [ INITRANS integer ] [ MAXTRANS integer]} Ví dụ:
ALTER TABLE summit.employee PCTFREE 30
PCTUSED 50
STORAGE(NEXT 500K MINEXTENTS 2 MAXEXTENTS 100);
• Sử dụng Oracle Enterprise Manager:
- Chọn Table t−ơng ứng
- Thay đổi các giá trị t−ơng ứng trong page Storage
- Chọn Apply để hoàn tất công việc
• Cấp phát các Extents (vùng trống) bằng tay
Ta có thể cấp phát các extents bằng tay để điều khiển việc phân bổ các extents của một table giữa các file. Đồng thời tránh việc mở rộng tự động đối với các bảng.
Cú pháp:
ALTER TABLE [schema.]table
ALLOCATE EXTENT [ ([SIZE integer [K|M]] [ DATAFILE ‘filename’ ]) ]
Ví dụ:
ALTER TABLE summit.employee ALLOCATE EXTENT(SIZE 500K DATAFILE ‘/DISK3/DATA01.DBF’);
Việc thay đổi các tham số l−u trữ trong table có thể cải thiện việc sử dụng không gian và giảm thiểu việc dịch chuyển dữ liệu.
• High-water mark
Mỗi table có một high-water mark (mức cao nhất) dùng để xác định block cuối cùng trong một table. Khi dữ liệu đ−ợc nạp vào bảng, high-water mark sẽ dịch chuyển tới block cuối cùng. Và nó sẽ không đ−ợc dịch chuyển lại khi dữ liệu bị xoá đi. Việc scan dữ liệu của Oracle Server sẽ diễn ra cho tới khi nó gặp đ−ợc high-water mark của bảng đó. Ta có thể xác định đ−ợc high-water mark dựa vào hàm xây dựng sẵn bởi Oracle: DBMS_SPACE.UNUSED_SPACE.
• Thu hồi vùng trống đã cấp phát Cú pháp:
ALTER TABLE [schema.]table
DEALLOCATE UNUSED [KEEP integer [ K|M ] ]
- KEEP: Oracle Server giải phóng vùng nhớ không sử dụng nh−ng sẽ giữ lại một số byte quá high-water mark
Ví dụ:
ALTER TABLE summit.employee DEALLOCATE UNUSED;
• Truncate table
Truncate table sẽ xoá tất cả các dòng dữ liệu trong bảng và giải phóng vùng không gian sử dụng. High-water mark sẽ đ−ợc đ−a về block đầu tiên.
Cú pháp:
[{DROP | REUSE} STORAGE]
Ví dụ:
TRUNCATE TABLE summit.employee;
• Drop table Cú pháp:
DROP TABLE [schema.] table [CASCADE CONSTRAINTS]
- CASCADE CONSTRAINTS: Xoá các ngoại khoá nằm trong các bảng khác tr−ớc khi xoá bảng.
Ví dụ:
DROP TABLE summit.department CASCADE CONSTRAINTS;
• Thay đổi tính chất của table
Ta có thể thay đổi một số tính chất của bảng: drop column, constraints, default value,… thông qua câu lệnh ALTER TABLE.
12.3 Thông tin về table
Thông tin về table đ−ợc l−u giữ trong các view từ điển đữ liệu: DBA_OBJECTS, DAB_SEGMENTS, DBA_TABLES.
Ví dụ: lấy thông tin về các bảng sở hữu bởi SUMMIT
SQL> SELECT t.table_name, o.data_object_id, 2 s.header_file, s.header_block
3 FROM dba_tables t, dba_objects o, dba_segments s 4 WHERE t.owner=o.owner
5 AND t.table_name=o.object_name 6 AND t.owner=s.owner
7 AND t.table_name=s.segment_name 8 AND t.owner=’SUMMIT’;
TABLE_NAME DATA_OBJECT_ID HEADER_FILE HEADER_BLOCK --- --- --- --- CUSTOMER 12743 2 902 DEPARTMENT 12745 2 912 EMPLOYEE 12748 2 927 IMAGE 12751 2 942 INVENTORY 12753 2 952 ITEM 12755 2 962 LONG_TEXT 12758 2 977 ORDERS 12760 2 987 PRODUCT 12762 2 997 REGION 12765 2 1012 TITLE 12768 2 1027 WAREHOUSE 12770 2 1037 12 rows selected.