Oracle là một hệ thống quản lý cơ sở dữ liệu (CSDL) cung cấp cách quản lý thông tin lớn, dễ và hoàn toàn thống nhất. Một Oracle bao gồm một CSDL và một Oracle Instance. Oracle quản lý và xử lý dữ liệu dựa trên ngôn ngữ SQL.
Việc định nghĩa và xử lý dữ liệu được thực hiện trên một bảng (hoặc bảng đối tượng) bởi các câu lệnh SQL. Trong đó, sử dụng các câu lệnh của ngôn ngữ định nghĩa dữ liệu (DDL: Data Definition Language) để thiết lập dữ liệu. DDL bao gồm các lệnh tạo và sửa đổi CSDL và các bảng, sử dụng các lệnh xử lý dữ liệu (DML: Data Manipulation Language) để cập nhật, xoá, tìm kiếm dữ liệu trong một bảng của CSDL. Ngoài ra Oracle còn có một ngôn ngữ thủ tục PL/SQL dùng để thủ tục hoá các câu lệnh SQL.
48 trang |
Chia sẻ: Dung Lona | Lượt xem: 1922 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Đề tài Đề tài Tìm hiểu Hệ Quản trị cơ sở dữ liệu Oracle trong môi trường Windows Server 2000, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ên và sự định vị các datafile và các redo log file của CSDL.
- mốc thời gian tạo CSDL.
Sử dụng Control file
Control file chứa thông tin được sử dụng để khởi động một instance (thông tin định vị các Datafile và các Redo log file). Mỗi lần khởi động một instance, Oracle sử dụng control file để nhận biết trạng thái CSDL và các Redo log file, chúng phải được mở để tiến hành các hoạt động của CSDL. Nếu cấu trúc vật lý của CSDL có sự thay đổi (như khi một Datafile hay một Redo log file được tạo mới) thì Oracle cho phép Control file của CSDL đó tự động sửa đổi để tương thích với sự thay đổi đó.
Do vậy, Control file rất cần thiết phải được bảo vệ. Cũng như các Redo log file, Oracle bảo vệ Control file bằng nhiều cách, chẳng hạn như Oracle cung cấp một cơ chế lưu giữ rất nhiều bản sao của Control file.
Trong các loại file trên, ta thấy rằng quan trọng nhất là Datafile; Redo log file và Control file là các file hỗ trợ cho các chức năng trong CSDL. Tất cả các file này phải được hiện diện, mở và sẵn sàng khi sử dụng bất kỳ dữ liệu nào của CSDL. Không có các file này chúng ta không thể truy cập được vào CSDL.
e) Từ điển dữ liệu
Mỗi CSDL có một từ điển dữ liệu. Một từ điển dữ liệu bao gồm các table, view chỉ được sử dụng để tham chiếu dữ liệu của CSDL.
Từ điển dữ liệu được thiết lập khi một CSDL được tạo ra. Để luôn lưu được trạng thái của CSDL thì tại các thời điểm xảy ra một hành động cụ thể của từ điển sẽ được cập nhật tự động bởi Oracle.
2.2 Cấu trúc bộ nhớ và các tiến trình
2.2.1 Cấu trúc bộ nhớ
Oracle sử dụng bộ nhớ dùng chung (shared memory) cho nhiều mục đích khác nhau, bao gồm việc chứa dữ liệu và các chỉ mục (index) cùng với việc lưu giữ các mã chương trình dùng chung. Bộ nhớ dùng chung này được chia thành nhiều phần nhỏ gọi là các vùng bộ nhớ. Các vùng bộ nhớ cơ bản kết hợp với Oracle là System Global Area và Program Global Area.
a) Vùng nhớ hệ thống toàn cục (System Global Area)
Thể hiện là một phương tiện để truy cập dữ liệu trong Database file. Một thể hiện của Oracle Server là sự kết hợp giữa bộ nhớ đệm và tiến trình nền. Bất cứ khi nào Oracle Server bắt đầu, một vùng nhớ hệ thống toàn cục (SGA) được cấp phát, đồng thời các tiến trình nền cũng được khởi động.
SGA là nhóm của cấu trúc bộ nhớ của hệ thống được cung cấp cho các chương trình của Oracle hoạt động. SGA là vùng bộ nhớ dùng chung được Oracle sử dụng để chứa dữ liệu và các thông tin điều khiển cho một Oracle instance. SGA được định vị khi Oracle instance bắt đầu và mất đi khi Oracle instance kết thúc. Mỗi một Oracle instance bắt đầu cấp phát một SGA riêng. Nếu nhiều người sử dụng kết nối đồng thời, dữ liệu trong SGA sẽ được chia sẻ.
Thông tin trong SGA gồm 3 thành phần: Shared pool, Database buffer cache, Redo log buffer. Mỗi thành phần này có kích thước cố định và được tạo ra ngay khi instance khởi động.
Shared pool
Là vùng của SGA chứa các cấu trúc bộ nhớ dùng chung như Shared SQL Area nằm trong Library Cache và các thông tin nội tại trong Data dictionary. Shared rất quan trọng vì nếu không cấp đủ bộ nhớ cho nó thì đó có thể là nguyên nhân giảm hiệu quả thực hiện công việc. Kích thước của vùng này được đặt trong tham số shared_pool_size. Shared pool bao gồm Library Cache và Data Dictionary Cache:
Library Cache
Library Cache được sử dụng để chứa các câu lệnh SQL. ở đây lưu giữ các cây phân tích cú pháp (Parse tree) và các phương án thực hiện cho mọi câu lệnh SQL. Shared SQL Area cũng được dùng để lưu các thủ tục phân tích, biên dịch các khối PL/SQL và chúng được các tiến trình người dùng chia sẻ trrong cùng một instance. Nếu có nhiều chương trình ứng dụng đồng thời đưa ra một câu lệnh SQL thì vùng này sẽ được truy nhập nhằm làm giảm dung lượng bộ nhớ cần thiết cũng như giảm thời gian phân tích và thời gian lập phương án thực hiện.
Data Dictionary Cache
Data Dictionary chứa tập hợp các bảng (tables) và các bảng logic (views) được Oracle sử dụng để tham chiếu đến CSDL. Oracle dùng Data Dictionary lưu giữ các thông tin cấu trúc logic và cấu trúc vật lý của CSDL, gồm các thông tin như:
- Thông tin về người dùng (các đặc quyền của người dùng).
- Định nghĩa các ràng buộc toàn vẹn cho các bảng CSDL.
- Phân loại tên và dữ liệu cho tất cả các cột trong bảng CSDL
Oracle dùng Data Dictionary để phân tích các câu lệnh SQL. Điều này rất cần thiết cho các thao tác của Oracle. Vì vậy, nếu không có đủ bộ nhớ cho vùng Data Dictionary Cache, chúng ta sẽ gặp phải một số vấn đề xấu khi thực hiện công việc.
Database buffer cache
Chứa tập hợp các buffer chứa phần lớn các dữ liệu được sử dụng ở lần gần nhất. Do có nhiều người sử dụng, nên để đảm bảo tính toàn vẹn cho CSDL, Oracle sinh ra các bản sao. Vùng này lưu giữ các bản sao dữ liệu.
Database buffer cache được tổ chức thành hai danh sách:
- Danh sách nháp (dirty list): Chứa vùng đệm đã sửa mà không được viết vào đĩa. Danh sách này được điều khiển bởi tiến trình DBWR để định ra khối dữ liệu nào được viết vào Database file.
- Danh sách được sử dụng tại thời điểm gần nhất (Least Recently Used - LRU): Nội dung của danh sách này gồm:
+ Vùng đệm rỗi.
+ Vùng đệm đã sử dụng.
+ Vùng đệm nháp.
Redo log buffer
Oracle sử dụng các Redo log file ghi lại tất cả những thay đổi đối với các đối tượng của người dùng và các đối tượng của hệ thống. Trước khi những thay đổi này được ghi vào các file đó, Oracle lưu chúng vào Redo log buffer. Chẳng hạn, các thông tin trong Redo log buffer được viết vào trong các Redo log file khi vùng nhớ đệm đầy hoặc khi một giao tác đưa ra một câu lệnh.
Tiến trình nền LGWR là tiến trình duy nhất ghi lại các thông tin từ Redo log buffer ra các Redo log file.
b) Program Global Area - PGA.
PGA là vùng bộ nhớ chứa dữ liệu và các thông tin điều khiển cho các quá trình của Oracle Server. Một vùng PGA được Oracle tạo ra khi một tiến trình phục vụ bắt đầu. Kích thước và nội dung của PGA phụ thuộc vào các tuỳ chọn của Oracle Server mà ta cài đặt. Vùng PGA gồm các thành phần sau:
- Stack space: Vùng này lưu giữ các biến, mảng của một session.
- Session information: Nếu chúng ta vận hành Server đa dòng thì session information được chứa trong PGA, nếu chúng ta vận hành thì session information được chứa trong SGA.
- Private SQL Area: Đây là vùng trong PGA, nơi lưu trữ các thông tin kiểu như về các biến kết nối và thời gian thực hiện các buffer.
2.2.2 Các tiến trình
Tiến trình (process) là một dòng điều khiển hay cơ chế trong điều hành hệ thống mà thực hiện một dãy công việc nào đó. Oracle có 3 kiểu tiến trình: User process, Background process, Server process. Trong đó background process và server process được gọi chung là Oracle process.
a) Tiến trình người dùng (User process)
User process hay còn gọi là Client process là sự kết nối của người dùng với hệ quản trị CSDL. Nó được tạo ra khi người dùng chạy một chương trình ứng dụng truy nhập đến CSDL qua giao diện chương trình của Oracle (khi đó Oracle cũng tạo ra các tiến trình phục vụ (Server process) để đáp ứng các yêu cầu từ phía tiến trình người dùng). Giữa tiến trình người dùng và tiến trình phục vụ luôn có sự liên hệ với nhau. Nhiệm vụ của User process là giao tiếp với người sử dụng để lấy câu lệnh SQL và PL/SQL, gửi các câu lệnh lên Server, nhận kết quả và trình diễn thông tin theo yêu cầu người dùng.
b) Tiến trình nền (Background process)
Mỗi khi Oracle instance bắt đầu, vùng nhớ hệ thống toàn cục (System Global Area - SGA) được định vị và các tiến trình nền được bắt đầu. Các tiến trình nền tương ứng với các công việc khác nhau phục vụ cho tất cả mọi người dùng CSDL. Đây là tiến trình dị bộ (xử lý ngầm) để thực hiện một số nhiệm vụ riêng. Tiến trình này bắt đầu khi CSDL start và kết thúc khi CSDL shut down. Có các loại tiến trình nền sau:
Database Write (DBWR): Các khối dữ liệu đã được sửa đổi trong vùng nhớ đệm CSDL (Database buffer cache) được viết trở lại đĩa bởi một tiến trình nền DBWR. Khi một giao tác (transaction) thay đổi dữ liệu trong một khối dữ liệu, khối dữ liệu này không cần phải ngay lập tức được ghi lên đĩa. Thường thì DBWR ghi dữ liệu lên đĩa theo một cáhoặc hiệu quả hơn. Đó là DBWR chỉ ghi khi cần đọc đến dữ liệu của vùng nhớ đệm CSDL chứ không ghi ngay mỗi khi kết thúc một giao tác. Tiến trình này quản lý vùng Database buffer. Cho nên các tiến trình của người dùng luôn luôn có thể tìm được vùng đệm rỗi.
Đối với các hệ thống sử dụng vào ra dị bộ thì chỉ có một tiến trình DBWR, còn hệ thống không sử dụng vào ra dị bộ thì sự thực hiện có thể được tăng cường hơn vì có tăng thêm nhiều tiến trình DBWR.
Log Write (LGWR): ghi lại tất cả những thay đổi tới CSDL trong vùng Redo log buffer tới đĩa bởi một itến trình nền có tên LGWR, một tiến trình nền khác là ARCH (Archiver) có thể được bắt đầu để lưu giữ các thông tin đăng nhập lại trên một thiết bị cất giữ đã định trước (tape, disk) dùng cho việc khôi phục bị thất bại.
LGWR viết Redo log buffer vào Redo log file khi:
- user đưa ra chỉ thị commit.
- vùng Redo log buffer vượt quá 1/3 kích cỡ cho phép của vùng.
- DBWR cần để xoá sạch các khối đệm cho một điểm kiểm tra hoặc quá thời gian xuất hiện.
System Monitor (SMON): Tự động thực hiện việc khôi phục instance, tái tạo kiểu không gian bảng. Tiến trình này bao gồm việc loại bỏ các segment tạm thời và khôi phục các giao tác đã mất khi hệ thống gặp sự cố.
Process Monitor (PMON): Kiểm soát tiến trình người dùng và tự động thực hiện việc khôi phục một tiến trình người dùng thất bại.
Đây là bốn tiến trình mang tính chất bắt buộc của hệ thống. Ngoài ra còn một số tiến trình tuỳ chọn sau:
Checkpoint (CKPT): Bảo đảm rằng CSDL được sửa ghi vào datafile. Tiến trình thực hiện việc gửi tín hiệu cho tiến trình DBWR nhằm thi hành việc kiểm soát và cập nhật tất cả các datafile và các control file của CSDL. Việc kiểm soát này là một sự kiện mà DBWR sẽ ghi vào datafile tất cả các database buffer đã được sửa đổi. Nếu tiến trình này không được dùng thì tiến trình LGWR sẽ đảm nhận chức năng này.
Archiver (ARCH): Viết dữ liệu từ Redo log file ra thiết bị lưu trữ trực tuyến nếu có yêu cầu. Tiến trình ARCH chỉ được kích hoạt khi hệ quản trị CSDL hoạt động trong chế độ ARCHIVELOG. Nếu hệ thống không làm việc trong chế độ này thì tiến trình ARCH không phục hồi được dữ liệu nếu xảy ra hỏng hóc trong hệ thống. Trong một số trường hợp nào đó nó có thể chạy dưới chế độ NOARCHIVELOG song đặc thù vẫn là chế độ ARCHIVELOG.
Recovery (RECO): Được sử dụng để dọn dẹp các giao tác chưa thực hiện trong một CSDL phân tán và giải quyết sự tranh chấp giữa các giao tác.
LOCK (LCKn): Các tiến trình LCKn (LCK0,..., LCK9) thực hiện việc khoá thể hiện giao nhau trong hệ thống phục vụ song song của Oracle (xử lý tình trạng bế tắc giữa các instance trong hệ tiến trình song song).
Dispatcher (Dnnn): Đây là các tiến trình nền tuỳ chọn, nó chỉ có mặt khi sử dụng cấu hình phục vụ đa dòng (Multi-threathded server configuration). ít nhất sẽ có một tiến trình này (D000,...,Dnnn) được tạo ra để sử dụng đối với mọi giao thức truyền thông. Mỗi tiến trình Dispatcher có chức năng gửi các yêu cầu từ các tiến trình người dùng đến tiến trình phục vụ dùng chung và gửi hồi đáp tới các tiến trình người dùng phù hợp.
Job Queue (SNPn): Trong cấu hình CSDL phân tán, có tất cả 36 tiến trình Job Queue (SNP0,..., SNP9, SNPA,..., SNPZ) có thể làm tươi các table snapshot. Các tiến trình này nhận biết và làm tươi bất kỳ một snapshot nào có trong lịch trình làm tươi tự động. Nếu sử dụng nhiều hơn một tiến trình Job Queue thì các tiến trình này sẽ phân chia nhau công việc làm tươi các snapshot. Các tiến trình này cũng thực hiện các công việc theo yêu cầu của DBMS_JOB package và truyền thông điệp đã xếp hàng tới các hàng khác trong CSDL khác.
Queue Monitor (QMNn): Là các tiến trình nền tự chọn thực hiện việc giám sát các thông điệp cho Oracle Advanced Queuing (Oracle AQ). Chúng ta có thể định cấu hình cho mười tiến trình Queue Monitor.
c) Tiến trình phục vụ (Server process)
Server process (còn gọi là Shadow process) giao tiếp với người dùng và tương tác với Oracle nhằm thực hiện các yêu cầu của người dùng. Khi một user chạy một ứng dụng tương ứng hoặc một hỏi đáp dữ liệu thì các tiến trình người dùng được sử dụng. Oracle sẽ đưa ra một tiến trình phục vụ để trao đổi yêu cầu với các tiến trình người dùng.
User
process
Server
process
Các tiến trình phục vụ sau khi thi hành các yêu cầu của người sử dụng và đưa trở lại kết quả cho họ.
Trước khi dữ liệu có thể truy cập được thì tiến trình phục vụ phải được thể hiện để đưa dữ liệu lên vùng nhớ đệm dùng chung. Các khối dữ liệu sau khi được thao tác, sửa đổi sẽ được viết trở lại bộ nhớ ngoài nhờ tiến trình nền DBWR. Do việc cập nhật lại dữ liệu từ vùng nhớ chung SGA ra đĩa rất tốn thời gian cho nên tiến trình CKPT sẽ đảm bảo việc cập nhật dữ liệu sẽ thực hiện vào thời điểm cần thiết. Cũng do việc cập nhật xảy ra không liên tục nên tiến trình LGWR sẽ cập nhật lại các thay đổi của Redo log buffer ra các Redo log file. Nếu lưu trữ trực tuyến thì các Redo log file sẽ được cập nhật trực tuyến sang vùng lưu trữ khác (offline storage) để phòng sự cố xảy ra đối với hệ thống.
Tiến trình phục vụ xử lý lệnh SQL thông qua những thông tin của vùng nhớ chung SGA. Program Global Area (PGA) là vùng nhớ chứa dữ liệu và thông tin điều khiển cho đơn người dùng hoặc cho tiến trình người dùng. PGA được cấp phát bởi Oracle Server khi tiến trình người dùng kết nối với CSDL Oracle và một session được thiết lập.
Các thông báo của SQL sẽ được thi hành bởi các tiến trình phục vụ, các tiến trình phục vụ sẽ đọc khối dữ liệu từ đĩa vào vùng nhớ dữ liệu được dùng chung của SGA (vùng Shared pool). Sau đó đưa ra kết quả từ các thông báo SQL. Các tiến trình phục vụ có ba giai đoạn:
- Giai đoạn phân tích: Kiểm tra cú pháp, kiểm tra quyền truy nhập, đường dẫn tìm kiếm có hiệu quả nhất rồi xác định cây phân tích...Cây phân tích sẽ được cất giữ trong vùng Shared SQL Area (thuộc một phần của Share pool trong SGA), vùng này chứa các thông tin cho việc thi hành các thông báo SQL.
User
processes
Server
processes
SGA
- Giai đoạn thi hành các thông báo: gắn cây phân tích tới vùng đệm dữ liệu
SGA
Shared pool
Database buffer
Server processes
- Giai đoạn nhận lại: nhận giữ liệu từ các thông báo của server.
User
processes
Server
processes
SGA
Như vậy, cứ khi có tiến trình người dùng thì sinh ra tiến trình phục vụ. Chẳng hạn, nếu tiến trình người dùng yêu cầu truy nhập một phần dữ liệu chưa có trong SGA, tiến trình phục vụ được sinh ra có nhiệm vụ đọc các khối dữ liệu đó từ các datafile và trong SGA. Đó là sự tương quan 1 - 1 giữa tiến trình người dùng và tiến trình phục vụ, mặc dù một phần tiến trình phục vụ có thể đồng thời kết nối với nhiều tiến trình người dùng. Cách thực hiện này làm giảm đi sự sử dụng tài nguyên của hệ thống.
Từ đó ta có thể đưa ra kết luận rằng hai kiểu tiến trình background process và server process đều là các Oracle process nhưng chúng khác nhau trong phạm vi tiến trình của mình. Các server process trao đổi các yêu cầu từ phía người dùng, còn các background process thi hành những công việc của một instance.
Các tính năng của Hệ quản trị cơ sở dữ liệu Oracle
Oracle là một hệ quản trị cơ sở dữ liệu do hãng Oracle phát triển. Hệ này hoạt động trong môi trường client/server trong đó các ứng dụng chạy trên các các trạm làm việc (client), còn hệ quản trị cơ sở dữ liệu chạy trên máy chủ (server). Oracle được đánh giá là hệ quản trị cơ sở dữ liệu mạnh với các tính năng:
- Lưu trữ các thông tin trong cơ sở dữ liệu, các phép tìm kiếm và thao tác dữ liệu phục vụ cho các ứng dụng được hệ quản trị thực hiện một cách hiệu quả với các kỹ thuật tối ưu hóa.
- Oracle thực sự đạt được các tiêu chuẩn của một hệ quản trị dữ liệu theo mô hình quan hệ, một mô hình được coi như chuẩn cho các cơ sở dữ liệu:
+ Bảo đảm tính nhất quán của dữ liệu, ngay cả trong môi trường đa người dùng.
+ Có các cơ chế đảm bảo tính toàn vẹn của cơ sở dữ liệu: các khai báo toàn vẹn tham chiếu, các ràng buộc khai báo (Constrains),các Trigger.
+ Có cơ chế bảo mật dữ liệu đối với các người dùng khác nhau.
+ Cho phép cài đặt các cơ sở dữ liệu phân tán và kèm theo là các cơ chế để đảm bảo tính nhất quán và tối ưu hóa việc thực hiện các câu hỏi phân tán.
- Các công cụ phát triển của Oracle cho phép thực hiện các câu lệnh SQL để tìm kiếm và thao tác dữ liệu chứa trong hệ quản trị CSDL.
- Có khả năng lưu trữ các đối tượng cơ sở dữ liệu để phục vụ cho các ứng dụng. Các đối tượng này thường chứa các chương trình của ngôn ngữ thủ tục PL/SQL. Đây là phương tiện rất hữu ích giúp cho người phát triển hệ thống có thể cài đặt được các quy tắc nghiệp vụ và các kiểm tra toàn vẹn dữ liệu nhất là các ràng buộc phức tạp.
- Đảm bảo tính nhất quán của cơ sở dữ liệu (trong môi trường đa người dùng) và thực hiện việc tối ưu hoá các thao tác trên cơ sở dữ liệu.
3.1 An toàn và bảo mật trong Oracle
3.1.1 Quản lý người dùng
Cơ sở dữ liệu Oracle cho phép nhiều người cùng một lúc truy nhập vào một CSDL. Vì vậy, vấn đề bảo mật là hết sức quan trọng. Mỗi CSDL có một danh sách người dùng tương ứng. Việc quản lý người dùng gồm khai báo tên người dùng (username) và mật khẩu (password) hợp lệ; chứng thực cho phép người dùng có thể truy cập cơ sở dữ liệu, giới hạn không gian đĩa được cấp phát thời gian CPU... Để khai báo người dùng trong Oracle có thể dùng hộp thoại của SQL*DBA hoặc câu lệnh SQL.
3.1.2 Cơ chế phân quyền
Sau khi tạo ra user, người quản trị Database phải gán quyền cho user để họ có thể truy nhập được vào CSDL. Quyền truy cập trong Oracle được chia thành quyền hệ thống và quyền với các đối tượng. Quyền hệ thống là quyền cho phép user tác động lên một kiểu đối tượng nào đó. Ví dụ như quyền tạo Table, Index trên bất kỳ một Tablespace nào, quyền tạo user, quyền cập nhật, tra hỏi dữ liệu trên bất kỳ table nào,... Trong Oracle có hơn 60 quyền hệ thống khác nhau. Quyền với các đối tượng cho phép user tác động lên một đối tượng cụ thể nào đó. Ví dụ quyền cập nhật dữ liệu trên table có tên EMP quyền đọc dữ liệu từ một View có tên XYZ. ..
Role là một tập các quyền, có tác dụng lớn trong việc gán một nhóm quyền cho một nhóm người dùng. Để thay đổi quyền hạn của người dùng ta chỉ cần thay đổi Role. Ngoài việc gán quyền cho người dùng, ta cũng gán được quyền cho một Role. Tuy nhiên phải tạo ra Role bằng lệnh CREATE ROLE trước khi có thể gắn quyền cho nó. Ngoài ra có thể bảo vệ Role bằng một mật khẩu ở mức CSDL hay hệ điều hành. Ta có thể làm cho Role có hiệu lực (enable) hay vô hiệu hoá (disable) nó.
3.2 Tính toàn vẹn dữ liệu và cơ chế khoá
3.2.1 Toàn vẹn dữ liệu
Một bảng có thể được nhiều người dùng truy cập đồng thời, để đảm bảo tính toàn vẹn dữ liệu. Oracle đã đưa ra các phương tiện để áp đặt các ràng buộc trong thao tác dữ liệu và các cơ chế khoá cho việc truy cập đồng thời.
áp đặt các ràng buộc toàn vẹn: đảm bảo cho dữ liệu trong CSDL luôn tuân theo các ràng buộc định trước, phù hợp với yêu cầu của hệ thống và yêu cầu nghiệp vụ. Các yêu cầu toàn vẹn dữ liệu chính trong Oracle: giá trị Null, đảm bảo không có hai hàng nào trong cùng một bảng giống nhau, toàn vẹn khi tham chiếu và đảm bảo các yêu cầu nghiệp vụ phức tạp.
Để đáp ứng được các yêu cầu về toàn vẹn dữ liệu, Oracle cung cấp các
phương tiện như các ràng buộc kiểu khai báo (Constraint), các Triggers và mã chương trình (ít dùng).
- Ràng buộc kiểu khai báo (Constraint): Thông thường, khi áp đặt các toàn vẹn dữ liệu, người ta tận dụng tối đa các Constraint. Constraint rất đơn giản, nó được khai báo ngay khi tạo bảng hay được thêm vào một bảng sẵn có. Tuy nhiên, Constraint không có khả năng tham chiếu dữ liệu khi hai bảng ở trên hai trạm khác nhau. Các Constraint được đặt tên để dễ cho việc quản lý, nếu không đặt thì Oracle sẽ tự động đặt tên. Constraint được chia thành mức cột (được khai báo trong phần khai báo cột của một bảng) và mức bảng (được khai báo sau phần khai báo cột của một bảng, áp đặt ở mức bảng hay được dùng vì có thể được sửa đổi một cách dễ dàng). Các Constraint được phân chia thành: NOT NULL, UNIQUE, CHECK (kiểm tra giá trị của một cột có thuộc một miền nhất định hay một danh sách nhất định hay không. Có thể so sánh giá trị của các cột với nhau, tham chiếu đến một hay nhiều cột. Tuy nhiên, CHECK không thể có các tham chiếu con mà tham chiếu đến các trường giả trong bảng và không dùng được các hàm SYSDATE, UID... vì giá trị của chúng biến đổi thường xuyên, NOT NULL là một dạng của constraint CHECK, DEFAULT, PRIMARY KEY và FOREIGN KEY.
- Các Trigger: dùng để áp đặt các ràng buộc phức tạp về nghiệp vụ trong CSDL. Đây là đối tượng của CSDL và được kích hoạt khi thực hiện các câu lệnh thao tác dữ liệu Insert, Update, Delete. Nó có khả năng tham chiếu tới các bảng ở xa, trong khi ràng buộc khai báo không làm được cũng như khi bảng chủ và bảng tớ ở trên hai trạm khác nhau.
3.2.2 Cơ chế khoá (lock)
Mục đích: đảm bảo việc truy cập đồng thời tới dữ liệu (người muốn đọc dữ liệu không phải chờ đợi người đang thực hiện các thay đổi lên dữ liệu đó, người muốn viết không phải đợi người đang đọc cùng dữ liệu, người muốn thực hiện thay đổi lên dữ liệu chỉ phải đợi người đang nắm quyền thay đổi nó mà thôi); đảm bảo tính nhất quán khi đọc dữ liệu (trong quá trình thực hiện một câu lệnh, một người luôn nhìn được dữ liệu nguyên bản chứ không phải dữ liệu đang bị người khác thay đổi; khi một người commit những thay đổi của mình thì cũng không ảnh hưởng tới người khác đang trong quá trình thực hiện câu lệnh của mình).
Các lớp khoá: khoá dữ liệu có tác dụng bảo vệ dữ liệu khi thực hiện các lệnh thao tác dữ liệu; khoá từ điển bảo vệ cấu trúc của các đối tượng trong cơ sở dữ liệu.
Các mức khoá: mức bản ghi, mức bảng (được chia thành EXCLUSIVE, SHARES, ROW SHARES, ROW EXCLUSIVE và SHARE ROW EXCLUSIVE (SRX). Ngoài ra, câu lệnh SQL cũng có tác dụng gây ra khoá (ví dụ LOCK TABLE IN ).
Khoá chết: Hiện tượng khoá chết có thể xảy ra, tuy nhiên nó sẽ được dò tìm bởi tiến trình nền PMON và giải quyết. Cách tốt nhất để tránh khoá chết là quy định thứ tự truy cập vào cùng một bảng trong ứng dụng.
Liên kết dữ liệu
Khi dữ liệu từ nhiều hơn một bảng trong CSDL được yêu cầu, một điều kiện join được sử dụng. Các dòng trong một bảng có thể được join tới các dòng trong bảng khác theo các giá trị chung tồn tại trong các cột tương ứng. Điều kiện join đó là các cột khoá chính và khoá ngoại.
Có hai loại điều kiện join chính là Equijoins và Non-equijoins. Ngoài ra còn có các phương pháp khác như: Outer joins, Selfjoins, Set operators.
4.1 Equijoins
Đây là cách liên kết dữ liệu giữa hai hay nhiều bảng mà quan hệ giứa hai bảng có phần bổ xung là khoá chính và khoá ngoại. Điều kiện join là phép toán eqal (=).
4.2 Non-equijoins
Non-equijoins xảy ra khi không có cột nào trong bảng thứ nhất phù hợp với một cột trong bảng thứ hai. Điều kiện join không phải là phép toán equal. Các điều kiện join thường dùng như: BETWEEN, =.
4.3 Outer joins
Sử dụng một outer join để xem các dòng mà có các điều kiện join không chuẩn.
Phép toán được sử dụng là dấu (+) .
Đặt dấu + bên cạnh của join nơi mà không có giá trị để join tới.
4.4 Self joins
Sử dụng để join các dòng trong một bảng tới các dòng trong một bảng tương tự. Nó mô phỏng hai bảng trong mệnh đề FROM bằng việc khởi tạo hai bí danh (alias) cho bảng.
Chúng ta có thể join một bảng tới chính nó bằng việc sử dụng các bí dánh bảng để mô tả như là hai bảng riêng biệt. Điều này cho phép các dòng trong một bảng được liên kết tới các dòng trong bảng tương tự.
Chương II
Sử dụng ngôn ngữ lập trình trong CSDL Oracle
Ngôn ngữ SQL
SQL (Structured Query Language) là tập lệnh truy xuất CSDL quan hệ.
Ngày nay SQL được sử dụng rộng rãi và được xem là ngôn ngữ chuẩn để truy cập CSDL quan hệ.
1.1 Ưu điểm của SQL
Ngôn ngữ không module: SQL là ngôn ngữ không module vì nó làm việc với mẩu tin và cho phép di chuyển tự động đến các mục dữ liệu. SQL cho phép làm việc với cấu trúc dữ liệu ở cấp cao hơn là phải thao tác trên từng mẩu tập tin. Các lệnh SQL cho phép đầu vào và đầu ra là một tập hợp các mẩu tin, kết quả của câu lệnh SQL có thể là đầu vào của một câu lệnh SQL tiếp theo. SQL không bắt người sử dụng phải chỉ ra phương pháp truy cập CSDL và do đó giúp người sử dụng có thể tập trung vào công việc chính. Tất cả các lệnh SQL sử dụng phương thức tối ưu hoá, người sử dụng không cần biết đến các chỉ mục, chức năng tối ưu hoá sẽ nhận biết và sử dụng một cách thích hợp.
Ngôn ngữ cho mọi người sử dụng: SQL được sử dụng dưới nhiều góc độ tuỳ theo người sử dụng, như: Người quản trị hệ thống, Người quản trị CSDL, Người quản trị việc bảo mật, Người thảo chương trình ứng dụng, Người được hệ thống hỗ trợ ra quyết định, Người sử dụng dưới dạng khác.
Ngôn ngữ hợp nhất: SQL cung cấp tập lệnh hợp nhất được sử dụng cho nhiều mục đích khác nhau, như: Truy vấn dữ liệu; Thêm, cập nhật, xoá các mẩu tin; Tạo lập, thay thế, hiệu chỉnh, hủy các object; Điều khiển việc truy cập CSDL và các object; Đảm bảo tính thống nhất và toàn vẹn dữ liệu.
Ngôn ngữ chung cho tất cả các CSDL quan hệ: Tất cả các hệ quản trị CSDL lớn đều cho phép sử dụng SQL nên chúng ta có thể áp dụng những kiến thức về SQL khi làm việc với hệ quản trị CSDL khác nhau. Hơn nữa, các ứng dụng viết bằng SQL đều có thể chuyển đổi được, do đó chúng ta có thể chuyển một ứng dụng trên hệ quản trị CSDL này sang hệ quản trị CSDL khác mà không phải hiệu chỉnh nhiều.
Nhúng SQL: Nhúng SQL (Sử dụng SQL trong các ngôn ngữ lập trình có cấu trúc) là tập hợp các lệnh sau:
- Tất cả các lệnh SQL, như: Select, Insert,...
- Các lệnh điều khiển như: Prepare, Open,.... nhằm kết các lệnh SQL chuẩn vào ngôn ngữ lập trình cấu trúc.
Oracle cung cấp các tiền biên dịch (Precompiler) cho các ngôn ngữ nhúng SQL, gồm: Tiền biên dịch Pro*Ada, Pro*C, Pro*Cobol, Pro*Fortran, Pro*Pascal, Pro*PL/I.
Các công cụ của Oracle: Hầu hết các công cụ của Oracle đều cho phép sử dụng SQL, tuy nhiên có một số đặc thù riêng khi sử dụng SQL tuỳ theo từng công cụ.
1.2 Soạn thảo, thực thi một chương trình
Thực thi chương trình trong SQL*Plus: Dùng lệnh start hay ký tự @ để định thực thi chương trình SQL*Plus:
SQL> start example.sql, hay
SQL> @example.sql
Soạn thảo chương trình: Để lưu trữ lệnh trong buffer vào tập tin dùng lệnh SAVE, ví dụ lưu nội dung buffer vào tập tin BUFFER.SQL
SQL> SAVE BUFFER.SQL
Các chú thích trong SQL*Plus: Có thể thêm các ghi chú, diễn giải khi viết các lệnh SQL. Sử dụng /* */ cho các comment dài cần để trên nhiều dòng. Sử dụng (--) cho các comment trên một dòng.
1.3 Kết xuất màn hình
Mặc nhiên kết xuất ra màn hình và trôi liên tục, nếu muốn kết qủa kết xuất ra tập tin văn bản phải SET SPOOL ON và chỉ ra tập tin chứa kết quả. Cách này rất tiện lợi cho viết chương trình sinh chương trình (Các chương trình Generate).
Ngưng kết xuất SET SPOOL OFF.
Các thành phần của SQL
2.1 Các schema object
Schema là tập hợp các cấu trúc logic của dữ liệu, được gọi là các object của schema. Một schema được sở hữu bởi một người sử dụng CSDL và được mang tên của người sử dụng. Mỗi người sử dụng có một schema duy nhất. Các object của schema (schema object) có thể được tạo lập và thao tác thông qua các lệnh SQL và bao gồm các object sau:
Các schema object: Cluster (Các bó dữ liệu), Data link (các liên kết dữ liệu), Stand-alone function (các hàm đơn lẻ), Stand-alone procedure (Các thủ tục đơn lẻ), Index (Các chỉ mục), Package (các gói thủ tục và hàm), Sequence (các dãy tuần tự), Snapshot (các bản sao dữ liệu), Synonym (Các đồng nghĩa), Table (Các bảng), Database trigger, View (Các bảng ảo), Profile, Role (vai trò), Rollback segment, Tablespace.
Các thành phần con của Schema object: Các cột trong bảng; Các ràng buộc toàn vẹn trong một bảng; Các package procedure, package function và các object khác trong một package.
Các quy tắc khi tham chiếu đến object
Cú pháp chung khi tham chiếu đến các object: Sơ đồ chung khi tham chiếu các object hoặc thành phần của object
Schema.Object.Part.@dblink
Trong đó:
object: Tên object.
schema: Schema chứa object.
part: Thành phần của object.
dblink: Tên CSDL chứa object.
Oracle giải quyết việc tham chiếu các object: Khi chúng ta tham chiếu một object trong một câu lệnh SQL, Oracle phân tích câu lệnh và xác định các object trong không gian tên. Sau khi xác định các object, Oracle thực hiện các thao tác mà câu lệnh quy định trên object. Nếu tên object truy cập không thuộc không gian tên thì câu lệnh không được thực hiện và có thông báo lỗi.
Câu lệnh sau thêm một mẩu tin vào bảng DEPT.
INSERT INTO Dept VALUES (50, 'SUPPORT', 'PARIS');
Theo ngữ cảnh của câu lệnh, Oracle xác định bảng Dept có thể là
- Một table trong schema của chúng ta.
- Một view trong schema của chúng ta.
- Đồng nghĩa riêng cho table hoặc view.
- Đồng nghĩa chung cho table hoặc view.
Tham chiếu đến các object không thuộc quyền sở hữu: Để tham chiếu đến các object không thuộc schema hiện thời, phải chỉ ra tên của schema chứa object muốn truy cập: schema.object
Ví dụ để xoá table EMP trong schema SCOTT
DROP TABLE scott.emp
Tham chiếu các object từ xa: Để truy cập đến một CSDL ở xa, sau tên object phải chỉ ra tên liên kết CSDL (database link) của CSDL chứa object muốn truy cập. Database link là một schema object, Oracle dùng để thâm nhập và truy xuất CSDL từ xa.
2.2. Kiểu dữ liệu (Datatype)
Char: Kiểu Char dùng để khai báo một chuỗi có chiều dài cố định. Chiều dài tối đa là 255 byte.
Varchar2: Dùng để khai báo chuỗi ký tự với chiều dài thay đổi. Chiều dài tối đa là 2000 byte.
Varchar: Được xem giống Varchar2.
Number: Dùng để chứa các mục tin dạng số dương, số âm, số với dấu chấm động. NUMBER (p,s) p: Số chữ số trước dấu chấm thập phân, p từ 1 đến 38 chữ số; s: Số các chữ số tính từ dấu chấm thập phân về bên phải (scale), s từ -84 đến 127.
Float: Dùng để khai báo kiểu số dấu chấm động, với độ chính xác thập phân 38 hay độ chính xác nhị phân là 126. FLOAT (b), khai báo kiểu dấu chấm động với độ chính xác nhị phân là b, b từ 1 đến 126. (Độ chính xác thập phân = độ chính xác nhị phân * 0.30103).
Long: Dùng để khai báo kiểu chuỗi ký tự với độ dài biến đổi, chiều dài tối đa của kiểu LONG là 2GB. Kiểu này thường được dùng để chứa văn bản.
Date: Dùng để chứa dữ liệu ngày và thời gian, mặc dù kiểu ngày và thời gian có thể được chứa trong kiểu Char và Number.
Raw và Long Raw: Dùng để chứa các chuỗi byte, các dữ liệu nhi phân như hình ảnh, âm thanh. Các dữ liệu kiểu Raw chỉ có thể gán hoặc truy cập chứ không được thực hiện các thao tác như đối với chuỗi ký tự. Kiểu RAW giống kiểu VARCHAR2 và LONG RAW giống kiểu LONG, chỉ khác ở chỗ Oracle tự động chuyển đổi các giá trị kiểu CHAR, VARCHAR2 và LONG giữa tập hợp ký tự của CSDL và tập ký tự của các ứng dụng.
Rowid: Mỗi mẩu tin trong CSDL có một địa chỉ có kiểu ROWID, ROWID gồm block.row.file, trong đó: block, chuỗi hệ bát phân cho biết block chứa row; row, chuỗi hệ bát phân cho biết row trong block; file, chuỗi hệ bát phân cho biết database file chứa block.
Mlslabel: Dùng chứa label dạng nhị phân mà Oracle dùng để đảm bảo hoạt động của bản thân hệ thống.
Chuyển đổi kiểu: Nói chung một biểu thức không thể gồm các giá trị thuộc nhiều kiểu khác nhau, tuy nhiên Oracle cho phép chuyển đổi giữa các dữ liệu.
Oracle ngầm chuyển đổi
Oracle tự động chuyển kiểu của dữ liệu trong một số trường hợp sau:
- Khi INSERT hoặc UPDATE gán giá trị cho cột có kiểu khác, Oracle sẽ tự động chuyển giá trị sang kiểu của cột.
- Khi sử dụng các hàm hoặc các toán tử mà các tham số có kiểu không tương thích thì Oracle sẽ tự động chuyển kiểu.
- Khi sử dụng toán tử so sánh mà các giá trị có các kiểu khác nhau, Oracle sẽ tự động chuyển kiểu.
Người sử dụng tự chuyển đổi
Oracle cung cấp các hàm để chuyển đổi kiểu, ví dụ:
TO_NUMBER (chuyển sang kiểu số).
TO_CHAR (chuyển sang kiểu ký tự).
TO_DATE (Chuyển sang kiểu ngày).
2.3 Dữ liệu rỗng (Null)
Cột có giá trị rỗng (NULL) là cột chưa được gán giá trị, nói cách khác nó chưa được khởi tạo giá trị.
Các cột với bất kỳ kiểu dữ liệu nào cũng có thể có giá trị NULL, trừ khi nó là khoá hay có ràng buộc toàn vẹn NOT NULL.
NULL trong các hàm SQL
Trong các hàm làm việc với từng cột hay hàm vô hướng (scalar function)
Các hàm loại này trả về trị null khi có tham số null, trừ hàm NVL và TRANSLATE có thể trả về giá trị thực. Ví dụ: NVL (comm, 0) trả về giá trị 0 khi comm là null.
Trong các hàm làm việc với nhóm các cột (group function)
Hầu hết các hàm làm việc trên nhóm bỏ qua vị trí null, ví dụ như khi sử dụng hàm AVG để tính trung bình cho một cột có giá trị 1000, null, null, null, 2000 khi đó trung bình được tính là (1000+200)/2 = 1500, như vậy trị null bị bỏ qua chứ không phải xem là trị 0.
NULL trong các biểu thức so sánh: Để kiểm tra có phải null hay không dùng các toán tử IS NULL hoặc IS NOT NULL. Nếu trong biểu thức so sánh có trị null tham gia và kết quả của biểu thức phụ thuộc vào trị null thì kết quả là không xác định, tuy nhiên trong biểu thức DECODE, hai giá trị null được xem là bằng nhau trong phép so sánh.
NULL trong biểu thức điều kiện: Oracle xem các biểu thức với kết quả không xác định tương đương với FALSE, ví dụ comm = null có kết quả không xác định và do đó biểu thức so sánh xem như kết quả FALSE. Câu lệnh SELECT * FROM emp WHERE comm = null không có mẩu tin nào được chọn. Nếu muốn chọn các nhân viên có comm là null thì phải dùng toán tử IS NULL: SELECT * FROM emp WHERE comm IS NULL.
Các cột giả (Pseudocolumn)
Các cột giả giống như các cột thật của bảng nhưng không thực sự chứa dữ liệu trong bảng. Có thể select từ cột giả nhưng không thể insert, update hay delete.
3.1 Curval và Nextval
Sequence
Là object dùng để phát sinh dãy số tuần tự, thường được dùng để làm khoá. Để tạo sequence, dùng lệnh Create Sequence. Làm việc với các sequence, dùng lệnh SQL với các cột giả: Curval (Cho giá trị hiện thời của sequence), Nextval (Tăng giá trị hiện thời của sequence và cho giá trị sau khi tăng). Phải xác định tên sequence trước curval và nextval:
sequence.CURVAL
sequence.NEXTVAL
Để truy cập các sequence không thuộc schema hiện thời thì phải chỉ ra tên schema:
schema.sequence.CURVAL
schema.sequence.NEXTVAL
Để truy cập sequence từ xa, thì còn phải chỉ ra datalink:
schema.sequence.CURVAL@dblink
schema.sequence.NEXTVAL@dblink
Sử dụng sequence
Curval và Nextval có thể được sử dụng trong các trường hợp sau: Trong các danh sách lựa chọn của câu lệnh Select; Trong mệnh đề Values của câu lệnh Insert; Trong mệnh đề Set của câu lệnh Update.
Chúng không được sử dụng trong các trường hợp sau: Trong câu hỏi con; Trong các view và snapshot; Trong câu lệnh Select có tác tử Distinct, có sử dụng Group By hay Order By; Trong câu lệnh Select có sử dụng các phép toán tập hợp như UNION, INSERT, MINUS; Trong mệnh đề Where của câu lệnh Select; Giá trị Default của cột trong câu lệnh Create Table hay Alter table; Trong điều kiện của ràng buộc Check.
3.2 Level
Có thể định nghĩa quan hệ thừa kế trong câu hỏi bằng mệnh đề Start With và Connect By trong câu lệnh Select, mỗi mẩu tin là một node trong cây phân cấp. Cột giả Level cho biết cấp của mẩu tin hay cấp của node trong quan hệ thừa kế.
Root node là node cấp cao nhất.
Child node là node con hay không phải là root node.
Parent node là node có node con.
Leaf node là node không có node con.
3.3 Rowid
Mỗi mẩu tin trong table Oracle có một địa chỉ, cột giả Rowid cho biết địa chỉ này. Mỗi Rowid gồm block.row.file. Rowid có nhiều ưu điểm như: Qua Rowid là cách nhanh nhất để định vị một mẩu tin; Cho biết mẩu tin được lưu giữ như thế nào; Là unique identify cho table; Rowid không thay đổi trong suốt quá trình tồn tại của mẩu tin.
Ví dụ cho biết Rowid và tên nhân viên trong table EMP
SELECT Rowid, ename FROM emp WHERE depno = 20;
3.4 RowNum
Là cột giả cho biết thứ tự của mẩu tin trong kết qủ trả về của câu lệnh Select. Chẳng hạn để chọn ít hơn 10 mẩu tin trong table emp ta thực hiện: Select * From emp Where Rownum < 10.
Các lệnh SQL
4.1 Tổng quan về tập lệnh
Câu lênh SQL được viết lên tục và có thể viết nhiều dòng, kết thúc bằng dấu (;) hay dấu (/). Các từ vựng trong câu lệnh không phân biệt chữ hoa chữ thường.
4.2 Phân loại tập lệnh
Lệnh định nghĩa cấu trúc dữ liệu: Như Create Table, Alter Table, Drop Table,...Các lệnh định nghĩa cấu trúc dữ liệu cho phép thực hiện các công việc: Tạo, Sửa đổi và Xoá các object; Gán và huỷ bỏ quyền; Tạo auditing options; Đưa các chú thích vào tự điển dữ liệu. Các lệnh thao tác trên cấu trúc dữ liệu tự động commit.
Lệnh thao tác dữ liệu: Nhóm lệnh thao tác như: Select, Insert, Update, Delete,... Các lệnh thao tác dữ liệu chỉ cập nhật thực vào CSDL chỉ khi được commit.
Lệnh điều khiển giao dịch: Nhóm lệnh này gồm: Commit, Rollback, Savepoint, Set Transaction.
Lệnh điều khiển session: Nhóm lệnh này gồm: Alter Session, Set Role.
Lệnh hệ thống: Nhóm lệnh này có: Alter System.
Nhúng lệnh SQL: Nhóm lệnh này gồm: Close, Connect, Declar Cursor, Declar Database, Declar Statement, Declar Table, Describe, Execute, Execute Immediate, Fetch, Open, Prepare, Type, Var, Whenever.
Các lệnh trong SQL mở rộng (SQL* PLUS): Đưa các lệnh SQL vào ngôn ngữ thủ tục và nó được thể hiện qua ngôn ngữ PL/SQL.
- Dữ liệu thay thế trong câu lệnh: Dùng (&) để chỉ phần thay thế trong câu lệnh. Nếu dùng (&&) chỉ biến thay thế thì sau câu lệnh biến thay thế vẫn còn tồn tại.
- Lệnh Define: Khai báo và gán giá trị cho biến. Để loại bỏ biến ra khỏi bộ nhớ dùng lệnh Undefine. Để liệt kê các biến đã khai báo dùng lệnh Define mà không chỉ biến.
- Lệnh Accept: Khai báo và gán giá trị cho biến với dòng hiển thị.
PL/SQL
5.1 SQL trong PL/SQL
Mỗi lệnh SQL kết thúc bằng dấu (;). Lệnh định nghĩa CSDL (DDL) không được sử dụng trong PL/SQL; Lệnh Select trả về nhiều dòng có thể gây Exeption; Lệnh DML có thể tác động trên nhiều dòng.
PL/SQL có nhiều ưu điểm so với các ngôn ngữ lập trình khác về mặt quản lý logic và hỗ trợ và hỗ trợ các quy luật hoạt động của các ứng dụng CSDL. Mã PL/SQL được sử dụng để giao tiếp với CSDL cũng được lưu trữ trực tiếp trong CSDL Oracle và là ngôn ngữ lập trình duy nhất giao tiếp với CSDL Oracle một cách tự nhiên bên trong môi trường CSDL.
5.2 Cấu trúc chương trình PL/SQL
Sự module hoá
PL/SQL cho phép nhà phát triển tạo ra các module chương trình để cải thiện khả năng sử dụng lại phần mềm và dấu độ phức tạp của của sự thực thi một tác vụ đặc biệt dưới một cái tên.
Cursor
Một trong những sức mạnh thực sự của PL/SQL là khả năng quản lý cursor. Một cursor là một thẻ quản (handle) của một địa chỉ trong bộ nhớ đang lưu trữ kết quả của một lệnh SQL đã thực hiện. Chúng cực kỳ hữu dụng để thực hiện các thao tác trên các hàng trả về từ một lệnh select.
Xử lý lỗi
Các lỗi (error) được gọi là các Exception trong PL/SQL và chúng được kiểm tra ngầm bất kỳ nơi nào trong khối mã lệnh, Exception tương ứng với lỗi (error) có thể xảy ra. Khi đó, sự thực thi trong khối mã lệnh dừng lại và điều khiển chuyển sang trình xử lý Exception.
5.3Khối PL/SQL (PL/SQL block)
Bất kỳ một khối PL/SQL nào cũng có ba thành phần: phần khai báo biến, phần thực thi và trình xử lý lỗi. Phần khai báo biến chứa phần định danh tất cả các cấu trúc biến sẽ được sử dụng trong khối mã lệnh. Phần thực thi được bắt đầu với từ khoá Begin và kết thúc hoặc với từ khoá End cho toàn khối, hoặc với từ khoá Exeptions. Phần cuối cùng định nghĩa tất cả các lỗi có thể xảy ra trong khối và chỉ định chúng nên được sửa như thế nào.
Cấu trúc một khối PL/SQL như sau:
Declare
..................
Begin
.................
End;
PL/SQL là phương pháp tốt nhất có sẵn để viết và quản lý các stored procedure làm việc với dữ liệu Oracle. PL/SQL có thể sử dụng trong bốn cấu trúc trương trình: Procedure, Function, Package và Trigger. Procedure, Function tương tự nhau ở chỗ chúng đều chứa một chuỗi các chỉ thị mà SQL mà PL/SQL sẽ thực hiện nhưng chúng khác nhau là Function thì trả về một và chỉ một giá trị, các Procedure có thể trả về một số giá trị thông qua các thông số output. Các Package là các thư viện chọn lọc các Procedure và các Function PL/SQL có phần giao tiếp khai báo và phần thân chứa mã lệnh thực sự thực hiện bởi các Procedure và Function. Các Trigger là những khối PL/SQL đặc biệt thực hiện khi một sự kiện xảy ra. Các sự kiện bẫy Trigger bao gồm bất kỳ lệnh SQL nào.
Chương 3
Tổng quan về Oracle Developer/2000
Developer/2000 là một bộ các thành phần Oracle mà chúng ta có thể tích hợp để xây dựng các ứng dụng toàn diện.
Developer/2000 là một nhóm gồm các sản phẩm trợ giúp cho việc thiết kế, khởi tạo,và chạy các ứng dụng dựa trên một nền tảng đa dạng. Các công cụ thiết kế, phát triển và truy cập dữ liệu của Oracle gồm:
- Designer/2000
- Developer/2000
- Discoverer 3
Các đặc trưng phát triển
Developer/2000 cho phép chúng ta xây dựng các hệ thống thao tác cao với các lợi thế về GUI, CSDL, client/server và công nghệ Web. Các công cụ trực quan trong Developer/2000 có các đặc trưng và giao diện chung tạo khả năng dịch chuyển giữa các công cụ và thiết kế các thành phần bao gồm cả việc thiết kế module và có thể dùng lại được.
Các đặc trưng chính của Developer/2000
Trợ giúp GUI toàn diện
Developer/2000 trợ giúp các đặc trưng tự nhiên của Microsoft Windows9x và NT 4.0.
Các ứng dụng được phân phối
Các công cụ cung cấp các trợ giúp cục bộ, client-server, và Web với các kết nối CSDL trên một ứng dụng.
Các công cụ sản xuất và toàn diện
Developer/2000 cung cấp sự linh hoạt thiết kế thông qua các công cụ với các chức năng chung như Layout Editor và Object Navigator. Chúng ta có thể đặt các khối chương trình PL/SQL riêng ở trên server CSDL, server ứng dụng, hoặc trong ứng dụng client-side. Chúng ta có thể copy và dịch chuyển (move) các đối tượng giữa các module và server CSDL, sử dụng drag-and-drop thuận lợi.
Điều khiển nguồn mềm dẻo
Chúng ta có thể lưu trữ các định nghĩa của các module ứng dụng trong các flat file hoặc trong CSDL Oracle.
Khả năng mở rộng
Chúng ta có thể mở rộng các ứng dụng từ các người sử dụng đơn tới hàng nghìn người khác mà không làm thay đổi tới ứng dụng.
Hướng đối tượng
Developer/2000 cung cấp một mô hình thừa kế với sự linh hoạt thừa kế các thuộc tính và mã từ một đối tượng này tới một đối tượng khác và từ một ứng dụng này tới một ứng dụng khác thông qua lớp con và các thư viện đối tượng.
Các thành phần của Developer/2000
Project Builder
Form Builder
Report Builder
Graphic Builder
Query Builder
Schema Builder
Procedure Builder
Translation Builder
Do yêu cầu của đồ án tôi xin đi vào giới thiệu về Form Builder và Report Builder.
3.1 Form Builder
Form Builder là một công cụ tạo trình ứng dụng với với nhiều tính năng trong một CSDL. Nó là một giao diện được điều khiển bởi chuột, có khả năng thực hiện phần lớn các công việc phát triển và không cần nhiều đến việc ghi mã. Form Builder là một thành phần chính của Developer/2000. Nó cho phép chúng ta phát triển nhanh các ứng dụng dựa trên form để hiển thị và thao tác dữ liệu.
Với các ứng dụng Form Builder, chúng ta có thể thực hiện các công việc:
- Insert, Update, Delete và Query dữ liệu bằng sử dụng sự đa dạng của các item giao diện.
- Hiển thị dữ liệu bằng sử dụng các điều khiển text, sound, video, image, và ActiveX.
- Điều khiển các form thông qua một vài cửa sổ và các giao tác CSDL.
- Truy cập trực tiếp linh hoạt các ứng dụng Graphics và OLE2.
- Sử dụng các menu được tích hợp để truy cập linh hoạt toàn diện.
Đối với việc thiết kế các ứng dụng Form Builder, chúng ta có thể:
- Thiết kế các form để sử dụng một số các nguồn dữ liệu trong CSDL Oracle.
- Sử dụng các công cụ phát triển mạnh GUI để xây dựng nhanh và dễ các ứng dụng.
- Thiết kế các ứng dụng có thể đặt ở cả trong môi trưng character-mode và GUI.
- Dễ copy hoặc dịch chuyển các đối tượng và các thuộc tính giữa các ứng dụng.
- Sử dụng các đặc trưng thiết kế chung và quen thuộc của các công cụ Developer/2000, chẳng hạn như Wizards, Layout Editor, Object Navigator và PL/SQL Editor.
Các lớp trình ứng dụng và Oracle Developer
Ngày nay việc phát triển trình ứng dụng có khuynh hướng chuyển từ các trình ứng dụng hai lớp sang các chương trình thực thi có cấu trúc nhiều lớp (thường gọi ba lớp).
Chuẩn bị trạm làm việc để chạy Form hoặc Report Builder
Trước khi chạy Form Builder chúng ta cần thực hiện những việc sau:
- Chúng ta phải có sự truy cập vào một CSDL Oracle cục bộ hay từ xa. Để truy cập một CSDL từ xa, chúng ta và người quản lý CSDL của chúng ta phải cài đặt Net8 và có khả năng nối kết thành công vào CSDL.
- Chúng ta phải tải phần mềm mạng nếu chúng ta đang truy cập một CSDL từ xa. Nếu chúng ta đang sử dụng một CSDL Personal Oracle8i cục bộ thì điều này là không cần thiết.
Đối với việc phát triển các trình ứng dụng cho Web, Oracle đi kèm với applet viewer đã được tải trước, viewer này nhái lại môi trường Web nhằm cho phép người lập trình xem diện mạo của một trình ứng dụng và cách hoạt động của nó trên Web.
Các thành phần chính của Form Builder
a) Object Navigator
Thành phần quan trọng nhất, nó được dùng chung bởi tất cả các công cụ Developer. Biết cách sử dụng các hàm của nó sẽ cho phép chúng ta chuyển sang các công cụ khác. Object Navigator chủ yếu được sử dụng để di chuyển một cách nhanh chóng giữa ba giao diện khác. Mục đích khác của nó là phát triển trình ứng dụng rê và thả. Nhờ sử dụng Object Navigator, chúng ta có thể truy cập các đối tượng và các thư viện trên đĩa và trong CSDL.
b) Property Palette
Là nơi chúng ta dành nhiều thời gian nhất cho sự phát triển, xác lập các thuộc tính hay các đặc điểm đối tượng. Các đặc điểm mà chúng ta ấn định nhờ sử dụng Property Palette phụ thuộc vào kiểu đối tượng được thiết kế.
Có ba cách để thay đổi các đặc điểm trên các Property Palette:
- Một số đặc điểm được xác lập bằng cách nhập thông tin vào hộp nhập text, hộp này sẽ được bật sáng khi một đặc điểm nào đó được chọn.
- Một số đặc điểm được xác lập bằng cách nhấp mũi tên hướng xuống, mũi tên này xuất hiện khi đặc điểm được chọn.
- Một số đặc điểm được xác lập bằng cách nhấp vào nút More, nút này xuất hiện khi đặc điểm được chọn.
c) Layout Editor
Là nơi chúng ta thiết kế hình dạng và nội dung của canvas hay màn hình, đây là những gì mà client hay người sử dụng khác tương tác. Trong khi đang làm việc với các khung xem canvas, chúng ta có thể điều khiển màu, kích thước, font, truy cập dữ liệu và kiểu của trình ứng dụng. Layout Editor là nơi chúng ta vẽ các đối tượng của trình ứng dụng, với toàn bộ màn hình được xem là Canvas.
Chúng ta tạo một canvas mới trong Object Navigator bằng cách bật sáng canvases và nhấp công cụ Create trên bảng công cụ (tool palette) Object Navigator.
d) PL/SQL Editor
PL/SQL Editor là nơi trình ứng dụng đảm trách chức năng đặc biệt của nó. Chúng ta có thể điều khiển một cách chính xác những gì mà chương trình có thể và không thể thực hiện dựa vào công việc chúng ta đang làm trong editor này. Đây là nơi các trigger và các thủ tục của form được chỉnh sửa và biên dịch. Nó cũng là nơi các thủ tục CSDL có thể được truy cập, chỉnh sửa và biên dịch. PL/SQL Editor được truy cập bằng cách chọn menu PL/SQL Editor.
e) Object Library
Trong môi trường phát triển bất kỳ, chúng sẽ luôn có các tiêu chuẩn mà chúng ta muốn những người phát triển tuân theo, cũng như các đối tượng chung, có thể được sử dụng trong suốt quá trình phát triển. Object Library cung cấp một phương pháp đơn giản để sử dụng lại các đối tượng và tuân theo các tiêu chuẩn qua toàn bộ tổ chức phát triển.
3.2 Report Builder
Report Builder là một công cụ tạo report với nhiều đặc tính cho kết xuất có chất lượng nhờ sử dụng các nguồn dữ liệu (CSDL Oracle8i)
Các Report Builder xử lý các query
Điểm quan trọng chính của Report Builder là sự thực thi. Một mạng các câu lệnh Select được xếp lồng có thể cho ra kết quả mong muốn.
Phần kết luận
1. Các kết quả đạt được
Qua quá trình tìm hiểu Hệ quản trị CSDL Oracle tôi đã đạt được một số kết quả sau:
Về CSDL Oracle:
+ Hiểu được các đối tượng trong Hệ CSDL Oracle (về Table, View,...), cách quản lý khối lượng dữ liệu lớn, việc lưu trữ và phục hồi dữ liệu của Oracle.
+ Nắm được các kỹ thuật xử lý đảm bảo an toàn dữ liệu.
+ Nắm bắt được cơ bản công cụ Oracle Developer để tạo form, tạo menu, cập nhật, sửa chữa dữ liệu trên form.
+ Nắm bắt được cơ bản cách sử dụng ngôn ngữ PL/SQL.
Hệ Quản trị CSDL Oracle đã, đang và sẽ phát triển rộng ở Việt Nam, vì vậy việc nghiên cứu, học tập về nó là hết sức cần thiết.
Hệ thống nên được triển khai ở trên mạng để phát huy được hết khả năng mạnh mẽ của Oracle đối với CSDL lớn. Cũng có thể xây dựng hệ thống trên các trang Web để hỗ trợ tính năng truy cập dữ liệu từ xa.
2. Kết luận
Qua nghiên cứu, tìm hiểu thấy được tính thiết thực cũng như tính khoa học và nhu cầu ứng dụng của Hệ Quản trị CSDL Oracle, được sự đồng ý của giáo viên hướng dẫn em đã hết sức cố gắng. Trong thời gian nghiên cứu không nhiều, được sự giúp đỡ nhiệt tình của thầy giáo hướng dẫn cô Thuý và các thầy giáo trong khoa tin học Kinh Tế em đã đạt được kết quả như đã nêu ở trên đáp ứng được các yêu cầu mà đề tài đặt ra một cách khoa học và mang tính thực tiễn cao.
Cuối cùng tôi xin chân thành cảm ơn cô giáo Nguyễn Thị Thuý cùng các thầy trong khoa Tin Học Kinh Tế đã nhiệt tình giúp đỡ em về mọi mặt để em hoàn thành đề án này .Em rất mong nhận được các ý kiến đóng góp của các thầy giáo, bạn bè để đề tài có thể được triển khai trên các ứng dụng thực tế, đáp ứng sự cần thiết ứng dụng, triển khai Hệ quản trị CSDL Oracle vào thực tế ở Việt Nam.
Hà Nội, ngày 30 háng 11 năm 2004
Tài liệu tham khảo
1. Giáo trình Oracle căn bản (Khoá đào tạo Oracle - End User) - Công ty Tài Ngân BFC.
2. Nguyễn Ngọc Tuấn- Oracle8i Toàn tập - Nhà xuất bản Thống Kê, 2000.
3. Ngô Trung Việt - Phân tích và thiết kế tin học hệ thống- Nhà xuất bản Giao thông vận tải, 2000.
4. Trần Tiến Dũng (chủ biên), Hoàng Đức Hải, Hữu Đức - Giáo trình lý thuyết và thực hành Oracle - Nhà xuất bản Giáo dục, 2000.
5. Bulent Cinarkaya, Tushar Gadhia - Introduction to Oracle: SQL and PL/SQL Using Procedure Builder (Volume one, two, three) - Kelly Lee and Renee Voss, 1998.
6. Bulent Cinarkaya, Tushar Gadhia - Developer/2000: Build Form (Volume one, two) - Kelly Lee and Renee Voss, 1998.
7. Bulent Cinarkaya, Tushar Gadhia - Developer/2000: Build Report (Volume one, two) - Kelly Lee and Renee Voss, 1998.
Mục lục
Các file đính kèm theo tài liệu này:
- 3497.doc