数据库实验报告2

您所在的位置:网站首页 原型链的应用实验报告 数据库实验报告2

数据库实验报告2

2024-07-07 11:27:37| 来源: 网络整理| 查看: 265

(1)实验目的

掌握Oracle中系统权限和对象权限的概念,能熟练进行用户权限的授予与回收;理解角色的基本概念,能熟练使用角色进行权限的授予与回收。掌握数据库对象如触发器、存储过程和函数的定义和使用。掌握ORACLE数据库系统逻辑备份和恢复的方法。

(2)实验要求

熟悉实验室实验环境,阅读实验预备知识,掌握本实验内容涉及知识点的基本用法,了解实验中故障排除的基本方法。实验中根据实验步骤要求,写出相应的代码运行,分析代码书写是否正确,根据步骤要求独立完成实验报告。

(3)实验环境

Oracle 11g,windows 10;

(4)实验内容和步骤

(此处需要填写内容和步骤)

实验内容第一部分(无需截图)

用SYSTEM账户登录数据库,创建用户A、B、C,密码分别为A、B、C;

create user A identified by A;

create user B identified by B;

create user C identified by C;

2.使用SYSTEM账户连接到数据库,并执行如下命令;

--把系统权限CREATE SESSION和CREATE TABLE授予用户A并允许A传递权限;

--注:ORACLE系统权限授予的可选项WITH ADMIN OPTION表示得到权限的用户可以管理得到的系统权限,包括传递权限;

GRANT CREATE SESSION, CREATE TABLE TO A WITH ADMIN OPTION;

--修改用户A的默认表空间为USERS,使用户A能在STUDENT中插入数据;

ALTER USER A DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS;

Grant create session,create table to A with admin option;

alter user A default tablespace users quota unlimited on users;

3.用户A连接登录数据库,创建关系模式student(sno,sname,sage)(自定义属性的数据类型),用户A向表student插入数据(插入内容自定义),并执行commit提交数据;

create table student

(

sno char(9) primary key,

sname char(20) unique,

sage smallint

);

insert into student(sno,sname,sage) values('200610002','小陈',18);

insert into student(sno,sname,sage) values('200610003','小红',19);

insert into student(sno,sname,sage) values('200610004','小白',18);

commit;

4.用户A完成以下任务;

--(1)把CREATE SESSION权限授予给B(授权时使用WITH ADMIN OPTION);

--(2)把STUDENT表的SELECT和INSERT权限授予给B,并允许B传递获得的权限(对象权限采用的选项是WITH GRANT OPTION)

grant create session to B with admin option;

grant select,insert on  student  to B with grant option;

5.用户B连接登录数据库,测试用户B对表student表的select和Insert权限(用户B获得student表的权限后,访问student表必须使用A.student);

select * from A.student;

insert into A.student(sno,sname,sage) values('20061005','小黄',19);

6.用户B把CREATE SESSION、对表A.student的select权限授予给用户C;

grant create session to C;

grant select on A.student to C;

7.用户C登录数据库,测试用户C对表A.student表是否有select和Insert权限;

select * from A.student;

insert into student(sno,sname,sage) values('200610006','小黑',20);

没有insert权限,插入失败

8.用户A把student的属性sname、sage的修改权限授予用户B;

grant update(sname,sage) on student to B;

9.用户A收回用户B对student表的select权限,测试用户B、C是否仍然具有对student表的select权限;

revoke select on student from B;

10.用户A回收用户B的CREATE SESSION权限,测试用户B、C是否仍然可以连接登录到数据库;

revoke create session from B;

B不可以,C可以

11.由系统管理员SYS或SYSTEM授予用户A创建角色的权限;

grant create role to A with admin option;

12.用户A创建角色MyRole,授予角色MyRole对表Student的select权限以及CREATE SESSION权限;

create role Myrole;

grant create session to Myrole;

13.用户A把角色MyRole授予给用户B,并允许用户B对角色进行管理,测试用户B获取的权限(授予的角色权限在用户下次登陆才生效);

grant select on student to Myrole;

14.用户B把角色MyRole授予给用户C,测试用户C是否具有对Student表的select权限;

select * from A.student;

C对student表有select权限

15.用户A回收用户B的MyRole角色权限,测试B、C拥有的对Student表的select权限是否已经回收(角色权限回收并不影响当前已建立连接的用户,用户在下次登陆才失效);

grant Myrole to B with admin option;

revoke Myrole from B;

B对student表的select权限已经回收,但C对student表的select权限没有被回收

实验内容第二部分(无需截图)

编写带有一个输入参数和一个输出参数的存储过程,输入参数的类型与教师的编号类型相同,输出参数的类型与tm表的workdays类型相同,存储过程的功能是,根据输入参数教工号的值,计算出该教师为其参与的所有项目的工作总天数;

create or replace procedure findTeacherWorkDays

(v_tno in teacher.tno%type,v_workdays out tm.workdays%type)

as

begin

select sum(tm.workdays) into v_workdays from teacher,tm where teacher.tno=tm.tno and teacher.tno=v_tno;

end;

编写代码测试存储过程(若无信息输出,请在代码前面加上set serveroutput on;);

set serveroutput on;

declare

  x tm.workdays%type;

begin

   findteacherworkdays('t001',x);

   dbms_output.put_line('编号为t001老师的总工作时长:'||x);

end;

编写一个函数,计算某个教师负责的经费总数;

create or replace function sumFUND(c_tno in teacher.tno%type)

return number

as

  c_fund myproject.pfund%type;

begin

   select sum(pfund) into c_fund from myproject where tno=c_tno;

   if(c_fund is null) then

      c_fund:=0;

    end if;

    return c_fund;

end;

编写代码测试函数;

select tno,sumFUND(tno) from teacher;

编写一个行级前触发器,当插入、修改Teacher表中教师的工资时,如果工资高于8000,则把工资改为8000;

           

create or replace trigger modifySalary

before insert or update of tsalary on teacher

for each row

when(new.tsalary>8000)

begin

   :new.tsalary:=8000;

end;

编写代码测试触发器是否工作正常;

update teacher set tsalary=9000 where tno='t001';

insert into teacher(tno,dno,tname,tsex,tsalary,tbirthday) values('t009','d001','陈陈陈','男',9000,'17-10月-1985')

删除实验中建立的存储过程;

drop procedure findteacherworkdays;

删除实验中建立的函数;

drop function sumfund;

删除实验中建立的触发器;

drop trigger modifysalary;

实验内容第三部分(需要截图)

1.用SYSTEM用户创建数据库用户DBLESSON,并授予RESOURCE,CONNECT角色权限;

CREATE USER DBLESSON IDENTIFIED BY DBLESSON;

GRANT RESOURCE,CONNECT TO DBLESSON;

2.利用附录中SQL语句(可在QQ共享文件夹中下载),建立项目信息管理数据库;

 

3.从开始菜单启动CMD,然后执行以下命令;

执行EXP HELP=Y,查看EXP帮助文档,了解各个参数的作用。

执行IMP HELP=Y,查看IMP帮助文档,了解各个参数的作用。

4.在CMD下执行以下命令,导出数据到文件D:\DBLESSON.DMP;

用DBLESSON用户导出DBLESSON的TEACHER、TM、MYPROJECT表(注意,如果安装的是Oracle Express版,默认SID是XE,请把ORCL改为XE,此外,密码区分大小写,后同);

EXP USERID=DBLESSON/DBLESSON@ORCL TABLES=(TEACHER,TM,MYPROJECT) FILE=D:\DBLESSON.DMP

注:如果网络服务名配置有误,则采用下面的命令(即网络服务名用“IP地址:端口号/SID”代替),后同。

EXP USERID=DBLESSON/[email protected]:1521/orcl TABLES=(TEACHER,TM,MYPROJECT) FILE=D:\DBLESSON.DMP

如果Oracle SID为XE,则用以下语句,后同。

EXP USERID=DBLESSON/[email protected]:1521/XE TABLES=(TEACHER,TM,MYPROJECT) FILE=D:\DBLESSON.DMP

5.在CMD下执行命令“SQLPLUS DBLESSON/[email protected]:1521/ORCL”进入SQLPLUS环境下,然后删除表格TM;

DROP TABLE TM;

注:如果安装的是Oracle Express版,请把ORCL改为XE;如果SQLPLUS不可用,可以使用SQL Developer建立连接删除TM表,后同。

SQLPLUS不可用

6.在CMD下执行以下命令,用D:\DBLESSON.DMP还原数据库中的TM表;

--用D:\DBLESSON.DMP还原数据库中的TM表,并查看结果;

IMP USERID=DBLESSON/DBLESSON@ORCL FILE=D:\DBLESSON.DMP TABLES=(TM) IGNORE=Y

注:如果网络服务名配置有误,请参照第4步,后同。

还原TM表

在SQL Developer上查看TM表是否还原

7.在CMD下执行以下命令,用DBLESSON导出方案DBLESSON;

EXP USERID=DBLESSON/DBLESSON@ORCL OWNER=DBLESSON FILE=D:\SCHEMA.DMP

8.在SQLPLUS环境下,用户DBLESSON删除DBLESSON方案下的所有表、视图等对象;

DROP TABLE TEACHER;

DROP TABLE MYPROJECT;

DROP TABLE DEPARTMENT;

9.在CMD下执行以下IMP恢复命令并查看恢复后的结果;

IMP USERID=DBLESSON/DBLESSON FROMUSER=DBLESSON TOUSER=DBLESSON FILE=D:\SCHEMA.DMP

10.在CMD下,用SYSTEM用户导出整个数据库;

EXP USERID=SYSTEM/ORACLE FILE=D:\DB.DMP FULL=Y

11.在SQLPLUS环境下,用SYSTEM用户删除DBLESSON用户,重建一个用户DB1并授予RESOURCE、CONNECT角色权限;

CREATE USER DB1 IDENFIFIED BY DB1;

GRANT RESOURCE,CONNECT TO DB1;

12.在CMD下执行以下命令,把导出的数据导入到用户DB1;

IMP USERID=SYSTEM/ORACLE FROMUSER=DBLESSON TOUSER=DB1 FILE=D:\DB.DMP

(1)实验目的

掌握Oracle中系统权限和对象权限的概念,能熟练进行用户权限的授予与回收;理解角色的基本概念,能熟练使用角色进行权限的授予与回收。掌握数据库对象如触发器、存储过程和函数的定义和使用。掌握ORACLE数据库系统逻辑备份和恢复的方法。

(2)实验要求

熟悉实验室实验环境,阅读实验预备知识,掌握本实验内容涉及知识点的基本用法,了解实验中故障排除的基本方法。实验中根据实验步骤要求,写出相应的代码运行,分析代码书写是否正确,根据步骤要求独立完成实验报告。

(3)实验环境

Oracle 11g,windows 10;

(4)实验内容和步骤

(此处需要填写内容和步骤)

实验内容第一部分(无需截图)

用SYSTEM账户登录数据库,创建用户A、B、C,密码分别为A、B、C;

create user A identified by A;

create user B identified by B;

create user C identified by C;

2.使用SYSTEM账户连接到数据库,并执行如下命令;

--把系统权限CREATE SESSION和CREATE TABLE授予用户A并允许A传递权限;

--注:ORACLE系统权限授予的可选项WITH ADMIN OPTION表示得到权限的用户可以管理得到的系统权限,包括传递权限;

GRANT CREATE SESSION, CREATE TABLE TO A WITH ADMIN OPTION;

--修改用户A的默认表空间为USERS,使用户A能在STUDENT中插入数据;

ALTER USER A DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS;

Grant create session,create table to A with admin option;

alter user A default tablespace users quota unlimited on users;

3.用户A连接登录数据库,创建关系模式student(sno,sname,sage)(自定义属性的数据类型),用户A向表student插入数据(插入内容自定义),并执行commit提交数据;

create table student

(

sno char(9) primary key,

sname char(20) unique,

sage smallint

);

insert into student(sno,sname,sage) values('200610002','小陈',18);

insert into student(sno,sname,sage) values('200610003','小红',19);

insert into student(sno,sname,sage) values('200610004','小白',18);

commit;

4.用户A完成以下任务;

--(1)把CREATE SESSION权限授予给B(授权时使用WITH ADMIN OPTION);

--(2)把STUDENT表的SELECT和INSERT权限授予给B,并允许B传递获得的权限(对象权限采用的选项是WITH GRANT OPTION)

grant create session to B with admin option;

grant select,insert on  student  to B with grant option;

5.用户B连接登录数据库,测试用户B对表student表的select和Insert权限(用户B获得student表的权限后,访问student表必须使用A.student);

select * from A.student;

insert into A.student(sno,sname,sage) values('20061005','小黄',19);

6.用户B把CREATE SESSION、对表A.student的select权限授予给用户C;

grant create session to C;

grant select on A.student to C;

7.用户C登录数据库,测试用户C对表A.student表是否有select和Insert权限;

select * from A.student;

insert into student(sno,sname,sage) values('200610006','小黑',20);

没有insert权限,插入失败

8.用户A把student的属性sname、sage的修改权限授予用户B;

grant update(sname,sage) on student to B;

9.用户A收回用户B对student表的select权限,测试用户B、C是否仍然具有对student表的select权限;

revoke select on student from B;

10.用户A回收用户B的CREATE SESSION权限,测试用户B、C是否仍然可以连接登录到数据库;

revoke create session from B;

B不可以,C可以

11.由系统管理员SYS或SYSTEM授予用户A创建角色的权限;

grant create role to A with admin option;

12.用户A创建角色MyRole,授予角色MyRole对表Student的select权限以及CREATE SESSION权限;

create role Myrole;

grant create session to Myrole;

13.用户A把角色MyRole授予给用户B,并允许用户B对角色进行管理,测试用户B获取的权限(授予的角色权限在用户下次登陆才生效);

grant select on student to Myrole;

14.用户B把角色MyRole授予给用户C,测试用户C是否具有对Student表的select权限;

select * from A.student;

C对student表有select权限

15.用户A回收用户B的MyRole角色权限,测试B、C拥有的对Student表的select权限是否已经回收(角色权限回收并不影响当前已建立连接的用户,用户在下次登陆才失效);

grant Myrole to B with admin option;

revoke Myrole from B;

B对student表的select权限已经回收,但C对student表的select权限没有被回收

实验内容第二部分(无需截图)

编写带有一个输入参数和一个输出参数的存储过程,输入参数的类型与教师的编号类型相同,输出参数的类型与tm表的workdays类型相同,存储过程的功能是,根据输入参数教工号的值,计算出该教师为其参与的所有项目的工作总天数;

create or replace procedure findTeacherWorkDays

(v_tno in teacher.tno%type,v_workdays out tm.workdays%type)

as

begin

select sum(tm.workdays) into v_workdays from teacher,tm where teacher.tno=tm.tno and teacher.tno=v_tno;

end;

编写代码测试存储过程(若无信息输出,请在代码前面加上set serveroutput on;);

set serveroutput on;

declare

  x tm.workdays%type;

begin

   findteacherworkdays('t001',x);

   dbms_output.put_line('编号为t001老师的总工作时长:'||x);

end;

编写一个函数,计算某个教师负责的经费总数;

create or replace function sumFUND(c_tno in teacher.tno%type)

return number

as

  c_fund myproject.pfund%type;

begin

   select sum(pfund) into c_fund from myproject where tno=c_tno;

   if(c_fund is null) then

      c_fund:=0;

    end if;

    return c_fund;

end;

编写代码测试函数;

select tno,sumFUND(tno) from teacher;

编写一个行级前触发器,当插入、修改Teacher表中教师的工资时,如果工资高于8000,则把工资改为8000;

           

create or replace trigger modifySalary

before insert or update of tsalary on teacher

for each row

when(new.tsalary>8000)

begin

   :new.tsalary:=8000;

end;

编写代码测试触发器是否工作正常;

update teacher set tsalary=9000 where tno='t001';

insert into teacher(tno,dno,tname,tsex,tsalary,tbirthday) values('t009','d001','陈陈陈','男',9000,'17-10月-1985')

删除实验中建立的存储过程;

drop procedure findteacherworkdays;

删除实验中建立的函数;

drop function sumfund;

删除实验中建立的触发器;

drop trigger modifysalary;

实验内容第三部分(需要截图)

1.用SYSTEM用户创建数据库用户DBLESSON,并授予RESOURCE,CONNECT角色权限;

CREATE USER DBLESSON IDENTIFIED BY DBLESSON;

GRANT RESOURCE,CONNECT TO DBLESSON;

2.利用附录中SQL语句(可在QQ共享文件夹中下载),建立项目信息管理数据库;

 

3.从开始菜单启动CMD,然后执行以下命令;

执行EXP HELP=Y,查看EXP帮助文档,了解各个参数的作用。

执行IMP HELP=Y,查看IMP帮助文档,了解各个参数的作用。

4.在CMD下执行以下命令,导出数据到文件D:\DBLESSON.DMP;

用DBLESSON用户导出DBLESSON的TEACHER、TM、MYPROJECT表(注意,如果安装的是Oracle Express版,默认SID是XE,请把ORCL改为XE,此外,密码区分大小写,后同);

EXP USERID=DBLESSON/DBLESSON@ORCL TABLES=(TEACHER,TM,MYPROJECT) FILE=D:\DBLESSON.DMP

注:如果网络服务名配置有误,则采用下面的命令(即网络服务名用“IP地址:端口号/SID”代替),后同。

EXP USERID=DBLESSON/[email protected]:1521/orcl TABLES=(TEACHER,TM,MYPROJECT) FILE=D:\DBLESSON.DMP

如果Oracle SID为XE,则用以下语句,后同。

EXP USERID=DBLESSON/[email protected]:1521/XE TABLES=(TEACHER,TM,MYPROJECT) FILE=D:\DBLESSON.DMP

5.在CMD下执行命令“SQLPLUS DBLESSON/[email protected]:1521/ORCL”进入SQLPLUS环境下,然后删除表格TM;

DROP TABLE TM;

注:如果安装的是Oracle Express版,请把ORCL改为XE;如果SQLPLUS不可用,可以使用SQL Developer建立连接删除TM表,后同。

SQLPLUS不可用

6.在CMD下执行以下命令,用D:\DBLESSON.DMP还原数据库中的TM表;

--用D:\DBLESSON.DMP还原数据库中的TM表,并查看结果;

IMP USERID=DBLESSON/DBLESSON@ORCL FILE=D:\DBLESSON.DMP TABLES=(TM) IGNORE=Y

注:如果网络服务名配置有误,请参照第4步,后同。

还原TM表

在SQL Developer上查看TM表是否还原

7.在CMD下执行以下命令,用DBLESSON导出方案DBLESSON;

EXP USERID=DBLESSON/DBLESSON@ORCL OWNER=DBLESSON FILE=D:\SCHEMA.DMP

8.在SQLPLUS环境下,用户DBLESSON删除DBLESSON方案下的所有表、视图等对象;

DROP TABLE TEACHER;

DROP TABLE MYPROJECT;

DROP TABLE DEPARTMENT;

9.在CMD下执行以下IMP恢复命令并查看恢复后的结果;

IMP USERID=DBLESSON/DBLESSON FROMUSER=DBLESSON TOUSER=DBLESSON FILE=D:\SCHEMA.DMP

10.在CMD下,用SYSTEM用户导出整个数据库;

EXP USERID=SYSTEM/ORACLE FILE=D:\DB.DMP FULL=Y

11.在SQLPLUS环境下,用SYSTEM用户删除DBLESSON用户,重建一个用户DB1并授予RESOURCE、CONNECT角色权限;

CREATE USER DB1 IDENFIFIED BY DB1;

GRANT RESOURCE,CONNECT TO DB1;

12.在CMD下执行以下命令,把导出的数据导入到用户DB1;

IMP USERID=SYSTEM/ORACLE FROMUSER=DBLESSON TOUSER=DB1 FILE=D:\DB.DMP



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭