1. Trang chủ
  2. » Công Nghệ Thông Tin

Đào tạo Oracle cơ bản - Giáo trình kiến trúc và quản trị Oracle 8i - Phần 5 ppt

13 677 1
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 13
Dung lượng 183,84 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

• Unique va NonUnique index: - Unique index: giá trị index xác định duy nhất một dòng dữ liệu trong bảng - NonUnique index: có nhiều dòng dữ liệu ứng với cùng một giá trị index • Functio

Trang 1

13 Quản lý Indexes

13.1 Phân loại Index

• Index

Index là cấu trúc cho phép truy xuất trực tiếp tới các dòng dữ liệu trong bảng Index có thể được phân

loại tuỳ theo thiết kế logic hay cài đặt vật lý

• Single Column và Concatenated Column:

- Single Column index: chỉ có một cột trong index key

- Concatenated Column index: Index được tạo trên nhiều cột trong một table

• Unique va NonUnique index:

- Unique index: giá trị index xác định duy nhất một dòng dữ liệu trong bảng

- NonUnique index: có nhiều dòng dữ liệu ứng với cùng một giá trị index

• Function-base index:

- Giá trị index được xác định thông qua giá trị của một hàm

• Partition và NonPartition index:

- Partitioned index: sử dụng cho các bảng lớn, lưu giữ giá trị index tương ứng trên nhiều

segments Partitioned index được sử dụng cho các Partitioned tables

- NonPartition index: index lưu giữ các giá trị chỉ trên cùng một segment

• B-tree Index

Hình vẽ 7 Cấu trúc B-Tree

• Cấu trúc của B-Tree Index: B-Tree Index có cấu trúc dạng cây, trên cùng là một nút gốc, chứa

các con trỏ trỏ tới các mức tiếp theo (nhánh) trong index Mức dưới cùng (lá) là các blocks Mức

nhánh này chứa các index trỏ tới dòng dữ liệu cụ thể trong bảng

• Khuôn dạng của Index Leaf Entries: được chia làm các phần chính sau:

- Entry header: chứa số lượng các cột và lock information

Trang 2

- Cặp các thông số: độ rộng và giá trị khoá index

- ROWID của dòng dữ liệu chứa giá trị khoá

• Các tính chất của Index Leaf Entry:

- Các giá trị khoá sẽ được lặp lại nếu có nhiều dòng dữ liệu có cùng giá trị khoá

- Không có index entry ứng với các dòng dữ liệu mà tất cả các cột khoá đều có giá trị NULL

• ảnh hưởng của các DML Operations đối với index:

- Thao tác chèn dữ liệu sẽ tương ứng với việc chèn thêm một nút dữ liệu vào cây

- Xoá dòng dữ liệu sẽ tương ứng với việc xoá về mặt logic một index entry

- Cập nhật dòng dữ liệu sẽ tương ứng với việc xoá index entry ứng với giá trị cũ và thêm mới một

index entry ứng với giá trị mới

• Bitmap Index

Là một cách tổ chức khác của Index Một bitmap index cũng được tổ chức theo kiểu B-tree, Nhưng mỗi

nút lá lại chứa một bitmap (bản đồ ánh xạ bit) đối với mỗi giá trị khoá thay vì là danh sách các giá trị

ROWID Mỗi bit trong bitmap tương ứng với một ROWID, và nếu bit được bật thì điều đó có nghĩa rằng

dòng dữ liệu tương ứng với ROWID chứa giá trị khoá

Cấu trúc:

• Entry header: : chứa số lượng các cột và các lock information

• Giá trị khoá: bao gồm một cặp chiều dài và giá trị ứng với mỗi cột

Hình vẽ 8 Cấu trúc Bitmap Index

• Đánh giá việc sử dụng B-Tree Index và Bitmap Index

Suitable for high-cardinality columns

Suitable for low-cardinality columns Updates on keys

relatively

Updates on keys relatively expensive

Trang 3

inexpensive Inefficient for queries using OR predicates

Efficient for queries using OR predicates

warehousing

13.2 Quản lý Index

• Tạo index

• Sử dụng câu lệnh:

CREATE [ UNIQUE ]INDEX [schema.] index

ON [schema.] table

(column [ ASC | DESC ] [ , column [ASC | DESC ] ] )

[ TABLESPACE tablespace ]

[ PCTFREE integer ]

[ INITRANS integer ]

[ MAXTRANS integer ]

[ storage-clause ]

[ LOGGING| NOLOGGING ]

[ NOSORT ]

Ví dụ:

CREATE INDEX summit.employee_last_name_idx

ON summit.employee(last_name)

PCTFREE 30

STORAGE(INITIAL 200K NEXT 200K

PCTINCREASE 0 MAXEXTENTS 50)

TABLESPACE indx;

• Sử dụng Oracle Enterprise Manager

- Chọn Object/Create

- Chọn đối t−ợng cần tạo là index

- Đặt các thuộc tính thích hợp trong page General, Storage, Options

- Bấm Create để tạo index

• Tạo Reverse Key Indexes

Cú pháp:

CREATE [ UNIQUE ]INDEX [schema.] index

ON [schema.] table

(column [ ASC | DESC ] [ , column [ASC | DESC ] ] )

[ TABLESPACE tablespace ]

[ PCTFREE integer ]

[ INITRANS integer ]

[ MAXTRANS integer ]

Trang 4

[ storage-clause ]

[ LOGGING| NOLOGGING ]

REVERSE

Ví dụ:

CREATE UNIQUE INDEX summit.orders_id_idx

ON summit.orders(id) REVERSE

PCTFREE 30

STORAGE(INITIAL 200K NEXT 200K

PCTINCREASE 0 MAXEXTENTS 50)

TABLESPACE indx;

• Tạo Bitmap Indexes

Sử dụng tham số CREATE_BITMAP_AREA_SIZE để chỉ ra dung lượng bộ nhớ cấp phát cho Bitmap

Cú pháp:

CREATE BITMAP INDEX [schema.] index

ON [schema.] table

(column [ ASC | DESC ] [ , column [ASC | DESC ] ] )

[ TABLESPACE tablespace ]

[ PCTFREE integer ]

[ INITRANS integer ]

[ MAXTRANS integer ]

[ storage-clause ]

[ LOGGING| NOLOGGING ]

[ NOSORT ]

Ví dụ:

CREATE BITMAP INDEX orders_region_id_idx

ON summit.orders(region_id)

PCTFREE 30

STORAGE(INITIAL 200K NEXT 200K

PCTINCREASE 0 MAXEXTENTS 50)

TABLESPACE indx;

• Thay đổi các thông số của index

Để thay đổi các tính chất của index, sử dụng lệnh ALTER INDEX

• Thay đổi tham số lưu trữ của index:

Cú pháp:

ALTER INDEX [schema.]index

[ storage-clause ]

[ INITRANS integer ]

[ MAXTRANS integer ]

Ví dụ:

ALTER INDEX summit.employee_last_name_idx

STORAGE(NEXT 400K

MAXEXTENTS 100);

Trang 5

• Cấp phát/ thu hồi không gian dành cho index

Cú pháp:

ALTER INDEX [schema.]index

{ALLOCATE EXTENT ([SIZE integer [K|M]]

[ DATAFILE ‘filename’ ])

| DEALLOCATE UNUSED [KEEP integer [ K|M ] ] }

Ví dụ:

ALTER INDEX summit.orders_region_id_idx

ALLOCATE EXTENT (SIZE 200K

DATAFILE ‘/DISK6/indx01.dbf’);

ALTER INDEX summit.orders_id_idx

DEALLOCATE UNUSED;

• Xây dựng lại index

Cú pháp:

ALTER INDEX [schema.] index REBUILD

[ TABLESPACE tablespace ]

[ PCTFREE integer ]

[ INITRANS integer ]

[ MAXTRANS integer ]

[ storage-clause ]

[ LOGGING| NOLOGGING ]

[ REVERSE | NOREVERSE ]

Ví du:

ALTER INDEX summit.orders_region_id_idx REBUILD

TABLESPACE indx02;

ALTER INDEX summit.orders_id_idx REBUILD ONLINE;

• Huỷ bỏ index

• Sử dụng câu lệnh:

DROP INDEX [schema.] index

Ví dụ:

DROP INDEX summit.deptartment_name_idx;

• Sử dụng Oracle Enterprise Manager

- Chọn Index muốn huỷ

- Chọn Object/remove

- Bấm Yes để huỷ index

13.3 Thông tin về index

Thông tin về index được lưu giữ trong các view từ điển đữ liệu: DBA_INDEXES, DAB_IND_COLUMNS

Trang 6

Ví dụ: lấy thông tin về các indexes sở hữu bởi SUMMIT

SQL> SELECT index_name, tablespace_name, index_type,

2 uniqueness, status

3 FROM dba_indexes

4 WHERE owner=’SUMMIT’;

INDEX_NAME TABLESPACE_NAME INDEX_TYPE UNIQUENES STATUS

- - - - -

3 rows selected

14 Duy trì toμn vẹn dữ liệu (Maintaining data integrity)

14.1 Các dạng toμn vẹn dữ liệu

Toàn vẹn dữ liệu là yêu cầu đầu tiên của một hệ quản trị CSDL Có 3 cách để đảm bảo toàn vẹn

CSDL

- Mã nguồn

- Database trigger

- Constraint

Chọn cách thức toàn vẹn dữ liệu nào là do người thiết kế chương trình Người quản trị chỉ kiểm tra và

làm theo các yêu cầu toàn vẹn số liệu đã được định sãn Mã nguồn được chạy tại client vì vậy trong

phần này chỉ chú ý tới Database trigger và Constraint

• Database trigger: là một đoạn chương trình PL/SQL thực hiện khi có các hành động insert, update

xảy ra trên các column của bảng Database trigger có thể bật hoặc tắt khi cần Database trigger

thường được dùng để đảm bảo các ràng buộc phức tạp về mặt nghiệp vụ

• Constraint là kỹ thuật để đảm bảo các ràng buộc cố định về mặt nghiệp vụ, Có đặc điểm:

- Tăng khả năng thực thi

- Dễ định nghĩa và sửa đổi bởi vì nó không phải là những đoạn mã phức tạp

- Các ràng buộc chính

- Mềm dẻo

- Có đầy đủ thông tin trong database dictionary

Có các loại constraint sau:

- NULL/NOT NULL: ràng buộc column trống hoặc không trống, trong ví dụ mệnh đề ràng buộc:

- UNIQUE: Chỉ ra ràng buộc duy nhất, các giá trị của column chỉ trong mệnh đề UNIQUE trong

các row của table phải có giá trị khác biệt Giá trị null là cho phép nêu UNIQUE dựa trên một

cột Vd:

Trang 7

- PRIMARY KEY: Chỉ ra ràng buộc duy nhất (giống UNIQUE), tuy nhiên khoá là dạng khoá

UNIQUE cấp cao nhất Một table chỉ có thể có một PRIMARY KEY Các giá trị trong

PRIMARY KEY phải NOTT NULL

- FOREIGN KEY ( Referential ): Chỉ ra mối liên hệ ràng buộc tham chiếu giữa table này với

table khác, hoặc trong chính 1 table Nó chỉ ra mối liên hệ cha-con và chỉ ràng buộc giữa

FOREIGN KEY bảng này với PRIMARY KEY hoặc UNIQUE Key của bảng khác Ví dụ quan

hệ giữa DEPT và EMP thông qua trường DEPTNO

- CHECK: Ràng buộc kiểm tra giá trị

14.2 Tạo các constraint

• Tạo constraint cùng với việc tạo table

• Tạo constraint cùng với việc chỉnh sửa cấu trúc bảng

Cú pháp như sau:

• Tạo constraint tại mức column

column datatype [CONSTRAINT constraint_name]

{[NOT] NULL

| PRIMARY KEY [USING INDEX index_clause]

| UNIQUE [USING INDEX index_clause]

| REFERENCES [schema.]table[(column)]

[ON DELETE CASCADE]

| CHECK (condition)

[DISABLE|ENABLE [VALIDATE|NOVALIDATE]]

USING INDEX index_clause : xác định các tham số cho mệnh đề INDEX

của câu lệnh DML mặc định lμ NOT DEFERRABLE

Ví dụ:

CREATE TABLE NHANVIEN (

MA NUMBER(7) CONSTRAINT PK_NV PRIMARY KEY

DEFERRABLE

USING INDEX

STORAGE (INITIAL 100k NEXT 100k)

TABLESPACE INDX,

TEN VARCHAR2(25)

CONSTAINT CK_NAME NOT NULL,

MAPHONGBAN NUMBER(7))

TABLESPACE DATA;

• Tạo constraint tại mức table

CONSTRAINT constraint_name

{| PRIMARY KEY (column [,column ])

[USING INDEX index_clause]

| UNIQUE (column [,column ])

[USING INDEX index_clause]

Trang 8

| FOREIGN KEY (column [,column ])

REFERENCES [schema.]table[(column)]

[ON DELETE CASCADE]

| CHECK (condition)}

[DISABLE|ENABLE [VALIDATE|NOVALIDATE]]

Để quản lý các constraint dùng lệnh ALTER TABLE để cho phép hoặc không cho phép constraint đó

hoạt động Cú pháp như sau:

ALTER TABLE [schema.] table

ENABLE [VALIDATE] { CONSTRAINT constraint_name

|PRIMARY KEY

| UNIQUE (COLUMN [,COLUMN] )}

[USING INDEX index_clause]

[EXCEPTIONS INTO [scheme.].table];

14.3 Lấy thông tin về các constraint

• Thông tin về các constraint chứa trong bảng DBA_ CONSTRAINTS

• Bảng EXCEPTIONS được ORACLE dùng để lưu các thông tin về các lỗi ràng buộc

• Cách dùng bảng EXCEPTIONS theo các bước sau:

- Nếu bảng EXCEPTIONS chưa được tạo chạy file utlexcpt.sql trong thư mục \RDBMS\ADMIN

Ví dụ để tạo bảng EXCEPTIONS, dùng lệnh

SQL> @%ORACLE_HOME%\RDBMS\ADMIN\utlexcpt;

- Sửa đổi bảng dùng mệnh đề EXCEPTIONS

SQL> ALTER TABLE EMP

ENABLE VALIDATE CONSTRAINT EMP_DEPT_FK

EXCEPTIONS INTO SYSTEM.EXCEPTION;

SQL> ora-02298 cannot enable em+_dept_fk

- Xác định dữ liệu lỗi được đưa vào bảng EXCEPTIONS

select rowid, empno, ename, deptno

from emp

where rowid in (select row_id from EXCEPTIONs)

for update;

ROWID EMPNO ENAME DEPTNO

-

AAAeyAADAAAAA1AAA 77 NGUYEN 50

- Làm chuẩn dữ liệu lỗi

Update emp set id = 7777

where rowid = 'AAAeyAADAAAAA1AAA';

- Xoá thông tin về dữ liệu lỗi trong bảng EXCEPTIONS

TRUNCATE TABLE EXCEPTIONS;

ALTER TABLE EMP

ENABLE VALIDATE CONSTRAINT EMP_DEPT_FK

Trang 9

EXCEPTIONS INTO SYSTEM.EXCEPTION;

15 Nạp dữ liệu

Là cách thức chuyển dữ liệu từ bên ngoài hoặc bên trong CSDL vào các bảng (tables) của CSDL

Oracle cung cấp nhiều phương pháp để thực hiện việc nạp dữ liệu vào trong các bảng Các phương

pháp thường dùng có thể kể đến là:

- Nạp dữ liệu trực tiếp

- Sử dụng công cụ SQL* Loader

- Sử dụng công cụ Export và Import

15.1 Nạp dữ liệu trực tiếp

Nạp dữ liệu trực tiếp có thể được sử dụng để sao chép dữ liệu từ một bảng ( table) này tới bảng khác

trong cùng một CSDL Nó gia tăng hiệu quả của các thao tác nạp dữ liệu bằng cách bỏ qua các bộ

đệm và viết trực tiếp vào trong datafile

Cú pháp của lệnh như sau:

INSERT /* APPEND * / INTO [schema.] table

[[ NO] LOGGING]

sub-query;

Trong đó:

- schema: Là tên của người chủ của bảng

- table: Là tên của bảng

- sub-query: là câu lệnh được sử dụng để lấy thông tin yêu cầu để thực hiện lệnh nạp dữ liệu

- LOGGING và NOLOGGING: Tuỳ chọn LOGGING ( Ngầm định) cho phép sinh ra các thực thể

tương ứng trong redo log trong quá trình nạp dữ liệu, nhằm mục đích khôi phục lại trạng thái

dữ liệu trước đó trong trường hợp nạp dữ liệu có sự cố NOLOGGING không sinh ra các bản

ghi trong redo log, nên trong trường hợp có sự cố không thể quay trở lại trạng thái dữ liệu trước

đó

Ví dụ:

INSERT INTO scott.emp

NOLOGGING

SELECT * FROM Scott.old_emp;

15.2 Sử dụng công cụ SQL* Loader

SQL* Loader là tiện ích được sử dụng để nạp dữ liệu từ một file bên ngoài vào trong CSDL Oracle

Đây cũng là công cụ rất mạnh và thường được sử dụng để chuyển dữ liệu từ một hệ thống khác sang

cơ sở dữ liệu Oracle SQL* Loader có thể cho phép:

• Có thể sử dụng một hoạch nhiều file đầu vào

• Có thể kết hợp nhiều bản ghi trong một bản ghi logic trong quá trình nạp dữ liệu

• Các trường đầu vào có thể có chiều dài xác định hoặc thay đổi

Trang 10

• Dữ liệu vào có thể ở bất kỳ dạng gì: character, binary, date

• Dữ liệu có thể nạp từ nhiều thiết bị lưu trữ khác nhau: như đĩa cứng, đĩa mềm, băng từ

• Dữ liệu có thể nạp vào tròng nhiều bảng cùng llúc trong một lần chạy

• Có các tuỳ chọn cho phép thêm dữ liệu hoặc thay thế dữ liệu đang có trong bảng

• Có thể thực hiện nạp trực tiếp dữ liệu vào bảng không cần qua các bộ đệm

15.2.1 Các file được sử dụng bởi SQL* Loader

Trong quá trình nạp dữ liệu, SQL* Loader thường sử dụng hoặc sinh ra các file như sau:

• Control file: Xác định khuông dạng đầu vào, bảng đầu ra và các điều kiện tuỳ chọn mà có thể

được sử dụng để nạp chỉ những bản ghi phù hợp tìm thấy trong file dữ liệu đầu vào

• Data files: Có chứa dữ liệu với khuuong dạng định nghĩa trong Control file

• Parameter files: Là file tuỳ chọn mà có thể được sử dụng để định nghĩa các biến của các dòng

lệnh nạp dữ liệu

• Log files: được tạo bởi SQL* Loader và có chứa bản ghi được nạp

• Bad file: Có chứa các bản ghi bị loại trong quá trình nạp ( ví dụ các bản ghi có khuông dạng không

phú hợp)

• Discard file: Có chứa tất cả các bản ghi không phù hợp với điều kiện lựa chọn để nạp

15.2.2 Các Phương pháp nạp dữ liệu bằng SQL loader

Phương pháp thông thường: Xây dựng một dãy các hàng ( rows) và sử lệnh SQL INSERT để nạp

dữ liệu Theo cách này các bản ghi đầu vào được phân tích trên cơ sở các đặc điểm của các trường và

một mảng các bản ghi được tạo ra được chèn vào bảng chỉ định trong control file Các bản ghi mà

không phù hợp với tính chất của trưởng sẽ bị loại bỏ Việc sinh ra redo log được kiểm soát bởi thuộc

tính Logging

Phương pháp trực tiếp: Xây dựng các khối dữ liệu ( blocks) trong bộ nhớ và sau đó ghi trực tiếp vào

vùng được xác định cho bảng sẽ được nạp dữ liệu Redo log không được tạo ra trừ phi CSDL đang

trong Archivelog mode Phương pháp trực tiếp sử dụng các đặc tính của trường để xây dựng toàn bộ

các khối (blocks) dữ liệu và viết trực tiếp các block dữ liệu vào Oracle data file

Nạp trực tiếp bỏ qua các bộ đệm CSDL và chỉ truy nhập SGA nên nó cho phép nhanh hơn phương

pháp thông thường nhưng nó lại không thể sử dụng trong mọi trường hợp

Sau đây là bảng so sánh các sự khác nhau giữa phương pháp thông thường và phương pháp trực tiếp

Phương pháp thông thường Phương pháp trực tiếp

Sử dụng lệnh COMMIT để tạo ra thay đổi dữ liệu

một cách cố định

Sử dụng lưu dữ liệu ( data saves)

Các mục Redo log luôn luôn được tạo ra Chỉ tạo ra redo dưới các điều kiện xác định

Tuân theo tất cả các Constraint Chỉ tuân theo các Constrain Primary key,

UNIQUE, NOT NULL

Ngày đăng: 06/08/2014, 01:20

HÌNH ẢNH LIÊN QUAN

Hình vẽ 7   Cấu trúc B-Tree - Đào tạo Oracle cơ bản - Giáo trình kiến trúc và quản trị Oracle 8i - Phần 5 ppt
Hình v ẽ 7 Cấu trúc B-Tree (Trang 1)

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm