大型数据库技术实验报告册

时间:2024.3.24

学生实验报告册

(理工



课程名称:大型数据库技术 专业班级:M11计算机科学与技术(专转本)            

学生学号:  xxxxxxxxxxx  学生姓名:      xx            

所属院部:  龙蟠学院    指导教师:    xxxxxx           

2011——20 12学年          第 2 学期

 金陵科技学院教务处制


实验报告书写要求

实验报告原则上要求学生手写,要求书写工整。若因课程特点需打印的,要遵照以下字体、字号、间距等的具体要求。纸张一律采用A4的纸张。

实验报告书写说明

实验报告中一至四项内容为必填项,包括实验目的和要求;实验仪器和设备;实验内容与过程;实验结果与分析。各院部可根据学科特点和实验具体要求增加项目。

填写注意事项

(1)细致观察,及时、准确、如实记录。

(2)准确说明,层次清晰。

(3)尽量采用专用术语来说明事物。 

(4)外文、符号、公式要准确,应使用统一规定的名词和符号。

(5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。

实验报告批改说明

实验报告的批改要及时、认真、仔细,一律用红色笔批改。实验报告的批改成绩采用百分制,具体评分标准由各院部自行制定。

实验报告装订要求

实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课程的实验大纲。

实验项目名称:熟悉Oracle环境及数据库和表的创建实验学时:   3     

同组学生姓名:            实验地点:   B513   

实验日期:        20##-3-22                   实验成绩:         

批改教师:                           批改时间:         

实验1 熟悉Oracle环境及数据库和表的创建

一、实验目的和要求

1、熟悉Oracle10g的工作环境、了解Oracle主要管理工具的用途、掌握登录Oracle10g的方法。

2、理解权限的概念以及创建数据库必须要确定的因素:库名、所有者、大小、SGA分配和存储数据库的文件。

3、理解参数文件的作用。

4、掌握SQL*Plus、iSQL*Plus 、DBCA等主要工具的使用方法。

5、掌握行编辑命令的使用方法。

6、掌握在Oracle 10g环境下,利用DBCA和SQL创建数据库和表的方法。

二、实验设备、环境

设备:奔腾Ⅳ或奔腾Ⅳ以上计算机

环境:WINDOWS 20## SERVER或WINDOWS 20## SERVER、ORACLE 10g中文版

三、实验步骤

1、分析题意,重点分析题目要求并给出解决方法。

2、根据题目要求启动SQL*Plus、iSQL*Plus、OEM和DBCA等管理工具。

3、按题目要求完成实际操作任务,并将相关文档资料保存在以自己学号命名的文件夹中。

4、提交完成的实验结果。

四、实验内容

1、熟悉Oracle常用的管理工具

(1)OEM(主目录、性能、管理、维护)

    OEM是Oracle10g的数据库控制工具,它包含有大量对DBA有用的工具,为日常的数据库操作提供了直观、方便的图形化界面GUI,包括创建新用户、角色、进行权限分配、查看数据库运行情况、创建对象方案、进行存储管理等,几乎所有的数据库管理和操作都可以通过OEM来完成。

主目录页面:该页主要提供有关数据库环境和健康的丰富的信息。包括:一般信息、主机CPU、活动会话、高可用性部分、空间使用情况和诊断部分、预警和相关预警、性能分析、以及相关链接部分。

Ø  一般信息:该部分提供数据库状态可快速概览以及数据库的基本信息。

Ø  主机CPU:有一个图形,以不同的颜色粗略显示Oracle主机的相对CPU占用率。

Ø  活动会话:显示当前活动会话的情况、当前数据库的工作以及其他SQL统计信息。

Ø  高可用性:显示相关可用信息,包括:例程恢复时间、上次备份时间、Oracle 10g数据库的最近备份时间、以及该次备份是否成功已用归档区域的百分比以及是否用了闪回事件等。

Ø  空间使用情况:显示数据库的大小、并列出数据库包含有问题的表空间的数目。段查找结果:有助于识别与存储有关的问题,并提供改善性能的建议案。

Ø  诊断概要:给出了数据库执行情况的概略;性能查找结果:表示被自动数据库诊断监视器ADDM发现的问题的数量。OEM也能够自动分析环境、以确定是否存在违反策略的操作,并将分析结果放在所诊断有违反策略的情况中。

Ø  预警和相关预警:这两部分均以表的形式给出警告信息,以引起用户的注意。

Ø  性能分析:该部分列出ADDM任务的结果。作业活动部分中包含一个作业执行的报告,显示已经调度的、正在运行的、挂起的和有问题的执行。

Ø  相关链接:指明了可以与之链接的部分。

性能页面:主要功能是监视Oracle 10g数据库服务器的运行状况,实时掌握其各种运行参数,并据此存在问题来采取相应措施来对其进行优化,以进一步提高其效率,确保系统的正常运行等。是DBA的主要任务之一。包括:主机、会话:等待和运行、例程吞吐量、和其他监视链接四个部分。

主机部分:有两个图表即:运行队列长度和分页速率。

Ø  运行队列长度:指正在等待使用CPU的进程数,表示CPU争用的程度。

Ø  分页速率:反映主机经内存内容写出道交换空间以创建更多内存空间的速率。如果内存足够,系统将不需要分页。当内存已满、内存空间争用加剧时,主机将较少使用的页空间换出。

“会话:等待和运行”:会话图表反映11种时间类型,是Oracle性能监视的核心。Y轴上显示按全部时间折算的会话数,反映数据库的平衡负载。

Ø  绿色区域表示正在访问CPU的用户。其他颜色则表示各种等待事件(如:锁、磁盘I/O重写或网络通信)的用户。

Ø  例程吞吐量:吞吐量图表反映会话活动图表中显示的各种争用的相对重要性。如果会话活动图表显示会话等待书不断增加,但吞吐量也不不断增加,则可以忍受。如果吞吐量反而下降而内部争用加剧,则应该考虑采取优化措施了。

Ø  其他监视链接数要有:Top Sessions、顶级SQL、数据库锁、阻塞会话、例程活动、顶级使用者等的链接。

管理属性页面:主要功能通过该页配置和调整数据库个各个方面,从而提高性能和调整设置。这是DBA主要工作的场所,可以完成大部分的数据库日常管理工作。

Ø  例程部分:主要有内存参数、还原管理、所有的初始化参数等内容。

Ø  存储部分:主要有控制文件、表空间、数据文件、重做日志文件组等。

Ø  安全性部分:只要有用户、角色、概要文件等。

Ø  方案部分:主要有表、索引、视图、同义词、过程、函数、触发器等。

维护属性页面:可以执行以下任务将数据导出到文件中或从文件中导入数据,将数据从文件加载到Oracle的数据库中,收集、估计、和删除统计信息,同时提高对数据库对象进行SQL查询的性能。主要包括:实用程序、备份与恢复、部署等等三个部分。

Ø  实用程序部分:主要有导入导出、加载数据、聚集统计信息、重组对象和本地管理表空间等。

Ø  备份与恢复部分:主要提供对系统数据的备份和恢复两项功能,有效地避免数据的丢失。只要包括:调度备份、执行恢复、管理当前恢复、配置备份设置、配置恢复设置、配置恢复目录设置等内容。

Ø  部署部分:主要目的是为了避免系统(包括数据)丢失,此外,还提供了其他一些功能,如配置收集状态、管理策略库等。包括:补丁程序、克隆数据库、克隆Oracle主目录、查看补丁程序高速缓存、配置收集状态、管理策略库,管理违反策略的情况等。

(2)SQL*Plus 主要的编辑命令:

    文件操作命令:

(3)iSQL *Plus

  iSQL*Plus允许使用Web浏览器连接到Oracle 10g并执行如同在SQL*Plus命令行版中执行的相同操作。可以使用iSQL*Plus来编辑SQL*Plus、SQL、PL/SQL命令,从而输入、编辑、运行并保存SQL命令和PL/SQL块以及计算结果。

(4)DBCA

2、利用DBCA创建数据库

(1)数据库名称为Orcl,它的全局数据库名Orcl.COM.CN

(2)控制文件有3个,其存取路径为:D:\oracle\oracdata\Orcl\ 其名称为CONTROL01.CTL、CONTROL02.CTL、CONTROL03.CTL。

(3)重做日至文件有3个其大小为10MB,存取路径为:D:\oracle\oradata\ Orcl \ 名称为:redo01.log、redo02.log、redo03.log。

(4)创建临时表空间temp01.dbf。

(5)字符集为ZHS16GBK,国家字符集为AL16UTF16。

(6)数据块大小为:4KB。

3、利用DBCA删除数据库Orcl

4、使用PL/SQL手工创建数据库(选做)

(1)确定新数据库对应的实例名(SID)

(2)确定DBA认证方法

(3)创建初始化参数文件

(4)使用SQL*Plus连接到实例

(5)创建服务器参数文件(推荐)

(6)启动实例

(7)使用CREATE DATABASE语句创建数据库

(8)创建附加的表空间

(9)运行脚本以创建数据库字典视图

参见:参数文件脚本和创建数据库文件脚本

5、在OEM中分别创建表Employees、Departments和Salary(表结构请参见text文本)

6、在OEM中删除创建的Employees、Departments和Salary表

7、使用SQL语句创建表Employees、Departments和Salary及相应的约束。

五、问题解答及实验结果

1.创建表DEPARTMENT、EMPLOYEES、SALARY, 并输入表的结构

表DEPARTMENT的数据结构:

CREATE TABLE DEPARTMENT

 (

    DEPARTMENTID  CHAR(3)  NOT NULL,

    DEPARTMENTNAME  CHAR(20) NOT NULL,

    NOTE  CHAR(16),

    PRIMARY KEY(DEPARTMENTID)

 );

表EMPLOYEES的数据结构:

CREATE TABLE EMPLOYEES

(

    EMPLOYEEID   CHAR(6)   NOT NULL,

    NAME   CHAR(10)  NOT NULL,

    BIRTHDAY  DATE  NOT NULL,

    SEX  NUMBER(1)  NOT NULL,

    ADDRESS  CHAR(20),

    ZIP  CHAR(6),

    PHONENUMBER  CHAR(12),

    EMAILADDRESS  CHAR(30),

    DEPARTMENTID  CHAR(3)  NOT NULL,

    PRIMARY KEY(EMPLOYEEID),

    FOREIGN KEY(DEPARTMENTID)REFERENCES DEPARTMENTS(DEPARTMENTID)

);

表SALARY的数据结构:

CREATE “m1106”.”TABLE SALARY”

(

     “EMPLOYEEID”  CHAR(6) NOT NULL,

     “INCOME”  NUMBER(8,2)  NOT NULL,

     “OUTCOME”  NUMBE   NOT NULL,

     PRIMARY KEY(EMPLOYEEID)

)

六、实验体会和收获

通过本次的实验,我知道了如何通过Oracle的工作环境来创建表的结构,表的约束条件包括主键和外键。对于表的结构中每一条属性要设置好,防止在插入数据的时候,发生错误!及其表名要使用统一。

Oracle数据库作为一个大型的数据库,在我们的计算机领域的应用非常广泛。同时它的重要性我们都有目共睹,因此我们该学好数据库的,并能熟练掌握它的各项功能和应用。

在此次的实验中,也遇到了一些问题,譬如外键的创建,通过同学的帮助,解决了此问题!也发现了自己的不足,对于SQL语言的写法不是很熟悉,要加强自己这方面的锻炼!

实验项目名称:表数据的插入、修改和删除等  实验学时: 3       

同组学生姓名:            实验地点:  B513       

实验日期:        2012/04/12                 实验成绩:         

批改教师:                 批改时间:         

实验2 表数据的插入、修改与删除等

一、实验目的和要求

1、了解SQL语言对表数据操作的灵活控制功能,以及数据更新操作时要注意数据的完整性。

2、掌握在SQL *Plus或iSQL*Plus窗口中用PL/SQL语言对表数据进行增、删、改操作的方法。

3、能够在OEM中查看相应的数据。

4、通过替换变量的练习,理解替换变量在程序中的用途。

5、通过环境变量的设置,了解按相应格式的显示功能以及SQL*Plus的报表打印功能。

二、实验设备、环境

设备:奔腾Ⅳ或奔腾Ⅳ以上计算机

环境:WINDOWS 20## SERVER或WINDOWS 20## SERVER、ORACLE 10g中文版

三、实验步骤

1、分析题意,重点分析题目要求并给出解决方法。

2、根据题目要求启动SQL*Plus、iSQL*Plus、OEM等管理工具。

3、按题目要求完成实际操作任务,并将相关文档资料保存在以自己学号命名的文件夹中。

4、提交完成的实验结果。

四、实验内容

1、熟悉SQL*Plus或iSQL*Plus的使用方法,用SQL语言向已经建立的Departments表、Employees和Salary表中添加数据。(注:请将SQL语句存入脚本文件中以便以后利用。)

2、掌握用SQL语言对表数据进行修改和删除的方法。

(1)用SQL语言删除表Employees与Salary的编号为010008和210678的记录。注意进行删除操作时,作为两表主键的EmployeeID的值,应保持数据的完整性。

(2)删除表Departments中编号为2的记录,同时也要删除表Employees中部门编号为2的记录。(思考:应该首先删除哪一个表的记录?)

(3)将表Employees中职员编号为020018的记录的部门号改为4。

(4)使用TRANCATE  TABLE 语句删除表中所有行。

3、掌握替换变量的使用方法。(参见P109-110)

(1)&替换变量的使用

   在Employees表中根据指定的雇员号,查询该雇员的情况。

(2)&&替换变量的使用

   使用&&替换变量,在Employees表中查询部门人数大于2的部门编号。

(3)DEFIN和ACCEPT命令的使用。

 a.定义一个变量dept,并为其赋予值“人力资源部”,然后显示该变量的信息。引用该变量查询人力资源部的信息。

 b.使用ACCEPT定义一个变量num,且指定提示文本为“请输入职工编号:”,根据这个变量的值,查询该职工的姓名、性别和工资情况。

4、报表输出格式(参见P100-102)

(1)定义页眉:职工情况 要求:居中。

(2)定义页脚:-------report1.sql

(3)每行50个字符,每页35行。

五、问题解答及实验结果

1插入 insert into Departments values(’1’,’财务部’,null);

      ………

      insert into employees values('108991','钟敏','10-8月 -69','0','中山路108-3-105','210003','3346722','zhongmin@sohu.c','3');

      ………

      insert into salary values(‘000001’, ‘2100.8’,’ 123.09’);

      ………

2.删除

 (1)    Delete from Employees,Salary

       Where EMPLOY=010008 and EMPLOY=210678;

(2)     Delete from Employees

Where DEPARTMENTID=2;

Delete from Departments

Where DEPARTMENTID=2;

(3)     update Employees

set DEPARTMENTID=4

where EMPLOY= 020018;

(4) TRANCATE Employees

3替换变量

(1)select EMPLOY,NAME,BIRTHDAY,SEX,ADDRESS,PHONENUMBER,EMAILADDRESS,       DEPARTMENTID

From employees

Where DEPARTMENTID=&amount;

(2) select EMPLOY,NAME,BIRTHDAY,SEX,ADDRESS,PHONENUMBER,EMAILADDRESS,       &&DEPARTMENTID

From employees

Where DEPARTMENTID>&amount;

(3)a    define DEPARTMENTNAME=” 人力资源部”(CHAR)

       Select *

From departments

Where DEPARTMENTNAME=upper( ‘&人力资源部’)

b    accept num prompt’请输入员工编号:’

    

 Select NAME, SEX, INCOME

From employees,salary

Where EMPLOY =upper(‘& num’);

六、实验体会和收获

通过这次实验,我了解了SQL语言对表数据操作的灵活控制功能,以及数据更新操作时要注意数据的完整性。掌握在SQL *Plus或iSQL*Plus窗口中用PL/SQL语言对表数据进行增、删、改操作的方法。能够在OEM中查看相应的数据;通过替换变量的练习,理解替换变量在程序中的用途;通过环境变量的设置,了解按相应格式的显示功能以及SQL*Plus的报表打印功能。虽然对于SQL语言我还不是很熟练,但是我会好好练习。

实验项目名称:   数据库的查询            实验学时: 3       

同组学生姓名:            实验地点:  B513   

实验日期:        2012/04/26                  实验成绩:          

批改教师:                       批改时间:         

实验3 数据库的查询

一、实验目的和要求

1、通过实验进一步理解SQL语言中的SELECT语句的语法结构,理解各个子句的含义以解决复杂的查询问题。

2、掌握SELECT语句的基本语法。

3、掌握子查询和连接查询语句的编写方法。

4、掌握聚集函数、GROUP BY、HAVING子句以及ORDER BY子句等的编写方法。

5、了解层次查询的功能以及适用范围,掌握层次查询的编写方法。

6、了解翻译函数的用途,掌握在查询中使用翻译函数加密数据的方法。

7、了解分析查询的功能,掌握分析查询的编写方法。

二、实验设备、环境

设备:奔腾Ⅳ或奔腾Ⅳ以上计算机

环境:WINDOWS 20## SERVER或WINDOWS 20## SERVER、ORACLE 10g中文版

三、实验步骤

1、分析题意,重点分析题目要求并给出解决方法。

2、根据题目要求启动SQL*Plus、iSQL*Plus、OEM等管理工具。

3、按题目要求完成实际操作任务,并将相关文档资料保存在以自己学号命名的文件夹中。

4、提交完成的实验结果。

四、实验内容

1、SELECT语句的基本使用。

(1)查询Employees表中女雇员的地址和电话,使用AS子句将结果中各列的标题分别指定为地址、电话。

(2)计算每个雇员的实际收入。

(3)找出所有姓王的雇员的部门号。

(4)找出所有收入在2000和3000元之间的雇员号码。

2、子查询的使用。

(1)查找在财务部工作的雇员的情况。

(2)查找财务部年龄不低于研发部雇员年龄的雇员姓名。

(3)查找比所有财务部的雇员收入都高的雇员的姓名。

3、连接查询。

(1)查询每个雇员的基本信息及其薪水的情况。

(2)查找财务部收入在2200元以上的雇员姓名及其薪水详情。

4、聚集函数的应用。

(1)求财务部雇员的平均收入。

(2)求财务部雇员的总人数。

5、GROUP BY、ORDER BY字句的使用。

(1)求各部门的雇员数。

(2)将各雇员的情况按收入由高到低排列。

6、层次查询(参见P170-172)

(1)在SQL *Plus或iSQL *Plus 中运行bicycle.sql脚本文件,创建bicycle表,并插入相应的数据。

(2)使用start with子句来指定树状结构、使用connect by子句指定父节点和字节点之间的关系。

(3)使用level伪列来表示树状结构的层次,并使用Order by子句对level列的数据进行排序。

(4)使用column命令设置partName列长为35位长的字符、设置mp_cost列按照9999.99的格式显示数字、使用lpad()函数增加空格,直观的显示bicycle表中的数据。

(5)检索零部件包含“飞轮”字符的零部件代号,并从该节点开始执行层次查询。

7、翻译查询

(1)使用translate()函数对bicycle表中的零件成本数据进行加密,密钥源表达式:1234567890,密钥终表达式为:5129837047。

8、分析查询

(1)在SQL *Plus或iSQL *Plus中运行sales_fact.slq脚本文件,创建sales_fact_2006表,并插入相应的数据。

(2)使用over()关键字和sum()分析函数执行累加分析。

(3)指定赵亦、钱尔、李斯三位销售员参加分析查询。

五、问题解答及实验结果

1.1

select address as 地址,phonenumber as 电话

from employees

where sex=0;

1.2

set linesize 120

select employeeid,income-outcome 实际收入

from salary;

1.3

select departmentid,name

from employees

where name like '王%';

1.4

select income,employeeid

from salary

where income between 20## and 3000;

2.1

select *

from employees

where employees.departmentid=(select departmentid from department

where departmentname='财务部');

2.2

select name

from employees

where departmentid = (select departmentid

                      from department

                      where departmentname='财务部')

      and birthday < (select min(birthday)

                      from employees

                      where departmentid=(select departmentid

                                          from department

                                          where departmentname='研发部'));

2.3

select name

from employees

where employeeid in( select employeeid from salary where income>(select max(income)

from salary where employeeid in (select employeeid from employees

where departmentid = (select departmentid from department

where departmentname ='财务部'))));

3.1

select employees.employeeid,name,birthday,sex,address,zip,phonenumber,emailaddress,departmentid,salary.employeeid,income,outcome

from salary,employees

where salary.employeeid=employees.employeeid;

3.2

select name,income,outcome

from employees,salary

where employees.employeeid=salary.employeeid

and income>2200 and departmentid=(select departmentid

                                  from department

                                  where departmentname='财务部');

4.1

select avg(income)

from salary

where employeeid in (select employeeid

                   from employees

                   where departmentid='1');

4.2

select count(*) from employees where departmentid=(select departmentid from department where departmentname='财务部');

5.1

select departmentid,count(*) as 人数 from employees group by departmentid;

5.2

select employees.*,salary.income from employees,salary where employees.employeeid =salary.employeeid order by income desc;

6.1

create table bicycle(

part_id number(5) constraint pk_bicycle_part_id primary key,

parent_id number(5) constraint fk_bicycle_pid references bicycle(part_id),

part_name varchar2(30) not null,

mp_cost number(9, 2),

describe varchar2(30)

);

insert into bicycle values(1, null, '自行车', 379.28, '装配');

insert into bicycle values(2, 1, '导向系统', 101.11, '制造');

insert into bicycle values(3, 1, '驱动系统', 159.56, '制造');

insert into bicycle values(4, 1, '其他部分', 118.61, '制造和采购');

insert into bicycle values(5, 2, '车把', 37.28, '制造');

insert into bicycle values(6, 2, '前叉', 24.35, '制造');

insert into bicycle values(7, 2, '前轴', 19.67, '制造');

insert into bicycle values(8, 2, '前轮', 19.81, '制造');

insert into bicycle values(9, 7, '前轴棍', 8.16, '制造');

insert into bicycle values(10, 7, '前轴身', 4.82, '制造');

insert into bicycle values(11, 7, '前轴碗', 6.69, '制造');

insert into bicycle values(12, 10, '前轴管', 1.61, '制造');

insert into bicycle values(13, 10, '前花盘', 3.21, '制造');

insert into bicycle values(14, 3, '脚蹬', 18.99, '制造');

insert into bicycle values(15, 3, '中轴', 25.27, '制造');

insert into bicycle values(16, 3, '链条', 21.65, '制造');

insert into bicycle values(17, 3, '飞轮', 29.12, '制造');

insert into bicycle values(18, 3, '后轴', 31.72, '制造');

insert into bicycle values(19, 3, '后轮', 32.81, '制造');

insert into bicycle values(20, 17, '外套', 9.35, '制造');

insert into bicycle values(21, 17, '平档', 5.82, '制造');

insert into bicycle values(22, 17, '芯子', 5.11, '制造');

insert into bicycle values(23, 17, '千斤', 6.56, '制造');

insert into bicycle values(24, 17, '钢珠', 2.28, '采购');

insert into bicycle values(25, 4, '车架', 81.78, '制造');

insert into bicycle values(26, 4, '车闸', 15.26, '制造');

insert into bicycle values(27, 4, '链罩', 7.10, '采购');

insert into bicycle values(28, 4, '车铃', 4.33, '采购');

insert into bicycle values(29, 4, '车锁', 5.02, '采购');

insert into bicycle values(30, 4, '支架', 5.12, '制造');

6.2

select level,part_id,parent_id,part_name,mp_cost

from bicycle

start with part_id=1

connect by prior part_id = parent_id;

6.3

select level,part_id,parent_id,part_name,mp_cost

from bicycle

start with part_id=1

connect by prior part_id = parent_id

order by level;

6.4

column partName formart A35

column mp_cost formart 9999.99

select level,lpad('',3*level-1)||partname as partName,mp_cost

from bicycle

start with part_id=1

connect by prior part_id=parent_id;

6.5

select level,

lpad(' ',3*level-1)||part_name as partname,

 mp_cost

from bicycle

start with part_id =(

                     select part_id

                     from bicycle

                     where part_name like '%飞轮%')

connect by prior part_id = parent_id;

7.1

 select part-name,

       mp_cost as actualcost

       translate(mp_cost,.12345678,5129837046) as translatedcost

from bicycle;

8.1-

create table sales_fact_2006(

sale_year number(4) not null,

sale_quarter number(1) not null,

sale_month number(2) not null,

sale_book_id varchar(20) not null,

sdale_region varchar(10) not null,

sale _person varchar(20) not null,

sale _amount number(10,2) null,

constraint pk_sale_f2006 primary key(

     sale_year, sale_quarter, sale_month, sale_book_id, sdale_region, sale _person)

);

insert into sales_fact_2006 values(2006,1,1,'ISBN 7-X','北京','赵亦',13526.12);

insert into sales_fact_2006 values(2006,1,2,'ISBN 7-X','北京','钱尔',8213.91);

insert into sales_fact_2006 values(2006,1,3,'ISBN 7-X','北京','孙三',33871.52);

insert into sales_fact_2006 values(2006,2,4,'ISBN 7-X','北京','李斯',22343.8);

insert into sales_fact_2006 values(2006,2,5,'ISBN 7-X','上海','周武',3455.93);

insert into sales_fact_2006 values(2006,2,6,'ISBN 7-X','上海','孙三',23427.72);

insert into sales_fact_2006 values(2006,3,7,'ISBN 7-X','香港','杨琪',897.15);

insert into sales_fact_2006 values(2006,3,8,'ISBN 7-X','香港','钱尔',12345);

insert into sales_fact_2006 values(2006,3,9,'ISBN 7-X','澳门','冯久',37817.12);

insert into sales_fact_2006 values(2006,4,10,'ISBN 7-X','澳门','冯久',6524.1);

insert into sales_fact_2006 values(2006,4,11,'ISBN 7-X','台北','李斯',93415.83);

insert into sales_fact_2006 values(2006,4,12,'ISBN 7-X','台北','孙三',23232.82);

8.2

Select sale_person,

      Sum(sale_amount) as person_amount,

      Sum(sum(sale_amount))

          Over ( order by sale_person rows between unbounded breceding and current row)

From  sales_fact_2006

Group by sale_person

Order by sale_person;

8.3

Select sale_person,

      Sum(sale_amount) as person_amount,

      Sum(sum(sale_amount))

          Over ( order by sale_person rows between unbounded breceding and current row)

From  sales_fact_2006

Where sale_person in(‘赵亦‘, ‘钱尔‘, ‘李斯‘ )

Group by sale_person

Order by sale_person;

六、实验体会和收获

通过此次实验进一步理解SQL语言中的SELECT语句的语法结构,理解各个子句的含义以解决复杂的查询问题。基本掌握SELECT语句的基本语法和子查询和连接查询语句的编写方法。初步掌握聚集函数、GROUP BY、HAVING子句以及ORDER BY子句等的编写方法,还了解层次查询的功能以及适用范围,掌握层次查询的编写方法,及其翻译函数的用途,掌握在查询中使用翻译函数加密数据的方法,也了解分析查询的功能和掌握分析查询的编写方法。但是对于SQL语言我还不是很熟练,我会好好练习。

实验项目名称:  视图、索引和完整性等     实验学时:    3   

同组学生姓名:                         实验地点:   B513  

实验日期:        20##-5-3                      实验成绩:        

批改教师:                           批改时间:        

实验4 视图、索引和完整性等

一、实验目的和要求

1、了解视图的基本概念、种类及各自的特点与作用。

2、理解索引的基本概念及其优缺点。

3、理解修改数据时索引的开销。

4、理解数据完整性的概念及分类。

5、理解同义词和序列的基本概念。

6、掌握在OEM中创建视图、索引、实体完整性、域完整性和参照完整性以及同义词、序列的方法。

7、掌握用PL/SQL语言创建视图、索引、各种约束、同义词和序列的方法。

二、实验设备、环境

设备:奔腾Ⅳ或奔腾Ⅳ以上计算机

环境:WINDOWS 20## SERVER或WINDOWS 20## SERVER、ORACLE 10g中文版

三、实验步骤

1、分析题意,重点分析题目要求并给出解决方法。

2、根据题目要求启动SQL*Plus、iSQL*Plus、OEM等管理工具。

3、按题目要求完成实际操作任务,并将相关文档资料保存在以自己学号命名的文件夹中。

4、提交完成的实验结果。

四、实验内容

1、视图的创建与使用。

(1)创建一个名为cx_employees的视图,只允许查看雇员的编号、姓名、生日、性别和部门的编号。

(2)创建一个名为cx_salary的视图,要求只显示财务部雇员的姓名和薪水情况。

使用视图,查询财务部雇员中姓名为王林的信息。

(3)通过视图向Employees表插入一条信息:雇员编号:510888;姓名:张无忌;出生年月1982年8月23日;性别:男;部门编号:3。

(4)将张无忌从经理办公室转到市场部。

(5)将张无忌从Employees表中删除。

2、创建索引。

(1)对ORCL数据库中的Employees表中的DepartmentID属性上建立一个名为DeptID_index索引,并指定索引的存储特征值,数据库中的行以升序保存,将索引建立在用户默认的表空间里。

(2)在Employees表的sex列上建一个位图索引。

(3)删除这两个索引。

3、实现域完整性。

(1)为ORCL数据库的Employees表的PhoneNumber建立CHECK约束要求输入值为0-9数字。

(2)为ORCL数据库的SALARY表中增加一个约束,要求INCOME的值不大于4000。

(3)为ORCL数据库的Employees表的sex属性建一个约束要求输入的值只能是男或是女。

4、实现实体完整性。

(1)为Employees表的name和sex属性上建立一个唯一值约束。

5、实现参照完整性。

(1)Salary表的EmployeesID属性上建立外键,参照Employees中的相关属性。

6、同义词

(1)为Scott模式下的DEPT表建立一个公有的同义词,名称不变。

(2)删除创建的同义词。

7、序列

(1)创建一个名为E_TEST的序列,初始值为1,最大值为5000,每次按2增长,不循环使用。

(2)用命令来查询并显示序列的值。

(3)创建一个Test表,表中包含ID,SNAME,SDEPT三个字段,要求ID使用刚刚创建的序列。

五、问题解答及实验结果

1.1

create view cx_employees(employeeid,name,birthday,departmentid)

as

select employeeid,name,birthday,departmentid

 from employees;

1.2

create view cx_salary(name,income,outcome)

as

select name,income,outcome

from employees,salary

where employees.employeeid=salary.employeeid and departmentid=(select departmentid from department where departmentname='财务部');

1.3

  insert into employees values('510888', '张无忌','23-8月-82','1','','','','','3')

  select * from cx_employees

1.4

update cx_employees

set departmentid=5

where name='张无忌';

1.5

 delete

 from employees

where name = '张无忌';

2.1

create index DeptID_index

on Employees(DepartmentID);

2.2

create bitmap index emp_mgr_bmp

on Employees(sex);

2.3

drop  index DeptID_index;

drop index emp_mgr_bmp;

3.1

alter table Employees

add  constraint PhoneNumber

CHECK (PhoneNumber between 0 and 9);

3.2

alter table salary

add constraint income

check (income <= 4000);

3.3

alter table Employees

add constraint sex

check (sex in ('1','0'));

4.1

alter table Employees

add constraint name

unique(name);

alter table Employees

add constraint sex

unique(sex);

5.1

alter table salary

add constraint  EmployeesID

FOREIGN KEY(EMPLOYEEID)REFERENCES Employees(EMPLOYEEID);

6.1

create public synonym DEPT for Scott.DEPT@orcl

6.2

drop public synonym DEPT;

7.1

CREATE SEQUENCE E_TEST

  START WITH 1

  INCREMENT BY 2

  MAXVALUE 5000

  NOCYCLE; 

7.2

select E_TEST.NEXTVAL from DUAL;

7.3

CREATE TABLE Test

(

ID int,

SNAME varchar(10),

SDEPT varchar(20)

);

insert  into Test values(E_TEST.NEXTVAL,'张斌','信息学院')

六、实验体会和收获

在此次实验中,了解了视图的基本概念,学会了如何创建视图和索引,及其如何向视图中插入数据,和更新数据。在实现域的完整性的时候,用alter的sql语言来编写,在写题目的同时也理解数据完整性的概念及分类。在理解同义词和序列的基本概念的基础上,加上参照PPT的过程中完成了SQL语言的编写。但是在序列的查询时,遇到了一些问题,通过老师的帮助,得到了解决。

实验项目名称:       PL/SQL编程            实验学时:    3    

同组学生姓名:                         实验地点:   B513  

实验日期:      20##-5-17                      实验成绩:         

批改教师:                            批改时间:         

实验5 PL/SQL编程

一、实验目的和要求

1、了解变量的分类和使用方法。

2、掌握各种运算符的使用方法。

3、理解PL/SQL集合对象的功能,掌握记录类型、PL/SQL表等创建方法。

4、理解PL/SQL 基本程序结构,掌握控制语句的编写方法。

5、理解游标的属性和用途,能够使用游标的属性定义相应的游标。

6、理解PL/SQL中错误处理技术,能够编写异常处理的程序。

二、实验设备、环境

设备:奔腾Ⅳ或奔腾Ⅳ以上计算机

环境:WINDOWS 20## SERVER或WINDOWS 20## SERVER、ORACLE 10g中文版

三、实验步骤

1、分析题意,重点分析题目要求并给出解决方法。

2、根据题目要求启动SQL*Plus、iSQL*Plus、OEM等管理工具。

3、按题目要求完成实际操作任务,并将相关文档资料保存在以自己学号命名的文件夹中。

4、提交完成的实验结果。

四、实验内容

1、PL/SQL集合(参见教材P219-222)

(1)定义一个名为my_record_type的记录类型,要求包含:name、address、tel三个字段,三个字段的数据类型和employees表中相应的字段的数据类型相同。给三个字段赋值(值分别为:‘李四’、‘江宁弘景大道99号’、‘86-25-86188966 ’)并显示其值。

(2)定义一个名为my_table_type的PL/SQL表类型,使用索引算子给表的变量赋三个值,用count函数计算赋值的个数,并显示结果。

2、游标

(1)定义一个名为my_cursor_par的游标,通过参数来指定职员编号,并显示该编号职员的姓名。

(2)定义一个名为my_cursor的游标,该游标用于查询departments表中的数据,可以使用%found属性来控制游标的循环,显示查询出的结果。

3、条件结构的使用

(1)查询总学分大于40的学生人数。

(2)判断计算机系总学分大于40的人数是否超过80人。

(3)如果“数据库原理”课程的平均成绩高于75分,则显示“平均成绩大于75”,否则显示“平均成绩小于75”。

(4)求ax²+bx+c=0的根。

4、循环结构的使用。

(1)用LOOP_EXIT_END循环结构求10的阶乘。

5、选择和跳转语句。

(1)CASE语句的应用。用CASE语句编写一段程序,课程号为:101,则结果为:计算机基础;课程号为:102,则结果为:程序设计语言,课程号为:206,则结果为:离散数学,课程号为其他值,则结果为:Nothing

(2)设有一表temp(xh char(6),xb char(2),xm…),初始化表temp。

6、错误处理

(1)编写一个除零的异常处理程序。

五、问题解答及实验结果

1.1

set serveroutput on

declare

type my_record_type is record(

name   char(10),

address  char(20),

tel    char(12)

);

l_my_loc my_record_type;

begin

l_my_loc.name:='李四';

l_my_loc.address:='江宁弘景大道99号';

l_my_loc.tel:='86-86188966';

dbms_output.put_line('我的地址是:');

dbms_output.put_line(l_my_loc.name);

dbms_output.put_line(l_my_loc.address);

dbms_output.put_line(l_my_loc.tel);

end;

1.2

set serveroutput on

declare

type my_table_type is table of varchar2(20) index by binary_integer;

l_my_tab my_table_type;

begin

l_my_tab(1):='金陵科技学院';

l_my_tab(2):='校园北区';

dbms_output.put_line('此处有'||l_my_tab.count||'个varchar2变量');

dbms_output.put_line('变量(1)='||l_my_tab(1));

dbms_output.put_line('变量(2)='||l_my_tab(2));

end;

2.1

set serveroutput on

declare

cursor my_cursor_par(id char) is select name from employees where EMPLOYEEID=ID;            

t_name employees.name%type;

begin

  open my_cursor_par('102201');

  loop

    fetch my_cursor_par into t_name;

    exit when my_cursor_par%notfound;

    dbms_output.put_line(t_name);

  end loop;

  close my_cursor_par;

end;

2.2

set serveroutput on

declare

cursor my_cursor is select * from department;

myrecord department%rowtype;

begin

  open my_cursor;

  fetch my_cursor into myrecord;

  while my_cursor%found

  loop

    dbms_output.put_line(myrecord.departmentid||','||myrecord.departmentname||','||myrecord.note);

    fetch my_cursor into myrecord;

  end loop;

  close my_cursor;

end;

3.1

set serveroutput on

declare

student_num number:=0;

begin

for cursor_i in(select * from xs)

loop

if cursor_i.zxf>40 then

student_num:=student_num+1;

end if;

end loop;

dbms_output.put_line('总学分大于40的学生人数为:'||to_char(student_num));

end;

3.2

set serveroutput on

declare

student_num number:=0;

begin

for cursor_i in(select * from xs)

loop

if cursor_i.zxf>40 then

student_num:=student_num+1;

end if;

end loop;

dbms_output.put_line('总学分大于40的学生人数为:'||to_char(student_num));

if student_num>80 then

dbms_output.put_line('总学分大于40的学生的人数大于80个');

end if;

end;

3.3

set serveroutput on

declare

avg_cj number;

begin

select avg(cj) into avg_cj

from xs_kc,kc

where xs_kc.kch=kc.kch and kc.kch='数据库原理';

if avg_cj>75 then

dbms_output.put_line('平均成绩高于75');

elsif avg_cj=75  then

dbms_output.put_line('平均成绩等于75');

else

dbms_output.put_line('平均成绩小于75');

end if;

end;

3.4

set serveroutput on

declare

 a number;

 b number;

 c number;

 x1 number;

 x2 number;

 d number;

 begin

 a:=&a1;

 b:=&b1;

 c:=&c1;

 d:=b*b-4*a*c;

 if a=0 then

 x1:=-c/b;

 dbms_output.put_line('只有一个根:x1='||to_char(x1));

 elsif d<0 then

dbms_output.put_line('有两个根:x1='||to_char(x1)||'x2='||to_char(x2));

end if;

end;

4.1

declare l_loops number:=1;

s number:=1;

begin

dbms_output.put_line('循环开始');

loop

exit when l_loops>10;

dbms_output.put_line('第'||'loops'||'次循环');

s:=s*l_loops;

l_loops:=l_loops+1;

end loop;

dbms_output.put_line(s);

dbms_output.put_line('循环结束');

end;

5.1

set echo off

set define '&'

set verify off

set serveroutput on size 10000

accept num prompt'请输入课程号';

declare kch number :=&num;

begin

 case kch

       when 101 then dbms_output.put_line('计算机基础');

       when 102 then dbms_output.put_line('程序设计语言');

       when 206 then dbms_output.put_line('离散数学');

       else dbms_output.put_line('Nothing');

 end case;

end;

5.2

create table temp(

xh char(6),

xb char(2),

xm char(10));

6.1

set serveroutput on

declare

a number;

b number;

c number;

div_zero_exception execption;

begin

a:=&a1;

b:=&b1;

case b

when 0 then raise div_zero_exception;

else

c:=a/b;

dbms_output.put_line('a/b='||to_char(c));

end case

exception

when div_zero_exception then

dbms_output.put_line('除零的异常处理');

end;

六、实验体会和收获

通过此次的实验,我了解了部分变量的分类及其使用的方法,基本掌握各种运算符的使用方法。基本理解了PL/SQL集合对象的功能,及其的记录类型、PL/SQL表等创建方法。同时还理解了PL/SQL 基本程序结构,同时掌握控制语句的编写方法,也理解游标的属性和用途,能够使用游标的属性定义相应的游标。理解了PL/SQL中错误处理技术,能够编写异常处理的程序。在此次试验中让我知道小细节也要注意,慢慢积累。遇到了一些问题,通过老师的帮助都得到了解决。

实验项目名称:存储过程、函数和程序包的使用 实验学时:    3    

同组学生姓名:                         实验地点:   B513      

实验日期:       2012.05.24                   实验成绩:         

批改教师:                     批改时间:         

实验6 存储过程、函数和程序包的使用

一、实验目的和要求

1、理解过程、函数和程序包的基本概念。

2、理解过程中使用的输入、输出参数。

3、了解函数和过程的区别。

4、掌握储存过程和函数的编写和使用方法。

5、理解程序包的结构。

6、掌握程序包的编写和使用方法。

二、实验设备、环境

设备:奔腾Ⅳ或奔腾Ⅳ以上计算机

环境:WINDOWS 20## SERVER或WINDOWS 20## SERVER、ORACLE 10g中文版

三、实验步骤

1、分析题意,重点分析题目要求并给出解决方法。

2、根据题目要求启动SQL*Plus、iSQL*Plus、OEM等管理工具。

3、按题目要求完成实际操作任务,并将相关文档资料保存在以自己学号命名的文件夹中。

4、提交完成的实验结果。

四、实验内容

1、储存过程的创建

(1)编写一个名为EmployeeAdd的用于添加职员记录的储存过程。

(2)编写一个名为EmployeeUpdate的用于修改职员记录的存储过程。

(3)调用EmployeeAdd存储过程。

(4)调用Employeeupdate存储过程。

2、用户自定义函数

(1)定义一个名为check_id的函数,要求实现如下功能:对于一个给定的DepartmentID值,查询该值在Departments表中是否存在,若存在返回0,否则返回-1。

(2)写一段PL/SQL脚本程序调用上述函数。当向Employees表插入一记录时,首先调用函数CHECK_ID检索该记录的DepartmentID值在表Departments的DepartmentID字段中是否存在对应的值,若存在,则将该记录插入Employees表。

3、程序包的创建

(1)创建名为TEST的包头要求包含第1、2题创建的存储过程和函数。

(2)创建TEST包体

(3)调用该程序包。

五、问题解答及实验结果

1-1

create or replace procedure EmployeeAdd (p_employeeid char,p_name char,p_birthday date,p_sex

number,p_address char,p_zip char,p_phonenumber char,p_emailaddress char,p_departmentid char) as

begin insert into employees values

(p_employeeid,p_name,p_birthday,p_sex,p_address,p_zip,p_phonenumber,p_emailaddress,p_departmentid);

end EmployeeAdd;

1-2

 create procedure EmployeeUpdate(empid char)

 as

 begin

 update employees set phonenumber='1232228' where employeeid=empid;

 end;

1-3

exec EmployeeAdd('21000','张三','12-10月-68','1','北京东路100-2','210002','3321321','','1');

1-4

exec EmployeeUpdate('122356');

2-1

create or replace

function check_id(id char) return number

as

n number;

begin

select departmentid into n from department where departmentid=id;

if n is null then n:=-1;

else n:=0;

end if;

return n;

end;

2-2

declare l_str number;

begin l_str:=CHECK_ID('3');

if l_str = 0 then

insert into employees values('122357','伍','28-3月-66',1,'北京东路100-

2','210001','3321321','','3');

else

dbms_output.put_line('该门不存在');

end if;

end;

3

create or replace package TEST

is

procedure EmployeeAdd(p_employeeid char,p_name char,p_birthday date,p_sex number,p_address

char,p_zip char,p_phonenumber char,p_emailaddress char,p_departmentid char);

procedure Employeeupdate(empid char);

function check_id(id char) return number;

end;

六、实验体会和收获

在此次试验中,基本理解了过程、函数和程序包的基本概念,同时也理解过程中使用的输入、输出参数。基本了解函数和过程的区别。同时基本掌握储存过程和函数的编写和使用方法。在理解程序包的结构的时候,遇到了一些问题,对于程序包的编写和使用方法还是比较欠缺。在此次试验中遇到了一些问题,通过老师和同学的帮助,都得到了解决。

实验项目名称:触发器、安全管理、数据字典视图和审计实验学时:    3  

同组学生姓名:                           实验地点:  B513 

实验日期:        20##-6-1                           实验成绩:       

批改教师:                         批改时间:       

实验7 触发器、安全管理、数据字典视图和审计

一、实验目的和要求

1、了解触发器的特点和作用、理解触发器的组成部分以及触发器的类型。掌握触发器的编写方法。

2、了解数据库安全的基本概念。

3、理解用户与模式的区别。

4、理解权限的基本概念、掌握系统权限和用户权限的创建和使用方法。

5、理解角色的概念以及基于角色的安全特点,掌握创建角色的方法。

6、掌握使用概要文件实现数据库安全性的方法。

7、掌握使用数据字典视图查询有关信息的方法。

8、掌握使用审计跟踪用户对数据库操作的方法。

二、实验设备、环境

设备:奔腾Ⅳ或奔腾Ⅳ以上计算机

环境:WINDOWS 20## SERVER或WINDOWS 20## SERVER、ORACLE 10g中文版

三、实验步骤

1、分析题意,重点分析题目要求并给出解决方法。

2、根据题目要求启动SQL*Plus、iSQL*Plus、OEM等管理工具。

3、按题目要求完成实际操作任务,并将相关文档资料保存在以自己学号命名的文件夹中。

4、提交完成的实验结果。

四、实验内容

1、创建触发器

对于Orcl数据库,表Employees的DepartmentID列与表Departments的DepartmentID列应满足参照完整性规则,即:向Employees表添加一记录时,该记录的DepartmentID值在Departments表中应存在。修改Departments表中DepartmentID字段值时,该字段在Employees表中的对应值也应修改。

(1)删除Departments表中的一个记录时,该记录DepartmentID字段值在Employees表中对应的记录也应删除。对于上述参照完整性规则,在此通过触发器实现。在SQL*Plus或iSQL*Plus编辑窗口中输入该触发器的代码并执行。

(2)向Employees表中插入或修改一个记录时,通过触发器检查记录的值在Departments表中是否存在,若不存在,则取消插入或修改操作。

(3)修改Departments表的DepartmentID字段值时,该字段在Employees表中对应的值也做相应修改。

2、安全管理

(1)用户

在Orcl数据库中创建一个用户MANAGER,授予DBA角色和SYSDBA系统权限,它可以代替system系统用户。

(2)角色

在Orcl数据库中创建一个角色ADMIN,授予DBA角色和SYSDBA系统权限。

(3)概要文件

在Orcl数据库中创建概要文件Orcl_PROFILE  要求用户登录后立即修改口令,口令输入三次后不正确就锁定帐户,锁定时间为5天,将该概要文件分配给用户MANAGER。

3、数据字典视图

查询路线图、目录对象、回收站、约束和注释、索引和群集、抽象数据类型、数据库链接和物化等数据字典视图,了解这些视图分别记录了什么信息。

4、审计

(1)以SYS身份登录到OEM中,起用审计。

(2)使用户ADMIN的所有的更新操作都被审计。

(3)在对XS_KC表的插入、修改和删除的操作都要进行审计。

五、问题解答及实验结果

1-1

create trigger tr_bef_delete_dept

before delete on department

for each row

begin

delete from employees

where departmentid=:old.departmentid;

end;

1-2

create trigger tr_bef_insert_emp

before insert on employees

for each row

declare

depid number;

begin

select count(*) into depid

from department where departmentid=:new.departmentid;

if depid=0 then

raise_application_error(-20001,'部门表中没有该部门,不允许插入数据;');

end if;

end;

1-3

create trigger tr_aft_update_dept

after update on department

for each row

begin

update employees

set departmentid=:new.departmentid

where departmentid=:old.departmentid;

end;

2-1

create user u15

identified by u15;

grant create session,dba

to u15;

2-2

create role r15

identified by r15;

grant create session,dba to r15;

2-3

CREATE PROFILE "S08JBII15" LIMIT CPU_PER_SESSION DEFAULT

CPU_PER_CALL DEFAULT

CONNECT_TIME DEFAULT

IDLE_TIME DEFAULT

SESSIONS_PER_USER DEFAULT

LOGICAL_READS_PER_SESSION DEFAULT

LOGICAL_READS_PER_CALL DEFAULT

PRIVATE_SGA DEFAULT

COMPOSITE_LIMIT DEFAULT

PASSWORD_LIFE_TIME DEFAULT

PASSWORD_GRACE_TIME DEFAULT

PASSWORD_REUSE_MAX DEFAULT

PASSWORD_REUSE_TIME DEFAULT

PASSWORD_LOCK_TIME 5

FAILED_LOGIN_ATTEMPTS 3

PASSWORD_VERIFY_FUNCTION DEFAULT

3、路线图:column table_name format a30

column comments format a40 word_wrapped

select table_name,comments

from dict

where table_name like '%VIEWS%'

order by table_name;

4、(1) conn sys/zhao as sysdba

 ALTER SYSTEM SET audit_trail=DB SCOPE=SPFILE;

(2)AUDIT UPDATE TABLE BY uS08JBII15

(3)audit insert,update,delete on XS_KC;

六、实验体会和收获

通过此次实验,不仅了解触发器的特点和作用,还理解触发器的组成部分以及触发器的类型。同时基本掌握了触发器的编写方法。也了解了数据库安全的基本概念,还理解用户与模式的区别。对于权限的基本概念、系统权限和用户权限的创建和使用方法也有了了解。

在理解角色的概念以及基于角色的安全特点的基础上,掌握了创建角色的方法及其使用概要文件实现数据库安全性的方法。也掌握了使用数据字典视图查询有关信息的方法。基本掌握了使用审计跟踪用户对数据库操作的方法。在此次实验中遇到了一些问题,在老师和同学的帮助下得到了解决。

实验项目名称:数据库备份与恢复、数据闪回技术和事务处理 实验学时:    3     

同组学生姓名:                         实验地点:   B513      

实验日期:          20##-6-8                    实验成绩:         

批改教师:                    批改时间:         

实验8 数据库备份与恢复、数据闪回技术和事务处理

一、实验目的和要求

1、理解数据库备份的意义、数据库逻辑备份与物理备份的区别以及各自适用的范围。

2、掌握数据库逻辑备份与恢复的方法。

3、掌握数据库物理备份中脱机备份(冷备份)以及恢复的方法。

4、掌握数据库物理备份中的联机备份(热备份)以及恢复的方法。

5、理解Oracle的数据库闪回技术适用范围及局限性,在闪回过程中基于SCN的闪回技术和基于时间戳的闪回技术。

6、掌握使用SQL *Plus命令闪回表、闪回删除和闪回数据库的方法

7、理解事务的概念及特性,事务的提交与回滚,保存点技术。掌握事务的完全回退和回退到保存点的方法。

二、实验设备、环境

设备:奔腾Ⅳ或奔腾Ⅳ以上计算机

环境:WINDOWS 20## SERVER或WINDOWS 20## SERVER、ORACLE 10g中文版

三、实验步骤

1、分析题意,重点分析题目要求并给出解决方法。

2、根据题目要求启动SQL*Plus、iSQL*Plus、OEM等管理工具。

3、按题目要求完成实际操作任务,并将相关文档资料保存在以自己学号命名的文件夹中。

4、提交完成的实验结果。

四、实验内容

1、数据库的逻辑备份与恢复

用EXP命令导出Orcl数据库中的Departments表。以mybak.dmp文件名存储在F盘的根目录下。然后删除该表中的数据。用IMP命令导入Departments表,查看表中的数据是否已经恢复。

2、数据库的物理备份

(1)冷备份

在F盘的oracle目录下,查找到Orcl子目录,将该目录中的数据、日志以及控制文件拷贝到E盘的BAK目录下(需要事先创建好)。然后删除Orcl子目录下的部分数据文件。启动数据库,观察其结果。

将E盘的BAK目录下的相应数据文件拷回到Orcl子目录下,启动数据库,观察其结果。

(2)热备份

首先将数据库改变为归档模式。

将ADMIN模式下的MYTS表空间进行备份。将ADMIN下的数据文件例如MYTE01数据文件拷贝到TEMP目录下。

将当前的联机日志进行归档和切换。(使用ALTER SYSTEM archive log CURRENT 命令和ALTER SYSTEM SWITCH LOG,FILE)

关闭数据库。将MYTS01数据文件删除。然后再启动数据库,观察出错信息。将错的文件脱机并删除掉。

打开数据库。此时将备份的文件拷贝到原来的路径下。恢复出错的文件,将该文件设置为联机。在察看结果,看是否已经恢复。

3、数据库的闪回技术

(1)闪回查询

(2)闪回表(注意:闪回表事先要进行允许行迁移的准备)

(3)闪回删除

4、事务管理

(1)回退全部事务

(2)利用保存点技术将事务回退的保存点处。

五、问题解答及实验结果

(1)导出

SQL> select *

  2  from departments;

DEP DEPARTMENTNAME       NOTE

--- -------------------------------------- ----------------

1   财务部

2   人力资源部

3   经理办公室

4   研发部

5   市场部

SQL> drop table departments;

表已删除。

SQL> select *

  2  from departments;

from departments

     *

第 2 行出现错误:

ORA-00942: 表或视图不存在

(2)导入

SQL> select *

  2  from departments;

DEP DEPARTMENTNAME       NOTE

--- -------------------- ----------------

1   财务部

2   人力资源部

3   经理办公室

4   研发部

5   市场部

2、物理备份

(1)冷备份

--查询控制文件所在的目录

set pagesize 30

col name for a60

select name from v$controlfile;

NAME

-------------------------------------------------------------------------------------

F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL01.CTL

F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL02.CTL

F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL03.CTL

--查询日志文件所在的目录

col member for a60

select member from v$logfile;

MEMBER

-----------------------------------------------------------------------------------

F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG

F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG

F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG

--查询所有数据文件所在的目录和文件名

col file_name for a60

set linesize 120

FILE_NAME                                                    TABLESPACE_NAME

----------------------------------------------------------------------------------------------- ----------------------------

F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF         USERS

F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF       SYSAUX

F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF      UNDOTBS1

F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF        SYSTEM

F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF       EXAMPLE

F:\DISK2\ORCL\PIONEER_DATA.DBF                               PIONEER_DATA

F:\DISK4\ORCL\PIONEER_INDX.DBF                               PIONEER_INDX

--查询参数文件所在的目录

show parameter pfile

NAME   TYPE        VALUE

----------- ------------------- ----------- -------------------------------------------------------------------------------

spfile    string      F:\ORACLE\PRODUCT\10.2.0\DB_1\ DBS\SPFILEORCL.ORA

--创建备份文件存放的目录

SQL>HOST --该命令从sqlplus窗口转换到dos窗口

f:\>md backup

f:\>cd backup

f:\backup>md database

f:\backup>md dbs

f:\backup>md disk2

f:\backup>md disk4

f:\backup>dir

--创建存储脚本文件的目录

f:\oracle>md mgt

--编写冷备份脚本文件:

CONNECT SYS/ORCL123 AS SYSDBA

SHUTDOWN IMMEDIATE

HOST COPY F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\*.* F:\backup\

HOST COPY F:\ORACLE\PRODUCT\10.2.0\db_1\dbs\SPFILEORCL.ORA F:\backup\dbs

HOST COPY F:\ORACLE\PRODUCT\10.2.0\db_1\database\pwdorcl.ora F:\dackup\database

HOST COPY F:\disk2\orcl\PINOEER_DATA.DBF F:\backup\disk2

HOST COPY F:\disk4\orcl\PINOEER_INDX.DBF F:\backup\disk4

STARTUP

将以上脚本保存在f:\oracle\mgt\coolbak.sql

--冷备份的实施,运行coolbak.sql

SQL>@F:\oracle\mgt\coolbak

--查看backup目录下的所有文件

SQL>HOST

F:\oracle\product\10.2.0\db_1\bin> cd f:\backup

f:\backup>dir

模拟数据损害,删除数据文件后,用下面的命令进行恢复。

SQL>connect sys/orcl123 as sysdba

SQL>shutdown immediate

SQL>HOST COPY F:\backup\*.* F:\oracle\product\10.2.0\oradata\orcl\

SQL>HOST COPY F:\backup\dbs\SPFILEORCL.ORA F:\oracle\product\10.2.0\dbackup_1\dbs\

SQL>HOST COPY F:\backup\database\PWDORCL.ORA F:\oracle\product\10.2.0\db_1\database\

SQL>HOST COPY F:\backup\disk2\PIONEER_DATA.DBF F:\DISK2\ORCL

SQL>HOST COPY F:\backup\disk4\PIONEER_INEX.DBF F:\DISK4\ORCL

SQL>STARTUP

(2)热备份

SQL> archive log list

数据库日志模式    非存档模式

自动存档          禁用

存档终点            USE_DB_RECOVERY_FILE_DEST

最早的联机日志序列     11

当前日志序列           13

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startup mount

ORACLE 例程已经启动。

Total System Global Area  209715200 bytes

Fixed Size                  1248140 bytes

Variable Size              88081524 bytes

Database Buffers          117440512 bytes

Redo Buffers                2945024 bytes

数据库装载完毕。

SQL> alter database archivelog;

数据库已更改。

SQL> alter database open;

数据库已更改。

SQL> archive log list

数据库日志模式       存档模式

自动存档             启用

存档终点             USE_DB_RECOVERY_FILE_DEST

最早的联机日志序列   31

下一个存档日志序列   33

当前日志序列         33

SQL> alter tablespace MYTS begin backup;

表空间已更改。

SQL> HOST COPY F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\MYTS01 F:\BACKUP;

SQL> ALTER TABLESPACE MYTS END BACKUP;

表空间已更改。

SQL> SHUTDOWN IMMEDIATE;

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

模拟数据库损坏,删除MYTS01数据文件。

SQL> STARTUP

ORACLE 例程已经启动。

Total System Global Area  209715200 bytes

Fixed Size                  1248140 bytes

Variable Size             130024564 bytes

Database Buffers           75497472 bytes

Redo Buffers                2945024 bytes

数据库装载完毕。

ORA-01157: 无法标识/锁定数据文件 8 - 请参阅 DBWR 跟踪文件

ORA-01110: 数据文件 8: 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\MYTS01'

SQL> alter database datafile 8 offline;

数据库已更改。

SQL> alter database open;

数据库已更改。

SQL> select file#,status from v$datafile;

     FILE# STATUS

---------- -------

         1 SYSTEM

         2 ONLINE

         3 ONLINE

         4 ONLINE

         5 ONLINE

         6 ONLINE

         7 ONLINE

         8 OFFLINE

已选择8行。

SQL> col error for a20

SQL> select * from v$recover_file;

 FILE# ONLINE  ONLINE_ ERROR                   CHANGE#  TIME

---------- ------- ------- -------------------- ---------- ---------------------------------  ------

     8 OFFLINE OFFLINE FILE NOT FOUND                0

SQL>HOST COPY  F:\BACKUP\MYTS01 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\

SQL> RECOVER DATAFILE 8

完成介质恢复。

SQL> ALTER TABLESPACE MYTS ONLINE;

表空间已更改。

SQL> SELECT FILE#,STATUS FROM V$DATAFILE;

     FILE# STATUS

---------- ---------

         1 SYSTEM

         2 ONLINE

         3 ONLINE

         4 ONLINE

         5 ONLINE

         6 ONLINE

         7 ONLINE

         8 ONLINE

已选择8行。

SQL> CONNECT ADMIN/ADMIN123

已连接。

SQL> SELECT COUNT(*)

  2  FROM SALES;

  COUNT(*)

----------

   918843

SQL> SELECT COUNT(*)

  2  FROM customers;

  COUNT(*)

----------

     55500

3、数据库闪回技术

(1)闪回查询

SQL> CONNECT SYS/ORCL123 AS SYSDBA

已连接。

SQL> grant execute on dbms_flashback to scott;

授权成功。

SQL> SELECT TO_CHAR(sysdate,'yyyy-mm-dd hh24:mi:ss')current_time from dual;

CURRENT_TIME

-------------------

20##-06-05 17:08:53

SQL> conn scott/tiger;

已连接。

SQL> SELECT ENAME,SAL FROM EMP WHERE EMPNO=7788;

ENAME  SAL

---------- ----------

SCOTT   3000

SQL> VARIABLE scn_now NUMBER

SQL> EXECUTE :scn_now :=dbms_flashback.get_system_change_number; --获取SCN的值。

PL/SQL 过程已成功完成。

SQL> PRINT :scn_now

   SCN_NOW

----------

   1297964

SQL> SET TIME ON

17:10:50 SQL> EXECUTE dbms_flashback.disable;

PL/SQL 过程已成功完成。

17:11:06 SQL> UPDATE EMP SET SAL=4000 WHERE EMPNO=7788;

已更新 1 行。

17:11:28 SQL> CONN SCOTT/TIGER

已连接。

17:11:49 SQL> EXECUTE :scn_now:=dbms_flashback.get_system_change_number;

PL/SQL 过程已成功完成。

17:12:16 SQL> PRINT :SCN_NOW

   SCN_NOW

-----------------

   1298061

17:12:33 SQL> EXECUT dbms_flashback.enable_at_system_change_number(:scn_now);

PL/SQL 过程已成功完成。

17:13:24 SQL> SELECT ENAME,SAL FROM EMP WHERE EMPNO=7788;

ENAME  SAL

----------  ----------

SCOTT   4000

17:13:48 SQL> execute dbms_flashback.disable;

PL/SQL 过程已成功完成。

17:14:14 SQL> execute dbms_flashback.enable_at_system_change_number(1297964);

PL/SQL 过程已成功完成。

17:15:13 SQL> SELECT EMPNO,SAL FROM EMP WHERE EMPNO=7788;

     EMPNO        SAL

---------- ----------

      7788       3000

17:15:34 SQL> EXECUTE dbms_flashback.disable;

PL/SQL 过程已成功完成。

17:16:07 SQL> UPDATE EMP SET SAL=4500 WHERE EMPNO=7788;

已更新 1 行。

17:16:27 SQL> COMMIT;

提交完成。

17:17:01SQL>EXECUTE dbms_flashback.enable_at_time( to_date('20##-06-05 17:13:48','yyyy-mm-dd hh24:mi:ss'));

PL/SQL 过程已成功完成。

17:19:09 SQL> SELECT EMPNO,SAL FROM EMP WHERE EMPNO=7788;

     EMPNO        SAL

---------- ----------

      7788       4000

17:19:49 SQL> EXECUTE dbms_flashback.disable;

PL/SQL 过程已成功完成。

17:20:16 SQL> EXECUTE dbms_flashback.disable;

PL/SQL 过程已成功完成。

17:20:34 SQL> SET TIME OFF;

SQL>

(2)闪回表

一、创建闪回表的测试条件(创建一个表空间、一个用户,并给用户授权)

SQL> CREATE TABLESPACE loc_tbs01

  2  DATAFILE 'e:\loc_tas01_1.dbf' SIZE 5M

  3  EXTENT MANAGEMENT LOCAL;

表空间已创建。

SQL> CREATE USER myuser1 IDENTIFIED BY user1pswd

  2  DEFAULT TABLESPACE loc_tbs01

  3  TEMPORARY TABLESPACE temp

  4  QUOTA 2M ON loc_tbs01;

用户已创建。

SQL> GRANT connect,resource TO myuser1;

授权成功。

SQL> GRANT execute ON dbms_flashback to myuser1;

授权成功。

二、模拟用户操作

SQL> connect myuser1/user1pswd;

已连接。

 CREATE TABLE Department

     (DeptNo CHAR(2) NOT NULL,

      Name  VARCHAR2(20) NOT NULL,

      Address VARCHAR2(30),

      CONSTRAINT PK_DepNO PRIMARY KEY (DeptNo) VALIDATE);

表已创建。

SQL> CREATE TABLE Student

     (StuNo VARCHAR2(12) NOT NULL,

     Name  VARCHAR2(15) NOT NULL,

     Sex CHAR(1),

     DeptNo CHAR(2),

     CONSTRAINT PK_StuNo PRIMARY KEY (StuNo) VALIDATE,

     CONSTRAINT FK_DeptNO FOREIGN KEY (DeptNo) REFERENCES Department(DeptNo) VALIDATE);

表已创建。

SQL> COMMIT;

提交完成。

SQL> CREATE UNIQUE INDEX idx_Department ON Department(Name);

索引已创建。

SQL> CREATE INDEX idx_Student_name ON Student(Name);

索引已创建。

SQL> SELECT index_name,table_name,uniqueness FROM user_indexes;

INDEX_NAME                     TABLE_NAME                     UNIQUENES

------------------------------ ------------------------------ ---------

PK_DEPNO                       DEPARTMENT                     UNIQUE

IDX_DEPARTMENT                 DEPARTMENT                     UNIQUE

PK_STUNO                       STUDENT                        UNIQUE

IDX_STUDENT_NAME               STUDENT                        NONUNIQUE

SQL> COMMIT;

--注意:先往Demartment表中插入数据,然后再向Student表插入数据,想一下为什么?

SQL>  INSERT INTO Department

 VALUES('01','计算机系','1号楼');

INSERT INTO Department

 VALUES('02','自动控制系','2号楼');

INSERT INTO Department

 VALUES('03','电子技术系','3号楼');

SQL>INSERT INTO Student

  VALUES('20060302001','jack','1','03');

INSERT INTO Student

  VALUES('20060302002','smith','1','03');

INSERT INTO Student

  VALUES('20060302003','Iucy','0','03');

SQL> COMMIT;

三、采用基于时间点闪回表

SQL> VARIABLE scn_now number

SQL> EXECUTE :scn_now :=dbms_flashback.get_system_change_number; --获取SCN

PL/SQL 过程已成功完成。

SQL> PRINT scn_now

   SCN_NOW

----------

   1299435

SQL> ALTER TABLE Department  ENABLE ROW MOVEMENT;

表已更改。

SQL> ALTER TABLE Student  ENABLE ROW MOVEMENT;

表已更改。

SQL> SELECT TO_CHAR(sysdate,'yyyy-mm-dd hh24:mi:ss') CURRENT_TIME FROM dual;

CURRENT_TIME

-------------------

20##-06-05 17:42:41

SQL> TRUNCATE TABLE Student;

表被截断。

SQL> DROP INDEX idx_Department;

索引已删除。

SQL> DELETE FROM Department;

已删除3行。

SQL>  COMMIT;

提交完成。

SQL> FLASHBACK TABLE Student TO TIMESTAMP to_timestamp('20##-06-05 17:42:41','yyyy-mm-dd hh24:mi:ss');

FLASHBACK TABLE Student TO TIMESTAMP to_timestamp('20##-06-05 17:42:41','yyyy-mm-dd hh24:mi:ss')

                *

第 1 行出现错误:

ORA-01466: 无法读取数据 - 表定义已更改  --用TRUNCATE 命令截断的表不能闪回

SQL> FLASHBACK TABLE Department TO TIMESTAMP to_timestamp('20##-06-05 17:42:41','yyyy-mm-dd hh24:mi:ss');

闪回完成。     --闪回了Department表中的数据

SQL> COMMIT;

提交完成。

SQL> SELECT * FROM Student;

未选定行

SQL> SELECT * FROM Department;

DE NAME                 ADDRESS

-- -------------------- ------------------------------

01 计算机系             1号楼

02 自动控制系           2号楼

03 电子技术系           3号楼

SQL> SELECT index_name,table_name,uniqueness FROM user_indexes;

INDEX_NAME                     TABLE_NAME                     UNIQUENES

------------------------------ ------------------------------ ---------

PK_STUNO                       STUDENT                        UNIQUE

IDX_STUDENT_NAME               STUDENT                        NONUNIQUE

PK_DEPNO                       DEPARTMENT                     UNIQUE

--虽然闪回了Department表中的数据但不能闪回单独删除的索引。

四、禁用行移动功能

SQL> ALTER TABLE Department  ENABLE ROW MOVEMENT;

表已更改。

SQL> ALTER TABLE Student  ENABLE ROW MOVEMENT;

表已更改。

(3)闪回删除

一、将测试环境恢复到初始状态

--用DROP TABLE TABLE_name CASCADE CONSTRAINT 命令删除表及其索引然后重新创建

SQL> DROP TABLE Student CASCADE CONSTRAINT;

表已删除。

SQL> DROP TABLE Department CASCADE CONSTRAINT;

表已删除。

--重新创建表

 CREATE TABLE Department

 (DeptNo CHAR(2) NOT NULL,

  Name  VARCHAR2(20) NOT NULL,

  Address VARCHAR2(30),

  CONSTRAINT PK_DepNO PRIMARY KEY (DeptNo) VALIDATE);

表已创建。

 CREATE TABLE Student

   (StuNo VARCHAR2(12) NOT NULL,

   Name  VARCHAR2(15) NOT NULL,

   Sex CHAR(1),

   DeptNo CHAR(2),

   CONSTRAINT PK_StuNo PRIMARY KEY (StuNo) VALIDATE,

   CONSTRAINT FK_DeptNO2 FOREIGN KEY (DeptNo) REFERENCES Department(DeptNo) VALIDATE);

表已创建。

SQL> COMMIT;

提交完成。

SQL> CREATE UNIQUE INDEX idx_Department ON Department(Name);

索引已创建。

SQL> CREATE INDEX idx_Student_name ON Student(Name);

索引已创建。

--向Department表插入数据

INSERT INTO Department VALUES('01','计算机系','1号楼');

INSERT INTO Department VALUES('02','自动控制系','2号楼');

INSERT INTO Department VALUES('03','电子技术系','3号楼');

--向Student表插入数据

INSERT INTO Student

VALUES('20090601001','jack','1','03');

INSERT INTO Student

VALUES('20090601002','smith','1','03');

INSERT INTO Student

VALUES('20090601003','Iucy','0','03');

二、创建一个触发器

 CREATE OR REPLACE TRIGGER tr_Student_ActionTime

 BEFORE insert OR update OR delete ON Student

 BEGIN

  IF (TO_CHAR(sysdate,'DAY') IN ('星期六','星期天'))

    OR (TO_CHAR(sysdate,'HH24') NOT BETWEEN 8 AND 18 ) THEN

    RAISE_APPLICATION_ERROR(-20001,'不是上班时间,不能修改Student表');

  END IF;

END;

/

触发器已创建

三、清除回收站,查询删除表之前的表、索引、触发器的信息。

--清空回收站内容

SQL> PURGE RECYCLEBIN;

回收站已清空。

SQL> SELECT table_name,tablespace_name FROM user_tables;

TABLE_NAME                     TABLESPACE_NAME

------------------------------ ------------------------------

STUDENT                        LOC_TBS01

DEPARTMENT                     LOC_TBS01

SYS_TEMP_FBT

SQL> SELECT index_name,table_name,uniqueness FROM user_indexes ORDER BY table_name;

INDEX_NAME                     TABLE_NAME                     UNIQUENES

------------------------------ ------------------------------ ---------

PK_DEPNO                       DEPARTMENT                     UNIQUE

IDX_DEPARTMENT                 DEPARTMENT                     UNIQUE

PK_STUNO                       STUDENT                        UNIQUE

IDX_STUDENT_NAME               STUDENT                        NONUNIQUE

SQL> SELECT trigger_name,trigger_type,table_name FROM user_triggers;

TRIGGER_NAME                   TRIGGER_TYPE     TABLE_NAME

------------------------------ ---------------- --------------------------------------------------

TR_STUDENT_ACTIONTIME       BEFORE STATEMENT  STUDENT

四、模拟用户进行数据库操作,删除Student表和Department表

SQL> DROP TABLE Student CASCADE CONSTRAINT;

表已删除。

SQL> DROP TABLE Department CASCADE CONSTRAINT;

表已删除。

五、查看删除表以后的效果

SQL> desc user_recyclebin;

名称                       是否为空? 类型

 ----------------------------------------- -------- ----------------------------

 OBJECT_NAME             NOT NULL VARCHAR2(30)

 ORIGINAL_NAME                     VARCHAR2(32)

 OPERATION                           VARCHAR2(9)

 TYPE                                 VARCHAR2(25)

 TS_NAME                             VARCHAR2(30)

 CREATETIME                          VARCHAR2(19)

 DROPTIME                            VARCHAR2(19)

 DROPSCN                             NUMBER

 PARTITION_NAME                     VARCHAR2(32)

 CAN_UNDROP                         VARCHAR2(3)

 CAN_PURGE                           VARCHAR2(3)

 RELATED                    NOT NULL NUMBER

 BASE_OBJECT                NOT NULL NUMBER

 PURGE_OBJECT               NOT NULL NUMBER

 SPACE                                  NUMBER

SQL> SET pagesize 40 linesize 120 --设置页面的相关参数

SQL> SELECT object_name,original_name,type,droptime,dropscn

     FROM user_recyclebin

     ORDER BY type;

OBJECT_NAME                     ORIGINAL_NAME   TYPE      DROPTIME       DROPSCN

---------------------------------------------------- --------------------------  ------------   -----------------------  ---------------

BIN$Y45MPdicTsiziSrIP7obzA==$0      PK_EMP          INDEX    20##-06-05:18:55:14   1303894

BIN$AjwfyOGlTo+WuwuYGF63Mw==$0  PK_DEPT        INDEX    20##-06-05:19:04:25    1304387

BIN$XqepipUrTleQ/2rRXCmuAA==$0    DEPARTMENTS   TABLE   20##-06-05:19:04:25   1304391

BIN$RPTru9OXSmeOzHPv+DC7mg==$0  Student          TABLE   20##-06-05:18:55:14   1303898

说明:OBJECT_NAME--回收站中的对象名

      ORIGINAL_NAME--原来的对象名

      DROPSCN--删除时的系统改变编号

六、闪回删除表

SQL> FLASHBACK TABLE Department TO BEFORE DROP;

闪回完成。

SQL>FLASHBACK TABLE Student TO BEFORE DROP;

闪回完成。

SQL>select * from Department;

SQL>select * from Student;

4、事务管理

(1)回退事务

SQL> set linesize 120

SQL> /

EMPNO ENAME   JOB   MGR    HIREDATE   SAL       COMM     DEPTNO

---------- ---------- --------------- ---------- -------------- ---------- ---------- -----------  ----------------

 7788 SCOTT ANALYST   7566    19-4月 -87   4500                    20

SQL> update emp

  2  set sal=3000;

已更新14行。

SQL> rollback;

回退已完成。

SQL> select empno,sal

  2  from emp;

     EMPNO        SAL

---------- ----------

      7369        800

      7499       1600

      7521       1250

      7566       2975

      7654       1250

      7698       2850

      7782       2450

      7788       4500

      7839       5000

      7844       1500

      7876       1100

     EMPNO        SAL

---------- ----------

      7900        950

      7902       3000

      7934       1300

已选择14行

六、实验体会和收获   

通过此次实验,理解了数据库备份的意义以及如何对数据库逻辑备份与物理备份,也知道了他们的区别以及各自适用的范围。同时也掌握数据库逻辑备份与恢复的方法。对于数据库物理备份中脱机备份(冷备份)以及恢复的方法也有了了解。及其数据库物理备份中的联机备份(热备份)以及恢复的方法。理解了Oracle的数据库闪回技术适用范围及局限性,在闪回过程中基于SCN的闪回技术和基于时间戳的闪回技术。还基本掌握了使用SQL *Plus命令闪回表、闪回删除和闪回数据库的方法。也理解了事务的概念及特性,事务的提交与回滚,保存点技术,还掌握事务的完全回退和回退到保存点的方法。在此次实验中,没有能在数据服务器上运行,不过通过看了老师发的资料,有了一定的了解。

更多相关推荐:
数据库实验报告——

实验一SQLServer基本使用与数据定义一实验目的1掌握企业管理器及查询的定义方法使用方法2熟悉数据库建模及ER图的画法3掌握SQLServer中数据库及数据表的建立与管理方法4掌握数据的导入导出及数据库备份...

数据库实验报告

实验一SQLServer基本使用与数据定义一实验目的1掌握服务管理器企业管理器及查询分析器基本使用方法2熟悉数据库建模及ER图的画法3掌握SQLServer中数据库及数据表的建立与管理方法4掌握数据的导入导出及...

数据库实验报告(SQL)

SQLServer实验报告学号姓名专业信息管理与信息系统目录实训一数据库的基本操作实训二表实训三数据完整性实训四索引实训五数据查询实训六视图实训七TransactSQL程序设计实训八存储过程实训九触发器实训十S...

数据库设计实验报告

HEFEIUNIVERSITY数据库设计报告题目产品销售系统系别电子信息与电气工程系班级09级电气信息类5班学号0905075034姓名黄张祥指导老师方小红完成时间20xx510目录1问题描述311背景312数...

数据库实验报告范本

重庆大学经济与工商管理学院实验报告课程名称数据库原理及应用实验学期20xx年至20xx年第2学期学生所在学院经济与工商管理学院年级20xx专业班级电子商务01班学生姓名kcy学号指导教师签名实验最终成绩经管学院...

数据库实验报告

实验二数据库的简单查询连接查询组合查询和统计查询一实验目的1使用SQLSever查询分析器的使用方法2加深TransatSQL语言的查询语句的理解3熟练掌握简单表的数据查询数据排列和数据连接查询的操作方法4熟练...

SQL数据库实验报告

数据库系统及应用实验报告设计课题SQL20xx数据库安装及数据库建立专业班级山东大学通信二班小组成员王指导教师设计时间20xx12121题目一课程目的1学习安装SQLServer20xx2学习使用SQLServ...

数据库实验报告

数据库实验报告组长组员班级指导教师组长主要任务1分析题意画出ER图将ER图转换为关系模式并进行模式优化2SQLServer20xx环境下编写SQL代码创建视图触发器存储过程和游标组员主要任务1根据优化后的关系模...

数据库实验报告

实验报告五游标存储过程与触发器一实验目的掌握使用TSQL实现游标存储过程和触发器的创建使用方法二实验内容在实验一实验二创建的表中用TSQL语句完成以下内容1使用游标实现将SC表中及格的选课信息输出usestud...

数据库实验报告1

河北科技大学实验报告级专业班学号年月日姓名同组人指导教师实验名称数据定义数据操纵语言成绩实验类型批阅教师一实验目的熟悉SQLServer上机环境以及SQLServer客户端的配置熟练掌握和使用DDL语言建立修改...

数据库实验报告

实验内容与要求请有选择地实践以下各题1基于教学管理数据库jxgl使用SQL的查询语句表达下列查询检索年龄大于23岁的男学生的学号和姓名SELECTSnoSnameFROMStudentWHERESsex男AND...

数据库实验报告

数据库实验报告实验名称数据库查询操作实验目的熟悉数据库查询掌握SQL查询语句的使用方法实验环境SQLServer20xx实验内容及结果1检索供应零件给编号为J1的工程的供应商编号SNO2检索供应零件给工程J1且...

数据库实验报告(30篇)