Professional Documents
Culture Documents
1
internet hơn, 36% người chơi game nhiều hơn, 69% người dùng tăng thời gian
sáng tạo và theo dõi các nội dung streaming tại nhà. Ngoài những streamer kì
cựu, năm 2020 và nửa đầu năm 2021 còn đón chào nhiều người nổi tiếng trên
các lĩnh vực khác tham gia “ngành công nghiệp tỷ đô” này: ca sĩ Khởi My,
rapper MCK, thủ môn Bùi Tấn Trường, bình luận viên Lê Khôi,…
Trước ảnh hưởng kéo dài của dịch Covid-19, hầu hết các hoạt động kinh
doanh đều được chuyển sang hình thức trực tuyến, đây cũng là lúc truyền thông
- marketing online càng được chú trọng và yêu cầu tính hiệu quả cao. Một trong
những nội dung giải trí trực tuyến thu hút được nhiều sự theo dõi của người
dùng internet trong thời điểm cách ly là các nội dung gaming livestream. Điều
đó đã đưa “nghề streamer” trở nên hot và phát triển nhanh hơn bao giờ hết. Chỉ
một buổi livestream khoảng 4-5 tiếng có thể đem đến cho streamer số tiền lên
tới hàng chục triệu đồng cùng với sự chú ý của nhiều nhãn hàng và có thể là
những hợp đồng quảng cáo giá trị cao. Tiềm năng kinh tế lớn như vậy đòi hỏi
“gaming creators” cần có ekip trợ giúp sắp xếp, sáng tạo, phát triển thêm nhiều
nội dung nhằm thu hút nhiều nhất số lượng người xem, đem đến lợi ích kinh tế
cho bản thân, tổ chức thậm chí là cho xã hội. Đó là công việc của công ty quản
lý. Công ty quản lý sẽ gồm “gaming creators” - được coi như những “ngôi sao”,
cùng với đội ngũ sáng tạo nội dung, sắp xếp lịch trình, quản lý thu nhập, phát
triển cộng đồng, liên hệ đối tác,… Cơ sở dữ liệu này sẽ góp phần giúp công việc
đó trở nên đơn giản hơn.
2
3
II. Triển khai bài toán
1. Tạo cơ sở dữ liệu
1.1. Tablespace
a. Mục đích
Quản lý tablespace trong Oracle đặc biệt quan trọng trong việc cấp vùng dữ
liệu làm việc cho user. Với mỗi tablespace ta có thể tùy chỉnh chế độ online
hoặc offline để thay đổi tính sẵn dùng của các dữ liệu trong database vì mỗi dữ
liệu lại gắn với những yêu cầu, mục đích sử dụng, quản lí khác nhau. Hơn thế
nữa, việc tạo thêm tablespace giúp ích rất lớn cho việc sao lưu (backup) và phục
hồi (recovery) dữ liệu một cách hiệu quả nhất, năng suất cao nhất. Bởi
tablespace có một điểm rất hữu ích đó là ta có thể chuyển các tablespace sang
chế độ read-only (chỉ đọc) để hạn chế các thủ tục cần thiết khi sao lưu và phục
hồi một phần lớn dữ liệu không bị thay đổi của database. Vì Oracle sẽ không
thực hiện cập nhật các file nằm trong tablespace read-only.
Từ các bảng được sử dụng trong đề tài và mục đích sử dụng mỗi bảng, ta
chỉ cần tạo 2 tablespace là myspace1 và myspace2. Với tablespace myspace1 ta
lưu trữ các dữ liệu ít bị thay đổi còn tablespace myspace2 ta lưu trữ các dữ liệu
thường xuyên phải cập nhật, thay đổi như: subcriber, thời điểm chơi, thời điểm
donate, số tiền donate, lời nhắn, số dư tài khoản,… Việc phân chia này được
phục vụ cho việc nâng cao hiệu suất trong việc sao lưu và phục hồi dữ liệu theo
từng phần.
b. Tạo tablespac
4
CREATE TABLESPACE myspace2
DATAFILE 'G:\app\FPTSHOP\oradata\orcl\Tablespace02.dbf' SIZE
500M
autoextend on
next 500m maxsize 4028m
extent management local;
5
CREATE TABLE Game
(
MAGAME NVARCHAR2(10) PRIMARY KEY NOT NULL
check (REGEXP_LIKE(MAGAME,'^G\d{2,}$')),
MANHAPHATHANH NVARCHAR2(10) NOT NULL,
TENGAME NVARCHAR2(50) NOT NULL,
THELOAI NVARCHAR2(50) NOT NULL,
LINKDOWNLOAD NVARCHAR2(100),
DUNGLUONG NVARCHAR2(10),
Constraint fk_manhaphathanh foreign key (manhaphathanh)
references Nhaphathanhgame
);
6
CREATE TABLE SuDung
(
WEBSITE NVARCHAR2(50) NOT NULL,
MASTREAMER NVARCHAR2(10) NOT NULL,
TENTAIKHOAN NVARCHAR2(50) NOT NULL,
SUBCRIBER number,
Constraint pk_mastreamer_website primary key (mastreamer,
website),
Constraint fk_streamer_website foreign key (mastreamer)
references Streamer,
Constraint fk_webite_streamer foreign key (website) r
references Nentang
);
-----------Streamer-------------
Insert into Streamer (mastreamer, tenstreamer, gioitinh, quequan,
ngaysinh, sodienthoai)
values ('ST01', 'Phung Thanh Do', 'Nam', 'Cao Bang',
to_date('12/09/1989','dd/mm/yyyy'), ‘0965698119’);
Insert into Streamer (mastreamer, tenstreamer, gioitinh, quequan,
ngaysinh, sodienthoai)
values ('ST02', 'Hoang Van Khoa', 'Nam', 'Hai Phong',
to_date('23/06/1991','dd/mm/yyyy'), '0398549916');
Insert into Streamer (mastreamer, tenstreamer, gioitinh, quequan,
ngaysinh, sodienthoai)
values ('ST03', 'Dang Tien Hoang', 'Nam', 'Ha Noi',
to_date('08/05/1990','dd/mm/yyyy'), '0968510396');
Insert into Streamer (mastreamer, tenstreamer, gioitinh, quequan,
ngaysinh, sodienthoai)
values ('ST04', 'Nghiem Anh Hieu', 'Nam', 'England',
to_date('27/04/1989','dd/mm/yyyy'), '0976483772');
Insert into Streamer (mastreamer, tenstreamer, gioitinh, quequan,
ngaysinh, sodienthoai)
values ('ST05', 'Pham Thuy Trang', 'Nu', 'Ho Chi Minh',
to_date('04/11/2002','dd/mm/yyyy'), '0356785654');
Insert into Streamer (mastreamer, tenstreamer, gioitinh, quequan,
ngaysinh, sodienthoai)
values ('ST06', 'Lam Dinh Khoa', 'Nam', 'Cao Lanh',
to_date('24/05/1996','dd/mm/yyyy'), '0393244111');
Insert into Streamer (mastreamer, tenstreamer, gioitinh, quequan,
ngaysinh, sodienthoai)
values ('ST07', 'Dam Ngoc Linh', 'Nu', 'Ha Noi',
to_date('08/06/1996','dd/mm/yyyy'), '0808061996');
Insert into Streamer (mastreamer, tenstreamer, gioitinh, quequan,
ngaysinh, sodienthoai)
values ('ST08', 'Tran Thai Linh', 'Nam', 'Ha Noi',
to_date('16/06/1997','dd/mm/yyyy'), '0975356889');
Insert into Streamer (mastreamer, tenstreamer, gioitinh, quequan,
ngaysinh, sodienthoai)
values ('ST09', 'Nguyen Van Thuan', 'Nam', 'America',
to_date('17/12/1995','dd/mm/yyyy'), '0923457854');
7
Insert into Streamer (mastreamer, tenstreamer, gioitinh, quequan,
ngaysinh, sodienthoai)
values ('ST10', 'Tran Manh Quang', 'Nam', 'Ha Noi',
to_date('13/11/1994','dd/mm/yyyy'), '0513111994');
-----------NhaPhatHanhGame---------
Insert into Nhaphathanhgame (manhaphathanh, tennhaphathanh,
diachiweb)
values ('VNG', 'Vinagame', 'vinagame.com');
Insert into Nhaphathanhgame (manhaphathanh, tennhaphathanh,
diachiweb)
values ('VTCG', 'VTC game', 'vtcgame.com');
Insert into Nhaphathanhgame (manhaphathanh, tennhaphathanh,
diachiweb)
values ('GRN', 'Garena Vietnam', 'garena.com');
-------------CongDonate--------
Insert into Congdonate (webcong, tencong, tilechietkhau)
values ('Unghotoi.com', 'Ung ho toi', '15');
Insert into Congdonate (webcong, tencong, tilechietkhau)
values ('Streamlabs.com', 'Streamlab', '10');
Insert into Congdonate (webcong, tencong, tilechietkhau)
values ('Playerdou.com', 'Playerdou', '11.1');
----------Donater-------------
Insert into Donater (madonater, tentaikhoan, sodutaikhoan, webcong)
values ('DT01', 'Huyhara', '200000', 'Unghotoi.com');
Insert into Donater (madonater, tentaikhoan, sodutaikhoan, webcong)
values ('DT02', 'Chuchoa', '234567', 'Streamlabs.com');
Insert into Donater (madonater, tentaikhoan, sodutaikhoan, webcong)
values ('DT03', 'Lanhconyxin', '123987', 'Unghotoi.com');
Insert into Donater (madonater, tentaikhoan, sodutaikhoan, webcong)
values ('DT04', 'Bthahbthongdoc', '9876543', 'Playerdou.com');
Insert into Donater (madonater, tentaikhoan, sodutaikhoan, webcong)
values ('DT05', 'Miuxinh', '555555', 'Streamlabs.com');
Insert into Donater (madonater, tentaikhoan, sodutaikhoan, webcong)
values ('DT06', 'Chautinhbo', '357913', 'Playerdou.com');
Insert into Donater (madonater, tentaikhoan, sodutaikhoan, webcong)
values ('DT07', 'Khibg', '20202020', 'Streamlabs.com');
Insert into Donater (madonater, tentaikhoan, sodutaikhoan, webcong)
values ('DT08', 'Phungthailinh', '444444', 'Playerdou.com');
Insert into Donater (madonater, tentaikhoan, sodutaikhoan, webcong)
values ('DT09', 'Thailinhhuong', '979797', 'Playerdou.com');
Insert into Donater (madonater, tentaikhoan, sodutaikhoan, webcong)
values ('DT10', 'Thayonip', '9999991', 'Streamlabs.com');
Insert into Donater (madonater, tentaikhoan, sodutaikhoan, webcong)
values ('DT11', 'Tudu', '686868', 'Playerdou.com');
Insert into Donater (madonater, tentaikhoan, sodutaikhoan, webcong)
values ('DT12', 'Maydapnghean', '377337', 'Unghotoi.com');
Insert into Donater (madonater, tentaikhoan, sodutaikhoan, webcong)
values ('DT13', 'Khoimom', '787878', 'Playerdou.com');
Insert into Donater (madonater, tentaikhoan, sodutaikhoan, webcong)
values ('DT14', 'Toisung', '551102', 'Streamlabs.com');
Insert into Donater (madonater, tentaikhoan, sodutaikhoan, webcong)
values ('DT15', 'Nhunhi', '2222222', 'Unghotoi.com');
---------Game--------------
Insert into Game (magame, manhaphathanh, tengame, theloai,
linkdownload, dungluong)
values ('G01', 'GRN', 'League of legend', 'Chien thuat', 'lol.exe',
'11.7GB');
Insert into Game (magame, manhaphathanh, tengame, theloai,
linkdownload, dungluong)
values ('G02', 'VNG', 'PUBG', 'Dong doi', 'pubg.exe', '15.03GB');
8
Insert into Game (magame, manhaphathanh, tengame, theloai,
linkdownload, dungluong)
values ('G03', 'VNG', 'CF', 'Tactic', 'cf.exe', '7.65GB');
Insert into Game (magame, manhaphathanh, tengame, theloai,
linkdownload, dungluong)
values ('G04', 'VTCG', 'Audition', 'Music', 'au.exe', '3.63GB');
Insert into Game (magame, manhaphathanh, tengame, theloai,
linkdownload, dungluong)
values ('G05', 'GRN', 'Fifa online', 'Sport','fifa.exe', '10.98GB');
------------Nen Tang---------
Insert into Nentang (website, tennentang, mobileapp)
values ('nimo.tv', 'Nimo', 'Nimo TV app');
Insert into Nentang (website, tennentang, mobileapp)
values ('youtube.com', 'YouTube', 'YouTube');
--------------Choi------------
Insert into Choi (mastreamer, magame, thoidiembatdau,
thoidiemketthuc)
values ('ST01', 'G01', TO_DATE('07/09/2020 11:30:25','dd/mm/yyyy
HH:MI:SS'), TO_DATE('08/09/2020 3:50:33','dd/mm/yyyy HH:MI:SS'));
Insert into Choi (mastreamer, magame, thoidiembatdau,
thoidiemketthuc)
values ('ST01', 'G02', TO_DATE('12/09/2020 10:57:58','dd/mm/yyyy
HH:MI:SS'), TO_DATE('13/09/2020 4:50:11','dd/mm/yyyy HH:MI:SS'));
Insert into Choi (mastreamer, magame, thoidiembatdau,
thoidiemketthuc)
values ('ST06', 'G05', TO_DATE('10/09/2020 8:30:25','dd/mm/yyyy
HH:MI:SS'), TO_DATE('10/09/2020 9:50:25','dd/mm/yyyy HH:MI:SS'));
Insert into Choi (mastreamer, magame, thoidiembatdau,
thoidiemketthuc)
values ('ST07', 'G03', TO_DATE('11/09/2020 7:30:25','dd/mm/yyyy
HH:MI:SS'), TO_DATE('11/09/2020 9:33:25','dd/mm/yyyy HH:MI:SS'));
Insert into Choi (mastreamer, magame, thoidiembatdau,
thoidiemketthuc)
values ('ST04', 'G02', TO_DATE('09/09/2020 7:13:26','dd/mm/yyyy
HH:MI:SS'), TO_DATE('09/09/2021 9:22:31','dd/mm/yyyy HH:MI:SS'));
Insert into Choi (mastreamer, magame, thoidiembatdau,
thoidiemketthuc)
values ('ST02', 'G01', TO_DATE('13/09/2020 9:30:22','dd/mm/yyyy
HH:MI:SS'), TO_DATE('13/09/2020 11:20:20','dd/mm/yyyy HH:MI:SS'));
Insert into Choi (mastreamer, magame, thoidiembatdau,
thoidiemketthuc)
values ('ST01', 'G04', TO_DATE('10/09/2020 11:30:25','dd/mm/yyyy
HH:MI:SS'), TO_DATE('11/09/2020 5:10:34','dd/mm/yyyy HH:MI:SS'));
Insert into Choi (mastreamer, magame, thoidiembatdau,
thoidiemketthuc)
values ('ST08', 'G01', TO_DATE('09/09/2020 8:33:22','dd/mm/yyyy
HH:MI:SS'), TO_DATE('09/09/2020 11:50:25','dd/mm/yyyy HH:MI:SS'));
Insert into Choi (mastreamer, magame, thoidiembatdau,
thoidiemketthuc)
values ('ST03', 'G05', TO_DATE('12/09/2020 9:30:25','dd/mm/yyyy
HH:MI:SS'), TO_DATE('12/09/2020 11:55:25','dd/mm/yyyy HH:MI:SS'));
Insert into Choi (mastreamer, magame, thoidiembatdau,
thoidiemketthuc)
values ('ST01', 'G03', TO_DATE('11/09/2020 11:03:13','dd/mm/yyyy
HH:MI:SS'), TO_DATE('12/09/2020 2:34:56','dd/mm/yyyy HH:MI:SS'));
Insert into Choi (mastreamer, magame, thoidiembatdau,
thoidiemketthuc)
values ('ST05', 'G02', TO_DATE('07/09/2020 3:22:25','dd/mm/yyyy
HH:MI:SS'), TO_DATE('07/09/2020 5:55:40','dd/mm/yyyy HH:MI:SS'));
9
----------- SuDung----------
Insert into Sudung (website, mastreamer, tentaikhoan, subcriber)
values ('nimo.tv', 'ST01', 'Mixigaming', 1486278);
Insert into Sudung (website, mastreamer, tentaikhoan, subcriber)
values ('nimo.tv', 'ST02', 'Pewpew', 456823);
Insert into Sudung (website, mastreamer, tentaikhoan, subcriber)
values ('nimo.tv', 'ST03', 'Viruss', 289654);
Insert into Sudung (website, mastreamer, tentaikhoan, subcriber)
values ('nimo.tv', 'ST04', 'Xeme', 678145);
Insert into Sudung (website, mastreamer, tentaikhoan, subcriber)
values ('youtube.com', 'ST05', 'Xoainon', 197356);
Insert into Sudung (website, mastreamer, tentaikhoan, subcriber)
values ('youtube.com', 'ST06', 'Tuitenbo', 1394568);
Insert into Sudung (website, mastreamer, tentaikhoan, subcriber)
values ('youtube.com', 'ST07', 'LinhNgocDam', 3567189);
Insert into Sudung (website, mastreamer, tentaikhoan, subcriber)
values ('youtube.com', 'ST08', 'Nhism', 789245);
Insert into Sudung (website, mastreamer, tentaikhoan, subcriber)
values ('youtube.com', 'ST09', 'Snake', 478123);
Insert into Sudung (website, mastreamer, tentaikhoan, subcriber)
values ('youtube.com', 'ST10', 'QNT', 570234);
Insert into Sudung (website, mastreamer, tentaikhoan, subcriber)
values ('youtube.com', 'ST01', 'Mixigaming', 4892454);
----------------HopTac-----------
Insert into Hoptac (website, manhaphathanh, dieukien,uudai)
values ('nimo.tv', 'VNG', 'Tang 3% tai khoan moi trong thang dau',
'Tang 20% gia tri nap game');
Insert into Hoptac (website, manhaphathanh, dieukien,uudai)
values ('nimo.tv', 'GRN', '100+ live stream game moi ngay', 'Giam gia
10% gia tri do trong shop game (co cong don voi su kien game)');
Insert into Hoptac (website, manhaphathanh, dieukien,uudai)
values ('nimo.tv', 'VTCG', '10000+ luot xem live stream game moi
ngay', 'Mien phi 3 do bat ki trong shop game');
Insert into Hoptac (website, manhaphathanh, dieukien,uudai)
values ('youtube.com', 'GRN', 'Tang 3% tai khoan moi trong thang
dau', 'Giam gia 15% gia tri do trong shop game (co cong don voi su
kien game)');
-----------Donate------------
Insert into Donate (mastreamer, webcong, sotien, thoidiemdonate,
loinhan)
values ('ST01', 'Playerdou.com', 101101, to_date('09/09/2020
10:50:25','dd/mm/yyyy HH:MI:SS'), 'Cac anh choi game gi the a');
Insert into Donate (mastreamer, webcong, sotien, thoidiemdonate,
loinhan)
values ('ST01', 'Unghotoi.com', 10000000, to_date('09/09/2020
11:30:25','dd/mm/yyyy HH:MI:SS'), 'Hom nao moi anh em qua quan toi
nhe');
Insert into Donate (mastreamer, webcong, sotien, thoidiemdonate,
loinhan)
values ('ST01', 'Streamlabs.com', 300000, to_date('11/09/2020
5:30:25','dd/mm/yyyy HH:MI:SS'), 'Hom nay stream muon the ong:)))');
Insert into Donate (mastreamer, webcong, sotien, thoidiemdonate,
loinhan)
values ('ST02', 'Streamlabs.com', 100000, to_date('07/09/2020
10:01:42','dd/mm/yyyy HH:MI:SS'), 'Nghe noi Hai Phong nhieu giang ho
dung khong anh?');
10
Insert into Donate (mastreamer, webcong, sotien, thoidiemdonate,
loinhan)
values ('ST02', 'Unghotoi.com', 8000, to_date('09/09/2020
8:32:21','dd/mm/yyyy HH:MI:SS'), 'Anh mo chi nhanh o Ha Noi
diiii:(((');
Insert into Donate (mastreamer, webcong, sotien, thoidiemdonate,
loinhan)
values ('ST03', 'Unghotoi.com', 321456, to_date('10/09/2020
5:05:05','dd/mm/yyyy HH:MI:SS'), 'Bao gio thi anh dinh lay chi Ngan a
=)))');
Insert into Donate (mastreamer, webcong, sotien, thoidiemdonate,
loinhan)
values ('ST04', 'Playerdou.com', 20000, to_date('13/09/2020
10:15:09','dd/mm/yyyy HH:MI:SS'), 'Anh Hieu gio noi tieng Viet khong
soi roi:))');
Insert into Donate (mastreamer, webcong, sotien, thoidiemdonate,
loinhan)
values ('ST05', 'Unghotoi.com', 10000, to_date('12/09/2020
3:33:59','dd/mm/yyyy HH:MI:SS'), 'Trang xinh nhu kieu con lai y.
Theeeee');
Insert into Donate (mastreamer, webcong, sotien, thoidiemdonate,
loinhan)
values ('ST06', 'Unghotoi.com', 8000, to_date('10/09/2020
7:30:22','dd/mm/yyyy HH:MI:SS'), 'Du ca the gioi co quay lung lai voi
anh thi em mai ben canh anh, anh Nhism');
Insert into Donate (mastreamer, webcong, sotien, thoidiemdonate,
loinhan)
values ('ST06', 'Playerdou.com', 500000, to_date('10/09/2020
8:02:52','dd/mm/yyyy HH:MI:SS'), 'Donate mo hom nhe.hi');
Insert into Donate (mastreamer, webcong, sotien, thoidiemdonate,
loinhan)
values ('ST07', 'Streamlabs.com', 10000, to_date('09/09/2020
2:15:07','dd/mm/yyyy HH:MI:SS'), 'Anh chi cute zl luon a.hix');
Insert into Donate (mastreamer, webcong, sotien, thoidiemdonate,
loinhan)
values ('ST08', 'Unghotoi.com', 8000, to_date('11/09/2020
8:10:01','dd/mm/yyyy HH:MI:SS'), 'MVP Viet Nam day = ))))))');
Insert into Donate (mastreamer, webcong, sotien, thoidiemdonate,
loinhan)
values ('ST08', 'Streamlabs.com', 200000, to_date('11/09/2020
9:09:18','dd/mm/yyyy HH:MI:SS'), 'Top 1 donate 1 cu nha');
Insert into Donate (mastreamer, webcong, sotien, thoidiemdonate,
loinhan)
values ('ST09', 'Playerdou.com', 50000, to_date('07/09/2020
12:30:24','dd/mm/yyyy HH:MI:SS'), 'Anh Ben hay qua troiii');
Insert into Donate (mastreamer, webcong, sotien, thoidiemdonate,
loinhan)
values ('ST09', 'Unghotoi.com', 20000, to_date('09/09/2020
1:03:51','dd/mm/yyyy HH:MI:SS'), 'Dinh gia moi loai xe');
Insert into Donate (mastreamer, webcong, sotien, thoidiemdonate,
loinhan)
values ('ST10', 'Unghotoi.com', 50000, to_date('12/09/2020
12:05:19','dd/mm/yyyy HH:MI:SS'), 'Nhac banh cuon qua anh zai');
Insert into Donate (mastreamer, webcong, sotien, thoidiemdonate,
loinhan)
values ('ST10', 'Streamlabs.com', 8000, to_date('12/09/2020
12:10:25','dd/mm/yyyy HH:MI:SS'), 'So litttt');
11
1.4. Phân vùng dữ liệu
Công ty cần thường xuyên thực hiện các truy vấn dữ liệu nhằm quản lý và
đánh giá hiệu quả công việc của các setreamer thuộc công ty mình.
2.1. Danh sách tổng số tiền được donate của mỗi streamer
12
2.3. Top 3 streamer có lượt subcribe cao nhất
select mastreamer,tenstreamer
from Streamer
where extract(year from ngaysinh)=
(select min(extract( year from ngaysinh)) from streamer);
13
2.6. Số game đã phát hành của mỗi nhà phát hành
2.7. Sắp xếp số dư tài khoản của các donater giảm dần
select webcong
from congdonate where tilechietkhau = (select min(tilechietkhau)
from congdonate)
14
2.10. Số tiền được donate nhiều nhất của mỗi cổng trong 1 lần
Các yêu cầu nghiệp vụ cũng thường xuyên được thực hiện trong trường
hợp cần tìm kiếm thông tin, kết quả của từng đối tượng hoặc nhóm đối tượng cụ
thể.
15
dbms_output.put_line('ma streamer: '||stm.mastreamer||
' ten streamer:'||stm.tenstreamer||' gioi tinh: '||
stm.gioitinh||'que quan: '|| stm.quequan||' ngay sinh: '||
stm.ngaysinh||' so dien thoai:'||stm.sodienthoai);
end loop;
end if;
close mag_cursor;
end;
16
3.3. Đưa ra thông tin donater, biết website cổng donate.
set serveroutput on
declare
dnt donater%rowtype;
wc donater.webcong% TYPE;
cursor wc_cursor is select * from donater where webcong = wc;
dem number;
begin
wc := '&wc';
select count(wc) into dem from congdonate where webcong = wc;
if(dem = 0) then
dbms_output.put_line('ko co web cong '|| WC);
else
open wc_cursor;
loop fetch wc_cursor into dnt.madonater, dnt.webcong,
dnt.tentaikhoan, dnt.sodutaikhoan ;
exit when wc_cursor%notfound;
dbms_output.put_line('ma donater: '|| dnt.madonater ||' web cong
: '||wc||' ten tai khoan: '|| dnt.tentaikhoan || ' so du tai khoan:
'||dnt.sodutaikhoan);
end loop;
end if;
close wc_cursor;
end;
set serveroutput on
create or replace procedure tilegioitinh(
g_t streamer.gioitinh% type)
dem number;
tong number;
phantram number;
begin
select count(mastreamer) into tong from streamer;
select count(gioitinh) into dem
from streamer where gioitinh = g_t;
phantram := (dem/tong)*100;
dbms_output.put_line('gioi tinh '||g_t||' chiem '||phantram||'%');
end;
exce tilegioitinh(&g_t);
17
3.5. Đưa ra danh sách streamer sử dụng nền tảng, biết website nền tảng
set serveroutput on
declare
ws sudung.website% TYPE;
ten_tk sudung.tentaikhoan% type;
dem number;
cursor ws_cursor is select tentaikhoan from sudung where website =ws;
begin
ws := '&ws';
select count(website) into dem from nentang where website = ws;
if(dem = 0) then
dbms_output.put_line('khong co website nay');
else
dbms_output.put_line('danh sach cac streamer lam viec voi
'||ws||':');
open ws_cursor ;
loop
fetch ws_cursor into ten_tk;
exit when ws_cursor%notfound;
dbms_output.put_line(ten_tk);
end loop;
end if;
close ws_cursor;
end;
18
3.7. Đưa ra thông tin streamer, biết mã streamer đó
set serveroutput on
declare
ma streamer.mastreamer%type;
ten streamer.tenstreamer%type;
gt streamer.gioitinh%type;
qq streamer.quequan%type;
ns streamer.ngaysinh%type;
sdt streamer.sodienthoai%type;
kt int;
begin
ma:='&ma';
select count(mastreamer) into kt from streamer where mastreamer=ma;
if(kt!=0) then
select tenstreamer, gioitinh, quequan, ngaysinh, sodienthoai into
ten,gt,qq,ns,sdt from streamer where mastreamer=ma;
dbms_output.put_line('Thong tin streamer co ma '||ma||' Ten: '||
ten||', gioi tinh '||gt||', que quan '||qq||', ngay sinh
'||ns||', so dien thoai '||sdt);
else
dbms_output.put_line('Ma streamer khong hop le');
end if;
end;
3.8. Thống kê thứ hạng những game mà streamer đã chơi nhiều, thứ hạng
set serveroutput on
declare
n int;
begin
n:=&n;
dbms_output.put_line('Top '||n||' game duoc nhieu nguoi choi la: ');
for numtb in (select magame from (select magame, count(mastreamer)
from game join choi using(magame) group by magame
order by count(mastreamer) desc) where rownum<=n)
loop
dbms_output.put_line(numtb.magame||' ');
end loop;
end;
19
3.9. Đưa ra số tiền các lần được donate của streamer, biết mã streamer
set SERVEROUTPUT ON
declare ma_streamer streamer.mastreamer%type;
tien donate.sotien%type;
cursor cur_str is select b.sotien from streamer a inner join donate b
on a.mastreamer=b.mastreamer
where a.mastreamer=ma_streamer;
solan int:=1;
begin
ma_streamer:='&ma_streamer';
dbms_output.put_line('Mastreamer: '||ma_streamer);
open cur_str;
loop
fetch cur_str into tien;
exit when cur_str%notfound;
dbms_output.put_line(' lan '||solan||' duoc Donate '||tien);
solan:=solan+1;
end loop;
close cur_str;
end;
set SERVEROUTPUT ON
create or replace procedure tongluotnap
(web donater.webcong%type)
as
soluong number;
dem int;
begin
select count(webcong) into dem from donater
where webcong = web;
if(dem=0) then dbms_output.put_line ('Web khong hop le');
else
select count(madonater) into soluong
from donater where webcong=web;
dbms_output.put_line('So donater da dung web cong '||web||' la: '
||soluong);
end if;
end;
exec tongluotnap(&web);
20
4. Thực hiện quản trị cơ sở dữ liệu
4.1. Tạo user
- Người quản lý: có toàn quyền trên cơ sở dữ liệu. Thực hiện các công việc
như backup CSDL, giải quyết sự cố nếu có vấn đề xảy ra với CSDL.
Create USER managerCreatory IDENTIFIED BY Creatory;
Grant CONNECT,RESOURCE,DBA to managerCreatory;
Alter user managerCreatory quota unlimited on myspace1;
Alter user managerCreatory quota unlimited on myspace2;
ALTER USER managerCreatory
DEFAULT TABLESPACE users;
ALTER USER managerCreatory
TEMPORARY TABLESPACE temp;
Grant unlimited tablespace to managercreatory;
21
Grant select on managerCreatory.game to viewer;
Grant select on managerCreatory.donate to viewer;
Grant select on managerCreatory.donater to viewer;
Grant select on managerCreatory.nhaphathanhgame to viewer;
Grant select on managerCreatory.streamer to viewer;
Grant select on managerCreatory.congdonate to viewer;
Grant select on managerCreatory.hoptac to viewer;
Grant select on managerCreatory.sudung to viewer;
22
+ Backup một phần
- Nhóm lựa chọn backup toàn bộ database để giúp ích cho việc phục hồi
sau này.
c. Chế độ backup
- Gồm: + Cold/Consistent (nguội): tiến hành khi database đóng
- Nhóm sử dụng hot backup (online backup) vì mỗi khi có sự thay đổi dữ
liệu sẽ được ghi vào Redo log files. Vì vậy, khi phục hồi sẽ không bị mất nhiều
dữ liệu. Để sử dụng online backup, cần phải đảm bảo cơ sở dữ liệu đang ở chế
độ Archive log mode. Khi đó, ta có thể khôi phục tập tin hoặc khôi phục lại bản
sao lưu và áp dụng các Archive log mode.
d. Loại backup
- Incremental backup (sao lưu gia tăng): là backup những gì thay đổi so với
lần incremental backup gần nhất
- Nhóm quyết định chọn incremental backup vì:
+ Thời gian backup nhanh
+ Dung lượng backup ít hơn
e. Các bước tiến hành backup
(1) Bật chế độ ARCHIVELOG để có thể thực hiện Online backup.
23
(2) Backup toàn bộ CSDL (Whole Database).
(4) Setting
24
(5) Schedule
(6) Review
25
4.3. Phục hồi (recovery)
- Trong quá trình sử dụng, database có thể xuất hiện những lỗi như sau:
+ Statement failure
+ User process failure
+ Network failure
+ User or application error
+ Instance failure
+ Media failure
- Những lỗi trên có thể xảy ra khi mất control file, data file hoặc một nhóm
redo log,… Ở đây, nhóm đưa ra cách khắc phục khi bị mất control file và data
file.
a. Khắc phục khi mất control file (khôi phục từ AutoBackup)
(1) Tắt database (nếu đang mở)
RMAN → shutdown immediate;
RMAN → startup nomount;
(2) Khôi phục lại control file bằng cách copy control file đã backup
RMAN → restore controlfile from autobackup;
RMAN → alter database mount;
RMAN → recover database;
(3) Khởi động lại database
Alter database open resetlogs;
b. Khắc phục khi mất data file
- TH1: Database ở chế độ NOARCHIVELOG (bất kì data file nào bị mất)
(1) Tắt database (nếu đang mở)
26
RMAN → shutdown immediate;
RMAN → startup nomount;
(2) Phục hồi lại toàn bộ database, bao gồm: data file, control file
RMAN → restore datafile ‘corrupted_data_file_name_path’1;
RMAN → restore controlfile from autobackup;
RMAN → recover database;
(3) Khởi động lại database
1
Đường chỉ dẫn đến data file bị hỏng
27
III. Kết luận
1. Ưu điểm
Bài làm của nhóm về cơ bản đã xây dựng được cơ sở dữ liệu phục vụ cho
công việc quản lý trong lĩnh vực game livestreaming.
- Thông tin được lưu trữ có hệ thống: liên kết giữa các bảng được đơn giản
hóa và tối ưu, giúp công việc tạo lập, lưu trữ, truy xuất được thực hiện chính
xác, nhanh chóng.
- Đảm bảo an toàn dữ liệu: dữ liệu được phân vùng cụ thể, cấp quyền và
nhóm quyền cho các đối tượng người dùng khác nhau. Ngoài ra, nhóm đã có
phương án sao lưu, phục hồi dữ liệu cụ thể, đảm bảo dữ liệu được lưu trữ trong
thời gian dài.
- Dữ liệu có tính thực tế: các dữ liệu được nêu trong bài là kết quả của quá
trình tìm hiểu, chắt lọc với tính chính xác cao của nhóm. Các truy vấn và thao
tác nghiệp vụ cũng là những thông số, thông tin được đa số người xem quan
tâm.
2. Nhược điểm
Ngoài những ưu điểm đạt được, bài làm vẫn còn nhiều thiếu sót do đây là
lần đầu nhóm cùng nhau tự thực hiện xây dựng một cơ sở dữ liệu về lĩnh vực
khá mới, tài liệu tham khảo còn hạn chế.
- Lĩnh vực game livestreaming còn nhiều mảng nội dung có thể khai thác,
tìm hiểu (lượt xem, tương tác, quảng cáo,…). Nhưng trong khuôn khổ bài tập
lớn, nhóm chưa thể truyền tải đầy đủ đến cô cũng như các bạn về lĩnh vực đầy
tiềm năng này.
- Chưa đưa ra được cách phục hồi các trường hợp phức tạp hơn.
28