大型数据库实验报告2.docx
《大型数据库实验报告2.docx》由会员分享,可在线阅读,更多相关《大型数据库实验报告2.docx(19页珍藏版)》请在冰豆网上搜索。
大型数据库实验报告2
实验报告书
课程名称大型数据库技术
所在院系计通学院计算机系
所在班级
学号
姓名
指导教师
实验时段
实验一
实验名称:
创建数据库,熟悉OEM
实验目的:
掌握在Oracle11g中创建数据库的方法;
了解Oracle11g的服务;
熟悉OEM的使用。
实验内容:
使用DBCA创建数据库
在开始菜单中找到并运行DatabaseConfigurationAssistant,选择创建数据库,依次设置数据库名、口令、数据库文件位置、其他相关参数等,点击完成以创建一个数据库。
练习使用OEM管理数据库
数据库创建完毕后,先Win+R输入services.msc并运行,打开对应的系统服务,然后在开始菜单中找到DatabaseControl-@DatabaseName并运行,跳转至IE浏览器,键入用户名及口令后即可登录并管理数据库。
实验小结:
这次实验主要是学习创建数据库和熟悉OEM管理数据库,基本上没遇到什么问题。
实验二
实验名称:
SQLPLUS和SQLDEVELOPER
实验目的:
掌握SQLPLUS命令的使用;
掌握通过SQLPLUS,使用SQL语句访问数据库的方法;
了解Oracle11g的数据字典;
掌握使用SQLDEVELOP开发数据库的方法。
实验内容
练习使用SQLPLUS的命令:
show,col,setline,desc,run或/,save,start或@,spool,help,ed等;
创建Members表格:
createtableMembers(
Midvarchar2(20)primarykey,
Mnamevarchar2(20)notnull,
Mlevelvarchar2(20),
Mtelvarchar2(20),
Maddressvarchar2(40)
);
截图:
创建Books表格:
createtableBooks(
Bidvarchar2(20)primarykey,
Bnamevarchar2(100)notnull,
Authorvarchar2(20),
Pricenumber(6,2)default0.00,
Quantitynumberdefault0,
Bpressvarchar2(50),
Bclassvarchar2(50)
);
截图:
创建Admin表格:
createtableAdmin(
Aidvarchar2(20)primarykey,
Bnamevarchar2(100)notnull,
Atelvarchar2(20),
Aaddressvarchar2(40)
);
截图:
创建Sales表格:
createtableSales(
Midvarchar2(20),
Bidvarchar2(20),
Aidvarchar2(20),
SdateDATE,
Scountnumber,
Spricenumber(6,2)default0.00,
primarykey(Mid,Bid,Aid,Sdate),
foreignkey(Mid)referencesmembers(Mid),
foreignkey(Bid)referencesBooks(Bid),
foreignkey(Aid)referencesAdmin(Aid)
);
截图:
实验小结:
本次实验主要是练习使用一些SQLPLUS的命令。
实验三
实验名称:
约束、视图、索引、序列、同义词的创建和使用,Oracle安全管理
实验目的:
掌握创建和使用数据库方案对象约束、视图、索引、序列、同义词的方法;
掌握创建数据库用户和角色的方法;
掌握向数据库用户和角色授权的方法;
掌握Oracle的口令管理方法;
掌握Oracle的审计方法。
实验内容:
为Books表创建一个约束:
Price>=0
创建一个索引p_index,对Books表的Price列建升序索引
创建一个视图view_sale,包括的列有:
会员名,书名,总本数
创建一个序列m_seq,初始值为1,增量为1。
CREATESEQUENCEM_SEQINCREMENTBY1STARTWITH1;
向Members表中插入一条记录时,Mid的值由序列m_seq产生
INSERTINTO"SYSTEM"."MEMBERS"(MID,MNAME,MLEVEL,MTEL,MADDRESS)VALUES(M_SEQ.nextval,'3','3','3','3');
为Books这张表创建一个公用同义词bsyn,sys用户通过该同义词访问Books表
创建一个用户user456,密码是Stud_456,通过概要文件限制登录失败不能超过3,登录失败以后手动解锁账户
createprofilepassword_user456limit
failed_login_attempts3;
alteruser456profileprof_user456;
创建角色CommonM,授予角色CommonM查询Books表的权限
createroleCommonM;
grantcreatesession,selectanytabletoCommonM;
将角色CommonM授予用户user456
grantCommonMtouser456withadminoption;
对Books表的操作执行审计
auditallonbooks;
selectusername,timestamp,owner,obj_namefromdba_audit_trail;
实验小结:
上次实验建的数据库居然用不了了,又从新建了一个,内容也比较多,很多操作不熟悉,需要多加练习。
实验四
实验名称:
存储过程、函数、触发器、包和游标的创建和使用
实验目的:
掌握创建和调用存储过程的方法;
掌握创建和调用函数的方法;
掌握创建触发器的方法;
掌握包的创建和使用方法;
掌握游标的创建和使用方法。
实验内容:
创建一个存储过程,当输入的书号不在Books表中,则插入书籍的书号和书名,当输入的书号在Books表中,输出该书的库存量(库存量能通过参数传递到调用该存储过程的代码块中)
createorreplace
PROCEDUREInsert_Books
(
book_idinvarchar2,
book_nameinvarchar2,
sumoutnumber)
as
count_booknumber;
BEGIN
SELECTcount(*)INTOcount_bookfrombookswherebid=book_id;
ifcount_book=0then
insertintobooks
(bid,bname
)values
(book_id,book_name
);
else
SELECTquantityintosumfrombookswherebid=book_id;
endif;
END;
创建一个统计某本书的销售量的函数
createorreplace
FUNCTIONCOUNT_SALES
(
book_idINVARCHAR2)
RETURNNUMBER
AS
v_sumNUMBER;
BEGIN
SELECTsum(scount)INTOv_sumfromSaleswherebid=book_id;
dbms_output.put_line('图书编号'||book_id||'目前销售量为'||v_sum);
RETURNv_sum;
ENDCOUNT_SALES;
创建一个包,包含上述存储过程和函数,并通过包调用存储过程和函数
createorreplace
PACKAGEpack
as
procedureInsert_Books
(
book_idinvarchar2,
book_nameinvarchar2,
sumoutnumber);
FUNCTIONCOUNT_SALES
(
book_idINVARCHAR2)
RETURNNUMBER;
endpack;
createorreplace
PACKAGEbodypack
as
PROCEDUREInsert_Books
(
book_idinvarchar2,
book_nameinvarchar2,
sumoutnumber)
as
count_booknumber;
BEGIN
SELECTcount(*)INTOcount_bookfrombookswherebid=book_id;
ifcount_book=0then
insertintobooks
(bid,bname
)values
(book_id,book_name
);
else
SELECTquantityintosumfrombookswherebid=book_id;
endif;
ENDinsert_books;
FUNCTIONCOUNT_SALES
(
book_idINVARCHAR2)
RETURNNUMBER
AS
v_sumNUMBER;
BEGIN
SELECTsum(scount)INTOv_sumfromSaleswherebid=book_id;
dbms_output.put_line('图书编号'||book_id||'目前销售量为'||v_sum);
RETURNv_sum;
ENDCOUNT_SALES;
endpack;
selectpack.count_sales('1')fromsales;
创建一个触发器,当删除一个Admin管理员时,删除该管理员的销售记录
createorreplace
triggerdelete_admin
afterdeleteonADMIN
foreachrow
begin
deletefromsaleswhere:
old.aid=aid;
END;
实验小结:
本次实验碰到了很多错误,后来问同学才得以解决,但是具体为什么是改那,至今也不是很清楚,以后需要多多学习才行。