You are on page 1of 26

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU VỚI ORACLE

CHƯƠNG 1. GIỚI THIỆU TỔNG QUAN ĐỀ TÀI

1.1. Giới thiệu đề tài

Trong thờ i đạ i cô ng nghệ hiện nay, việc quả n lý thô ng tin trong cá c thư viện
đò i hỏ i sự hiệu quả và chính xá c cao. Em đã chọ n đề tà i "Hệ Quả n Trị Cơ Sở Dữ
Liệu Quả n Lý Thư Viện vớ i Oracle" để phá t triển mộ t hệ thố ng thô ng tin hoà n
chỉnh, minh bạ ch và dễ quả n lý. Sử dụ ng Oracle, mộ t trong nhữ ng hệ thố ng quả n
trị cơ sở dữ liệu hà ng đầ u thế giớ i, chú ng tô i đã đề xuấ t mộ t giả i phá p tiên tiến
cho việc quả n lý thô ng tin trong thư viện.

1.2. Các thực thể

1.2.1. Thực thể TacGia (Authors)

 AuthorID: Mã số định danh duy nhấ t cho mỗ i tá c giả .


 AuthorName: Tên củ a tá c giả .

1.2.2. Thực thể TheLoai (Genres)

 GenreID: Mã số định danh duy nhấ t cho mỗ i thể loạ i sá ch.


 GenreName: Tên củ a thể loạ i sá ch.

1.2.3. Thực thể Sach (Books)

 BookID: Mã số định danh duy nhấ t cho mỗ i cuố n sá ch.


 Title: Tiêu đề củ a cuố n sá ch.
 ISBN: Số ISBN củ a sá ch.
 Publisher: Nhà xuấ t bả n củ a sá ch.
 PublishYear: Nă m xuấ t bả n củ a sá ch.
 GenreID: Khó a ngoạ i tham chiếu đến TheLoai (GenreID) - xá c định thể loạ i
củ a sá ch.
 AuthorID: Khó a ngoạ i tham chiếu đến TacGia (AuthorID) - xá c định tá c giả
củ a sá ch.
 AvailableCopies: Số lượ ng bả n sao củ a sá ch có sẵ n trong thư viện.
1.2.4. Thực thể DocGia (Readers)

 ReaderID: Mã số định danh duy nhấ t cho mỗ i độ c giả .


 FirstName: Tên đầ u củ a độ c giả .
 LastName: Họ củ a độ c giả .
 Email: Địa chỉ email củ a độ c giả .
 Phone: Số điện thoạ i củ a độ c giả .

1.2.5. Thực thể MuonSach (Book Loans)

 LoanID: Mã số định danh duy nhấ t cho mỗ i phiếu mượ n sá ch.


 ReaderID: Khó a ngoạ i tham chiếu đến DocGia (ReaderID) - xá c định độ c giả
mượ n sá ch.
 BookID: Khó a ngoạ i tham chiếu đến Sach (BookID) - xá c định sá ch đượ c
mượ n.
 LoanDate: Ngày mượ n sá ch.
 DueDate: Ngày hạ n trả sá ch.
 ReturnDate: Ngày trả sá ch (nếu đã trả ).

1.2.6. Thực thể NhanVien (Employees)

 NhanVienID: Mã số định danh duy nhấ t cho mỗ i nhâ n viên thư viện.
 HoTen: Tên đầy đủ củ a nhâ n viên.
 GioiTinh: Giớ i tính củ a nhâ n viên.
 DiaChi: Địa chỉ nhâ n viên.
 DienThoai: Số điện thoạ i củ a nhâ n viên.

1.2.7. Thực thể TaiKhoan (User Accounts)

 TaiKhoanID: Mã số định danh duy nhấ t cho mỗ i tà i khoả n ngườ i dù ng.


 Username: Tên ngườ i dù ng đă ng nhậ p.
 Password: Mậ t khẩ u đă ng nhậ p củ a ngườ i dù ng.
 NhanVienID: Khó a ngoạ i tham chiếu đến NhanVien (NhanVienID) - xá c
định nhâ n viên liên kết vớ i tà i khoả n ngườ i dù ng.
 PhieuMuon (Borrowing Receipts)
 PhieuMuonID: Mã số định danh duy nhấ t cho mỗ i phiếu mượ n sá ch.
 ReaderID: Khó a ngoạ i tham chiếu đến DocGia (ReaderID) - xá c định độ c giả
mượ n sá ch.
 NhanVienID: Khó a ngoạ i tham chiếu đến NhanVien (NhanVienID) - xá c
định nhâ n viên thư viện tạ o phiếu mượ n.
 NgayMuon: Ngày mượ n sá ch.
 NgayTraDuKien: Ngày hạ n trả sá ch dự kiến.
 NgayTraThucTe: Ngày trả sá ch thự c tế (nếu đã trả ).

1.2.8. Thực thể ChiTietPhieuMuon (Borrowing Details)

 ChiTietID: Mã số định danh duy nhấ t cho mỗ i chi tiết trong phiếu mượ n
sá ch.
 PhieuMuonID: Khó a ngoạ i tham chiếu đến PhieuMuon (PhieuMuonID) -
xá c định phiếu mượ n sá ch.
 BookID: Khó a ngoạ i tham chiếu đến Sach (BookID) - xá c định sá ch đượ c
mượ n trong phiếu mượ n đó .

1.3. Mối quan hệ giữa các thực thể

Mố i quan hệ giữ a TacGia (Authors) và Sach (Books):

 Mỗ i tá c giả có thể viết nhiều cuố n sá ch, nhưng mỗ i cuố n sá ch chỉ có mộ t tá c


giả . Điều này đượ c thể hiện qua khó a ngoạ i AuthorID trong bả ng Sach
(Books) tham chiếu đến TacGia (Authors).

Mố i quan hệ giữ a TheLoai (Genres) và Sach (Books):

 Mỗ i cuố n sá ch thuộ c mộ t thể loạ i cụ thể, nhưng mỗ i thể loạ i có thể có nhiều
cuố n sá ch. Điều này đượ c thể hiện qua khó a ngoạ i GenreID trong bả ng
Sach (Books) tham chiếu đến TheLoai (Genres).

Mố i quan hệ giữ a DocGia (Readers) và MuonSach (Book Loans):

 Mỗ i độ c giả có thể mượ n nhiều cuố n sá ch, và mỗ i cuố n sá ch có thể đượ c


mượ n bở i nhiều độ c giả khá c nhau. Mố i quan hệ này đượ c thể hiện qua
khó a ngoạ i ReaderID trong bả ng MuonSach (Book Loans) tham chiếu đến
DocGia (Readers).

Mố i quan hệ giữ a Sach (Books) và MuonSach (Book Loans):

 Mỗ i cuố n sá ch có thể đượ c mượ n nhiều lầ n, nhưng mỗ i phiếu mượ n chỉ


á nh xạ đến mộ t cuố n sá ch cụ thể. Điều này đượ c thể hiện qua khó a ngoạ i
BookID trong bả ng MuonSach (Book Loans) tham chiếu đến Sach (Books).

Mố i quan hệ giữ a NhanVien (Employees) và TaiKhoan (User Accounts):

 Mỗ i nhâ n viên củ a thư viện có thể có mộ t tà i khoả n ngườ i dù ng để đă ng


nhậ p hệ thố ng. Mố i quan hệ này đượ c thể hiện qua khó a ngoạ i NhanVienID
trong bả ng TaiKhoan (User Accounts) tham chiếu đến NhanVien
(Employees).

Mố i quan hệ giữ a DocGia (Readers) và PhieuMuon (Borrowing Receipts):

 Mỗ i độ c giả có thể có nhiều phiếu mượ n sá ch, nhưng mỗ i phiếu mượ n chỉ
á nh xạ đến mộ t độ c giả . Điều này đượ c thể hiện qua khó a ngoạ i ReaderID
trong bả ng PhieuMuon (Borrowing Receipts) tham chiếu đến DocGia
(Readers).

Mố i quan hệ giữ a NhanVien (Employees) và PhieuMuon (Borrowing Receipts):

 Mỗ i phiếu mượ n sá ch đượ c tạ o ra bở i mộ t nhâ n viên cụ thể. Mố i quan hệ


này đượ c thể hiện qua khó a ngoạ i NhanVienID trong bả ng PhieuMuon
(Borrowing Receipts) tham chiếu đến NhanVien (Employees).

Mố i quan hệ giữ a PhieuMuon (Borrowing Receipts) và ChiTietPhieuMuon


(Borrowing Details):

 Mỗ i phiếu mượ n sá ch có thể chứ a nhiều chi tiết mượ n sá ch, và mỗ i chi tiết
mượ n sá ch chỉ á nh xạ đến mộ t phiếu mượ n sá ch cụ thể. Điều này đượ c thể
hiện qua khó a ngoạ i PhieuMuonID trong bả ng ChiTietPhieuMuon
(Borrowing Details) tham chiếu đến PhieuMuon (Borrowing Receipts).
Chương 2. Xây dựng cơ sở dữ liệu

2.1. Thiết kế các bảng

Hình 1. Bảng TacGia

Hình 2. Bảng TheLoai

Hình 3. bảng Sach

Hình 4. Bảng DocGia


Hình 5. Bảng MươnSach

Hình 6. Bảng NhanVien

Hình 7. Bảng TaiKhoan

Hình 8. Bảng PhieuMuon


Hình 9. Bảng ChiTietPhieuMuon

2.2. Nhập dữ liệu


INSERT INTO TacGia (AuthorID, AuthorName) VALUES
(1, 'Nguyen Ngoc Anh'),
(2, 'To Huu'),
(3, 'Ngo Tat To');

INSERT INTO TheLoai (GenreID, GenreName) VALUES


(1, 'Tiểu Thuyết'),
(2, 'Kinh Tế'),
(3, 'Khoa Học');

INSERT INTO Sach (BookID, Title, ISBN, Publisher, PublishYear, GenreID, AuthorID,
AvailableCopies) VALUES
(1, 'Tiểu Thuyết A', '1234567890', 'NXB A', 2000, 1, 1, 5),
(2, 'Kinh Tế Thị Trường', '2345678901', 'NXB B', 2010, 2, 2, 3),
(3, 'Khoa Học Đằng Sau Hậu Tận Thế', '3456789012', 'NXB C', 2015, 3, 3, 8);

INSERT INTO DocGia (ReaderID, FirstName, LastName, Email, Phone) VALUES


(1, 'Ngoc', 'Tran', 'ngoc.tran@example.com', '1234567890'),
(2, 'Linh', 'Nguyen', 'linh.nguyen@example.com', '2345678901');

INSERT INTO MuonSach (LoanID, ReaderID, BookID, LoanDate, DueDate, ReturnDate) VALUES
(1, 1, 1, '2023-10-16', '2023-10-23', '2023-10-23'),
(2, 2, 3, '2023-10-15', '2023-10-22', NULL);

INSERT INTO NhanVien (NhanVienID, HoTen, GioiTinh, DiaChi, DienThoai) VALUES


(1, 'Nhan Vien A', 'Nam', 'Dia Chi A', '1234567890'),
(2, 'Nhan Vien B', 'Nữ', 'Dia Chi B', '2345678901');

INSERT INTO TaiKhoan (TaiKhoanID, Username, Password, NhanVienID) VALUES


(1, 'user1', 'password1', 1),
(2, 'user2', 'password2', 2);

INSERT INTO PhieuMuon (PhieuMuonID, ReaderID, NhanVienID, NgayMuon, NgayTraDuKien,


NgayTraThucTe) VALUES
(1, 1, 1, '2023-10-16', '2023-10-23', '2023-10-23'),
(2, 2, 2, '2023-10-15', '2023-10-22', NULL);

INSERT INTO ChiTietPhieuMuon (ChiTietID, PhieuMuonID, BookID) VALUES


(1, 1, 1),
(2, 2, 3);

2.3. Code trên Oracle


Hình 10. Nhập dữ liệu trên Oracle
CHƯƠNG 3. THIẾT KẾ CÁC TRUY VẤN

3.1. Truy vấn cơ bản

USE QLTHUVIEN
GO

SELECT * FROM Sach;


SELECT Sach.Title, TacGia.AuthorName, TheLoai.GenreName
FROM Sach
JOIN TacGia ON Sach.AuthorID = TacGia.AuthorID
JOIN TheLoai ON Sach.GenreID = TheLoai.GenreID;

SELECT * FROM Sach WHERE AvailableCopies > 0;

SELECT DocGia.FirstName, DocGia.LastName, Sach.Title, MuonSach.LoanDate,


MuonSach.DueDate, MuonSach.ReturnDate
FROM DocGia
JOIN MuonSach ON DocGia.ReaderID = MuonSach.ReaderID
JOIN Sach ON MuonSach.BookID = Sach.BookID;

SELECT Sach.Title, MuonSach.LoanDate, MuonSach.DueDate,


MuonSach.ReturnDate
FROM Sach
JOIN MuonSach ON Sach.BookID = MuonSach.BookID
WHERE MuonSach.ReaderID = 1;

SELECT TheLoai.GenreName, COUNT(MuonSach.BookID) AS TotalLoans


FROM TheLoai
LEFT JOIN Sach ON TheLoai.GenreID = Sach.GenreID
LEFT JOIN MuonSach ON Sach.BookID = MuonSach.BookID
GROUP BY TheLoai.GenreID;
UPDATE Sach
SET AvailableCopies = AvailableCopies + 1
WHERE BookID = 1

3.2. Truy vấn lồng nhau

Truy vấ n lồ ng nhau trong SQL là việc sử dụ ng mộ t truy vấ n trong phạ m vi củ a mộ t


truy vấ n khá c. Điều này giú p bạ n kết hợ p dữ liệu từ nhiều bả ng hoặ c á p dụ ng cá c
phép toá n phứ c tạ p trên dữ liệu. Dướ i đây là mộ t số ví dụ về truy vấ n lồ ng nhau:

Truy vấn lồng nhau để xem thông tin về người đọc và các sách mà họ đã
mượn:

SELECT DocGia.FirstName, DocGia.LastName,

(SELECT Sach.Title FROM Sach WHERE MuonSach.BookID = Sach.BookID)


AS BorrowedBook

FROM DocGia

JOIN MuonSach ON DocGia.ReaderID = MuonSach.ReaderID;

Trong truy vấ n này, truy vấ n lồ ng nhau đang chạy trong mỗ i dò ng củ a kết quả
chính để lấy tiêu đề củ a sá ch đượ c mượ n bở i ngườ i đọ c đó .

Truy vấn lồng nhau để tính tổng số lượng sách mỗi người đọc đã mượn:

SELECT DocGia.FirstName, DocGia.LastName,

(SELECT SUM(AvailableCopies) FROM Sach WHERE MuonSach.BookID =


Sach.BookID) AS TotalBorrowed

FROM DocGia

JOIN MuonSach ON DocGia.ReaderID = MuonSach.ReaderID

GROUP BY DocGia.ReaderID;
Trong truy vấ n này, truy vấ n lồ ng nhau tính tổ ng số lượ ng bả n sao khả dụ ng củ a
sá ch mỗ i ngườ i đọ c đã mượ n.

Truy vấn lồng nhau để lấy danh sách các sách có số lượng bản sao khả dụng
lớn hơn 0:

SELECT *

FROM Sach

WHERE AvailableCopies > 0

AND GenreID = (SELECT GenreID FROM TheLoai WHERE GenreName = 'Tiểu


Thuyết');

Trong truy vấ n này, truy vấ n lồ ng nhau sử dụ ng mộ t câ u truy vấ n để lấy ID củ a thể


loạ i 'Tiểu Thuyết' từ bả ng TheLoai và sau đó sử dụ ng giá trị này trong câ u truy
vấ n chính để lấy cá c sá ch củ a thể loạ i 'Tiểu Thuyết' có số lượ ng bả n sao khả dụ ng
lớ n hơn 0.

3.3. Truy vấn gộp nhóm

Truy vấ n gộ p nhó m (Group By) đượ c sử dụ ng để nhó m cá c dò ng dữ liệu dự a trên


giá trị củ a mộ t hoặ c nhiều cộ t, sau đó thự c hiện cá c hà m tổ ng hợ p như SUM,
COUNT, AVG, MAX hoặ c MIN trên cá c nhó m này. Dướ i đây là mộ t số ví dụ về truy
vấ n gộ p nhó m:

Tính tổng số lượng sách theo thể loại:

SELECT TheLoai.GenreName, SUM(Sach.AvailableCopies) AS


TotalAvailableCopies

FROM Sach

JOIN TheLoai ON Sach.GenreID = TheLoai.GenreID

GROUP BY TheLoai.GenreName;
Tính trung bình số lượng sách được mượn theo tác giả:

SELECT TacGia.AuthorName, AVG(MuonSach.BookID) AS


AverageBorrowedBooks

FROM TacGia

JOIN Sach ON TacGia.AuthorID = Sach.AuthorID

JOIN MuonSach ON Sach.BookID = MuonSach.BookID

GROUP BY TacGia.AuthorName;

Đếm số lượng sách mỗi đọc giả đã mượn:

SELECT DocGia.ReaderID, COUNT(MuonSach.BookID) AS


TotalBorrowedBooks

FROM DocGia

LEFT JOIN MuonSach ON DocGia.ReaderID = MuonSach.ReaderID

GROUP BY DocGia.ReaderID;

Tìm ngày mượn sách nhiều nhất:

SELECT MuonSach.LoanDate, COUNT(MuonSach.LoanID) AS TotalLoans

FROM MuonSach

GROUP BY MuonSach.LoanDate

ORDER BY TotalLoans DESC

LIMIT 1;

Tính tổng số lượng sách được mượn theo tháng:


SELECT MONTH(MuonSach.LoanDate) AS Month, COUNT(MuonSach.BookID)
AS TotalBorrowedBooks

FROM MuonSach

GROUP BY MONTH(MuonSach.LoanDate);

3.4. Truy vấn nâng cao

Dướ i đây là mộ t số ví dụ về truy vấ n SQL nâ ng cao, bao gồ m cá c truy vấ n kết hợ p,


truy vấ n có điều kiện, sử dụ ng chứ c nă ng phâ n trang và cá c kỹ thuậ t khá c:

Kết hợp các bảng và chọn cột cụ thể:

SELECT DocGia.FirstName, DocGia.LastName, Sach.Title

FROM DocGia

JOIN MuonSach ON DocGia.ReaderID = MuonSach.ReaderID

JOIN Sach ON MuonSach.BookID = Sach.BookID

WHERE Sach.GenreID = 1;

Sử dụng hàm LIKE để tìm sách theo tiêu đề chứa từ khóa "SQL"

SELECT * FROM Sach WHERE Title LIKE '%SQL%';

Sử dụng ORDER BY để sắp xếp kết quả theo năm xuất bản giảm dần:

SELECT * FROM Sach ORDER BY PublishYear DESC;

Sử dụng LIMIT để giới hạn số lượng kết quả trả về (phân trang):

SELECT * FROM Sach LIMIT 10 OFFSET 0; -- Trang đầ u tiên (0-9)


SELECT * FROM Sach LIMIT 10 OFFSET 10; -- Trang thứ hai (10-19)

Sử dụng UNION để kết hợp kết quả của hai truy vấn:

SELECT Title FROM Sach WHERE GenreID = 1

UNION

SELECT Title FROM Sach WHERE GenreID = 2;

Sử dụng INNER JOIN, LEFT JOIN và RIGHT JOIN để kết hợp các bảng khác
nhau:

SELECT DocGia.FirstName, DocGia.LastName, Sach.Title

FROM DocGia

INNER JOIN MuonSach ON DocGia.ReaderID = MuonSach.ReaderID

LEFT JOIN Sach ON MuonSach.BookID = Sach.BookID;

Sử dụng GROUP BY và HAVING để tìm tác giả có tổng số lượng sách mượn
lớn hơn 5:

SELECT TacGia.AuthorName, COUNT(MuonSach.BookID) AS


TotalBorrowedBooks

FROM TacGia

JOIN Sach ON TacGia.AuthorID = Sach.AuthorID

JOIN MuonSach ON Sach.BookID = MuonSach.BookID

GROUP BY TacGia.AuthorName
HAVING TotalBorrowedBooks > 5;
CHƯƠNG 4. LẬP TRÌNH PLSQL

4.1. Lập trình một số câu lệnh IF, ELSE, While

4.1.1. Câu lệnh IF, ELSE:

Trong SQL, câ u lệnh IF, ELSE đượ c sử dụ ng để kiểm tra điều kiện và thự c hiện cá c
hà nh độ ng tương ứ ng.

DECLARE @score INT = 80;

IF @score >= 70

PRINT 'Pass';

ELSE

PRINT 'Fail';

Trong ví dụ này, nếu @score lớ n hơn hoặ c bằ ng 70, nó sẽ in ra 'Pass', ngượ c lạ i, nó


sẽ in ra 'Fail'.

4.1.2. Câu lệnh WHILE:

Câ u lệnh WHILE đượ c sử dụ ng để lặ p qua mộ t khố i câ u lệnh trong khi mộ t điều


kiện đượ c đá nh giá là TRUE.

DECLARE @counter INT = 1;

WHILE @counter <= 10

BEGIN

PRINT 'Counter value: ' + CAST(@counter AS NVARCHAR(10));

SET @counter = @counter + 1;

END

Câ u lệnh WHILE sẽ lặ p qua khố i câ u lệnh bên trong (giữ a BEGIN và END) miễn là
@counter nhỏ hơn hoặ c bằ ng 10. Mỗ i lầ n lặ p, giá trị củ a @counter đượ c tă ng lên
1 và in ra mà n hình.
4.2. Một số thủ tục

Dướ i đây là mộ t số ví dụ về cá c thủ tụ c SQL (stored procedures). Thủ tụ c là mộ t


tậ p hợ p cá c câ u lệnh SQL đượ c lưu trữ và có thể đượ c gọ i từ ứ ng dụ ng hoặ c cá c
truy vấ n SQL khá c.

-- Tạ o mộ t thủ tụ c đơn giả n

CREATE PROCEDURE GetEmployeeDetails

AS

BEGIN

SELECT * FROM Employees;

END;

-- Tạ o thủ tụ c vớ i tham số đầ u và o

CREATE PROCEDURE GetEmployeeByID

@EmployeeID INT

AS

BEGIN

SELECT * FROM Employees WHERE EmployeeID = @EmployeeID;

END;

-- Gọ i thủ tụ c khô ng có tham số

EXEC GetEmployeeDetails;

-- Gọ i thủ tụ c vớ i tham số
DECLARE @ID INT = 1;

EXEC GetEmployeeByID @EmployeeID = @ID;

-- Thủ tụ c vớ i câ u lệnh IF, ELSE

CREATE PROCEDURE GetEmployeeSalaryStatus

@EmployeeID INT

AS

BEGIN

DECLARE @Salary INT;

SET @Salary = (SELECT Salary FROM Employees WHERE EmployeeID =


@EmployeeID);

IF @Salary >= 50000

PRINT 'High Salary';

ELSE

PRINT 'Low Salary';

END;

-- Thủ tụ c vớ i câ u lệnh WHILE

CREATE PROCEDURE GenerateNumbers

@MaxNumber INT

AS

BEGIN

DECLARE @Counter INT = 1;


WHILE @Counter <= @MaxNumber

BEGIN

PRINT @Counter;

SET @Counter = @Counter + 1;

END;

END;

-- Thủ tụ c vớ i câ u lệnh RETURN

CREATE PROCEDURE GetEmployeeCount

AS

BEGIN

DECLARE @Count INT;

SET @Count = (SELECT COUNT(*) FROM Employees);

RETURN @Count;

END;

4.3. Một số hàm

Hàm Tìm Sách Theo Tiêu Đề:

Hà m này trả về mộ t con trỏ (cursor) chứ a danh sá ch cá c sá ch có tiêu đề chứ a


chuỗ i đượ c truyền và o.

CREATE OR REPLACE FUNCTION FindBooksByTitle(p_title VARCHAR2)


RETURN SYS_REFCURSOR
AS
books_cursor SYS_REFCURSOR;
BEGIN
OPEN books_cursor FOR
SELECT * FROM Sach WHERE Title LIKE '%' || p_title || '%';
RETURN books_cursor;
END FindBooksByTitle;

Hàm Tính Tổng Số Sách Của Một Tác Giả:

Hà m này trả về số lượ ng sá ch củ a mộ t tá c giả dự a trên ID củ a tá c giả .

CREATE OR REPLACE FUNCTION CountBooksByAuthor(p_author_id INT)

RETURN INT

AS

book_count INT;

BEGIN

SELECT COUNT(*) INTO book_count FROM Sach WHERE AuthorID =


p_author_id;

RETURN book_count;

END CountBooksByAuthor;
CHƯƠNG 5. QUẢN TRỊ CƠ SỞ DỮ LIỆU ORACLE

5.1. Quản lý Instans

Bật, tắt instance trong Oracle Database

--1. Check
SQL> SELECT database_status FROM v$instance;

-- 2. Startup
STARTUP [FORCE] [RESTRICT] [PFILE=filename]
[EXCLUSIVE | PARALLEL | SHARED]
[OPEN [RECOVER][database]|MOUNT |NOMOUNT]
ALTER database { MOUNT | OPEN |OPEN READ ONLY | OPEN READ WRITTE}

-- 3. Shutdown
SHUTDOWN [NORMAL | TRANSACTIONAL | IMMEDIATE | ABORT ]

-- 4.Suspend, resume
ALTER system { SUSPEND | RESUME }

-- 5. Automatically start Instance


/var/opt/oracle/oratab (OR /etc/oratab)
-- Automatically start Oracle 11g on solaris after server reboot (N), disable (Y)
+ASM2:/oracle/grid:N # line added by Agent
fpdb:/oracle/db:N # line added by Agent

5.2. Quản lý tablespace

5.2.1. Tạo tablespace mới

SQL> create tablespace data2022 datafile


'/u01/app/oradata/CDB1/data2022_1.dbf' size 10G;
Tablespace created.

2. Add thêm datafile mớ i:

SQL> alter tablespace data2022 add datafile


'/u01/app/oradata/CDB1/data2022_2.dbf' size 10G;

Tablespace altered.

3. Drop tablespace

SQL> drop tablespace data2022 including contents and datafiles;

Tablespace dropped.

5.3. Quản lý người dùng

5.3.1. Tạo tài khoản người dùng

 Đi tớ i trang Users
 Trên trang Users, nhấ p và o Create .
 Trang Create Users xuấ t hiện, hiển thị trang con General.
 Trong trang Tên Ngườ i Dù ng, vui lò ng nhậ p Nickname.
 Trong danh sá ch Hồ Sơ, hãy chọ n giá trị Mặ c Định (DEFAULT). Thiết lậ p này
xá c định chính sá ch mậ t khẩ u mặ c định cho ngườ i dù ng.
 Đố i vớ i trườ ng Mậ t Khẩ u trong danh sá ch Xá c Thự c (Authentication), nhậ p
mậ t khẩ u.
 Trong cá c trườ ng Nhậ p Mậ t Khẩ u và Xá c Nhậ n Mậ t Khẩ u, vui lò ng nhậ p mậ t
khẩ u mớ i.
 Khô ng chọ n Hết Hạ n Mậ t Khẩ u Ngay Bây Giờ (Expire Password Now). Nếu tà i
khoả n đượ c đặ t thà nh hết hạ n, ngườ i dù ng hoặ c quả n trị viên cơ sở dữ liệu
phả i đổ i mậ t khẩ u trướ c khi đă ng nhậ p và o cơ sở dữ liệu.
 (Tù y chọ n) Bên cạ nh trườ ng Bả ng Lưu Trữ Mặ c Định, chọ n biểu tượ ng đèn
pin, sau đó chọ n USERS Tablespace, và sau đó nhấ p SELECT. Tấ t cả cá c đố i
tượ ng mà ngườ i dù ng tạ o sau đó sẽ đượ c lưu trong USERS Tablespace, trừ khi
có thiết lậ p đặ c biệt. Nếu bạ n khô ng chọ n Bả ng Lưu Trữ Mặ c Định, thì
Nickname sẽ đượ c gá n khô ng gian bằ ng mặ c định cho cơ sở dữ liệu, tứ c là , nó
sẽ đượ c tạ o trong khô ng gian mặ c định mà bạ n đã thiết lậ p.
 (Tù y chọ n) Bên cạ nh trườ ng Bả ng Tạ m Thờ i, nhấ p và o biểu tượ ng đèn pin,
chọ n Bả ng Tạ m (TEMP), sau đó nhấ p SELECT. Nếu bạ n để trố ng trườ ng Bả ng
Tạ m Thờ i, thì Nickname sẽ đượ c gá n khô ng gian bả ng tạ m thờ i mặ c định cho
cơ sở dữ liệu, vù ng này sẽ nằ m trong TEMP trong cơ sở dữ liệu mớ i đượ c cà i
đặ t.
 Đố i vớ i tù y chọ n Trạ ng Thá i, hãy chấ p nhậ n lự a chọ n mặ c định là Mở Khó a
(Unlocked). Sau đó , bạ n có thể khó a tà i khoả n ngườ i dù ng để ngă n ngườ i dù ng
đă ng nhậ p bằ ng tà i khoả n đó . Việc khó a tà i khoả n ngườ i dù ng tạ m thờ i từ chố i
quyền truy cậ p và o tà i khoả n ngườ i dù ng, điều này tố t hơn là xó a tà i khoả n, vì
việc xó a tà i khoả n cũ ng xó a tấ t cả cá c đố i tượ ng lượ c đồ do ngườ i dù ng sở
hữ u.
 Gá n hạ n mứ c 10 MB trên vù ng USERS tablespace.
 Nếu bạ n khô ng bấ m OK khi gá n hạ n mứ c vù ng bả ng (bướ c trướ c), thì hãy bấ m
OK ngay để tạ o ngườ i dù ng.

CREATE USER "LINHNT" PROFILE "DEFAULT" IDENTIFIED BY"*******"

DEFAULT TABLESPACE "LINHNT" TEMPORARY TABLESPACE


"TEMP"ACCOUNT UNLOCK GRANT "CONNECT" TO "LINHNT"

5.4. Sao lưu, phục hồi

Sao lưu dữ liệu trên Oracle Database là quá trình lưu lạ i cá c tệp dữ liệu, tệp redo
log và tệp điều khiển củ a cơ sở dữ liệu để có thể khô i phụ c lạ i nếu xảy ra lỗ i hoặ c
mấ t má t dữ liệu. Có nhiều phương phá p sao lưu dữ liệu trên Oracle Database,
nhưng mộ t trong nhữ ng cá ch phổ biến nhấ t là sử dụ ng Recovery Manager
(RMAN) - mộ t ứ ng dụ ng client cơ sở dữ liệu Oracle.

Để sao lưu dữ liệu trên Oracle Database bằ ng RMAN, bạ n cầ n thự c hiện cá c bướ c
sau:

 Kiểm tra xem Oracle Database củ a bạ n đã có thư mụ c dump chưa. Thư mụ c


dump là nơi lưu trữ cá c file backup. Bạ n có thể sử dụ ng câ u lệnh SQL sau
để xem thư mụ c dump hiện tạ i củ a cơ sở dữ liệu: `select * from
dba_directories;`. Nếu khô ng có thư mụ c dump, bạ n cầ n tạ o thư mụ c dump
và cấ p quyền cho user Oracle bằ ng cá c câ u lệnh SQL sau:
`create directory DATA_PUMP_DIR as '<path>';`
`grant all on directory DATA_PUMP_DIR to <user>;`

Trong đó `<path>` là đườ ng dẫ n củ a thư mụ c dump và `<user>` là tên user Oracle.

 Thiết lậ p charset cho quá trình sao lưu. Charset là bộ ký tự đượ c sử dụ ng


để mã hó a và giả i mã dữ liệu. Bạ n phả i đả m bả o charset củ a quá trình sao
lưu phả i khớ p vớ i charset củ a cơ sở dữ liệu. Bạ n có thể thiết lậ p charset
bằ ng cá ch sử dụ ng câ u lệnh
`export NLS_LANG=<charset>` trên Linux
hoặ c `set NLS_LANG=<charset>` trên Windows,

Trong đó `<charset>` là tên củ a bộ ký tự mong muố n, ví dụ


`AMERICAN_AMERICA.AL32UTF8` hoặ c `Japanese_Japan.AL32UTF8`.

 Sao lưu dữ liệu bằ ng câ u lệnh RMAN sau:


`expdp <user>/<password> dumpfile=<file_name>.dpdmp`

Trong đó `<user>` là tên user Oracle, `<password>` là mậ t khẩ u củ a user Oracle và


`<file_name>` là tên file backup.

Để phụ c hồ i dữ liệu trên Oracle Database bằ ng RMAN, bạ n cầ n thự c hiện cá c bướ c


sau:

 Đả m bả o file backup đã đượ c copy và o thư mụ c dump củ a cơ sở dữ liệu


đích.
 Phụ c hồ i dữ liệu bằ ng câ u lệnh RMAN sau: `impdp
\"sys/<password>@<service_name> as sysdba\" file=<path_of_dump_file>
full=y`¹, trong đó `sys` là user system mặ c định củ a hệ thố ng, `<password>`
là mậ t khẩ u củ a user sys, `<service_name>` là tên service củ a cơ sở dữ liệu
đích và `<path_of_dump_file>` là đườ ng dẫ n củ a file backup.
KẾT LUẬN

Trong quá trình thiết lậ p tà i khoả n ngườ i dù ng trong hệ thố ng quả n lý cơ


sở dữ liệu Oracle, cá c bướ c quan trọ ng đã đượ c thự c hiện. Đầ u tiên, chú ng ta đã
xá c định thô ng tin cơ bả n củ a ngườ i dù ng bao gồ m Nickname, Mậ t Khẩ u, và cá c
thô ng số khá c như Bả ng Lưu Trữ (Tablespace) và Trạ ng Thá i (Status).

Nhậ p liệu đú ng và an toà n là chìa khó a để đả m bả o tính bả o mậ t và hiệu


quả củ a cơ sở dữ liệu. Chú ng ta đã xá c định cẩ n thậ n cá c thô ng tin cầ n thiết như
Tiêu Đề Sá ch, Tá c Giả , và Thể Loạ i Sá ch. Cá c thuộ c tính như ISBN, Nhà Xuấ t Bả n,
và Nă m Xuấ t Bả n cũ ng đã đượ c thiết lậ p để cung cấ p thô ng tin chi tiết và chính
xá c về mỗ i cuố n sá ch.

Hơn nữ a, chú ng ta đã xử lý cá c tù y chọ n như việc Khô ng Hết Hạ n Mậ t Khẩ u


Ngay Bây Giờ , giú p ngườ i dù ng trá nh việc đổ i mậ t khẩ u ngay lậ p tứ c. Việc chú ý
đến tù y chọ n Bả ng Tạ m Thờ i (Temporary Tablespace) cũ ng rấ t quan trọ ng để
đả m bả o hiệu suấ t tố i ưu củ a cơ sở dữ liệu.

Cuố i cù ng, việc Gá n Hạ n Mứ c Dữ Liệu (Quota) cho ngườ i dù ng, cù ng vớ i


việc chấ p nhậ n lự a chọ n mặ c định cho Trạ ng Thá i (Status), là nhữ ng bướ c quan
trọ ng giú p định hình và tố i ưu hó a ngườ i dù ng trong hệ thố ng. Cá c biện phá p cẩ n
thậ n này khô ng chỉ tạ o ra mộ t cơ sở dữ liệu chặ t chẽ mà cò n đặ t nền tả ng cho
quả n lý thô ng tin thư viện mộ t cá ch hiệu quả và bền vữ ng.

You might also like