# Oracle项目实践 **Repository Path**: giteecode/Oracle_Practice ## Basic Information - **Project Name**: Oracle项目实践 - **Description**: 一个Oracle实践项目 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2023-04-27 - **Last Updated**: 2023-04-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 实践任务介绍: #### 任务实现源码请看Oracle项目中的.sql文件 #### 任务结果展示请看Oracle项目中的.docx文件 # 任务要求: ### 任务一、熟悉ORALCE环境并练习SQL操作 1、定义基本表格major_????(专业)与stud_???(学生),关系模式如下(类型长度自定义): major_???(MajorNo专业编号 Primary key, MNAME 专业名称,loc 地址 in(主校区,南校区,新校区,铁道校区,湘雅校区),mdean 专业负责人)) stud_???(SNO primary key, SNAME, SEX (男,女,其他),TEL ,E-MAIL (基本格式判断), birthday >=’20000731’ ,MNO 班长学号 FK,MajorNo 专业编号 FK ) 其中学号的第3,4位为MajorNo(专业编号)。 注意表的命名规则。 2、插入样本数据 插入3个专业,如计算机科学与技术,物联网工程,数据科学与大数据技术,每个专业不少于10个人,其中包括自己的信息。测试相关的完整性约束,并注意保留出错的提示,分析出错的原因。 3、为每个学生建立相关用户,实现权限控制,每个学生可查询自己的信息,班长可查询本班所有学生信息; 为每个专业负责人建立用户,每个专业负责人可查询本专业所有学生信息。 ### 任务二、编写ORALCE触发器与过程 1.设计与建立上课考勤表Attend_???,能登记每个学生的考勤记录包括正常、迟到、旷课、请假。能统计以专业为单位的出勤类别并进行打分评价排序,如迟到、旷课、请假分别扣2,5,1分。可以考虑给一初始的分值,以免负值。 2.为major表与stud表增加sum_evaluation 数值字段,以记录根据考勤表Attend_???(Attendance)中出勤类别打分汇总的值。 3.建立个人考勤汇总表stud_attend与专业考勤表major_attend,表示每个学生或每个专业在某时间周期(起始日期,终止日期)正常、迟到、旷课、请假次数及考勤分值。 4.根据major表中的值与stud中的值,为考勤表Attend输入足够的样本值,要求每个专业都要有学生,有部分学生至少要有一周的每天5个单元(12,34,56,78,90,没有课的单元可以没有考勤记录)的考勤完整记录,其中正常、迟到、旷课、请假 可以用数字或字母符号表示。 5.建立触发器,当对考勤表Attend表进行相应插入、删除、修改时,对stud表的sum_evaluation 数值进行相应的数据更新。 6.建立过程,生成某专业某时段(起、止日期)的考勤汇总表major_attend中各字段值,并汇总相应专业,将考勤分值的汇总结果写入到major表中的sum_evaluation中。 ### 任务三、基于大数据集的数据库操作 1.以常用“名字大全”与“百家姓”数据集为基础,生成不小于1千万条stud记录,要求,姓名的重复率不超过10%,学号以ABCD19EFGH为格式模板,即其中20是固定的,AB为从01到99,CD为从01到90,EF为01到50,GH为01到32;性别中,男、女占比为99%到99.5%。TEL与E-mail不作要求,但不能全空。Birthday要求从‘19990101’到‘20020731’分布。要求记录ORACLE数据文件的大小变化。 2.对比stud有主键与没有主键情形下生成记录的时间。 3.建立基于sname的索引index_name,对比建立索引的时间与建立索引前后查询某一姓名、某一姓、某一名的时间,分析执行计划。 4.对比索引index_name建立前后,分姓(简单地理解为姓名的第1,2位)、分名的记录数统计时间,分析执行计划。 5.按学号首位建立10个分区分别为part_0到part_9,对比建立分区前后分首位统计人数与分专业(EF位)统计人数的时间,分析执行计划。 ### 任务四、数据备份恢复与基于数据字典的数据库操作 1.建立对应3GB大小的外部文件的tablespace tabspace_???? 2.重建major_????与stud_????,指定存于建立的tabspace_????中。 3.重新产生样本值,包括千万级数据的stud表,对比实验三中产生样本值的时间。 4.用EXP导出数据与IMP导入数据,请作多种尝试。 5.尝试对系统表空间user及自定义表空间tabspace_????进行备份与恢复。 6.登录DBA用户system,通过cat字典入口,找到以DBA_开头的相关数据字典,并且每个对象显示5条记录(SQL生成SQL)。 7.通过查找自己用户下的触发器字典,生成代码将所有触发器的状态改为disable并执行。再生成代码,将状态为disable的触发器的状态改为enable,并执行。 ### 任务五:综合应用 1.创建一个PROFILE文件pTester,设置锁定用户的登录失败次数为3次,会话的总计连接时间60分钟,口令可用天数30天。 2.创建一个新用户Tester,密码为Tester123,缺省表空间是tabspace_????。在tabspace_????表空间中可以使用50M空间,指定环境资源文件为pTester。 3.将角色RESOURCE指派给用户Tester。 4.用EXP和IMP工具将之前创建的major_????表导入到Tester用户下。 5.利用PL/SQL语言,编写一个存储过程实现针对单张表的逻辑数据导出功能,要求将给定表的数据转换成SQL语言的Insert语句,表的结构转换成SQL语言的Create Table语句,并保存在文件中。该过程以要导出的表名和保存SQL语句的文件名为参数,可以以major_????表为例进行测试。