数据库原理及应用A实验指导书1118.docx
- 文档编号:17984754
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:50
- 大小:317.44KB
数据库原理及应用A实验指导书1118.docx
《数据库原理及应用A实验指导书1118.docx》由会员分享,可在线阅读,更多相关《数据库原理及应用A实验指导书1118.docx(50页珍藏版)》请在冰点文库上搜索。
数据库原理及应用A实验指导书1118
目录
第1章概述3
1.1课程简介3
1.2实验类型3
1.3实验环境选择4
1.3.1Oracle简介4
1.3.2Oracle的体系结构4
第2章实验要求12
2.1实验过程要求12
2.2考核及评分标准12
第3章实验内容14
3.1实验1建立数据库14
3.1.1实验类型14
3.1.2实验目的14
3.1.3基础知识14
3.1.4实验内容14
3.1.5实验步骤15
3.2实验2数据查询19
3.2.1实验类型19
3.2.2实验目的19
3.2.3基础知识19
3.2.4实验内容19
3.2.5实验步骤19
3.3实验3存储过程21
3.3.1实验类型21
3.3.2实验目的21
3.3.3基础知识21
3.3.4实验内容22
3.3.5实验步骤22
3.4实验4触发器23
3.4.1实验类型23
3.4.2实验目的23
3.4.3基础知识23
3.4.4实验内容24
3.4.5实验步骤24
3.5实验5数据库备份与恢复25
3.5.1实验类型25
3.5.2实验目的25
3.5.3基础知识25
3.5.4实验内容26
3.5.5实验步骤26
3.6实验6数据库的安全性28
3.6.1实验类型28
3.6.2实验目的28
3.6.3基础知识28
3.6.4实验内容31
3.6.5实验步骤31
3.7数据库应用系统设计32
3.7.1实验类型32
3.7.2实验目的32
3.7.3实验内容32
附录A实验报告格式35
附录B设计报告格式37
参考文献39
第1章概述
1.1课程简介
随着计算机技术与网络通信技术的发展,数据库技术已成为信息社会中对大量数据进行组织与管理的重要技术手段及软件技术,是网络信息化管理系统的基础。
它不仅有完整的理论基础,而且随着硬件技术与软件技术的飞快发展,它的应用也越来越广泛,为此各高校纷纷开设了《数据库原理及应用》这门专业课,以适应社会信息化的需求。
《数据库原理及应用》这门课程含16学时实践课程。
通过有针对性的实验,能使学生更深层次地理解数据库系统的体系结构,掌握数据库系统的基本理论、技术和方法,培养学生运用所学理论知识,独立解决现实问题的能力。
实验体系见表1.1《数据库原理及应用》实验体系。
表1.1《数据库原理及应用》实验体系
序号
学时
实验名称
实验类型
选题要求
要求完成情况
1
2
实验一建立数据库
(表,完整性,数据更新)
设计型
必做
代码
2
2
实验二数据查询
验证型
必做
代码
3
2
实验三存储过程
设计型
必做
代码
4
2
实验四触发器
设计型
必做
代码
5
2
实验五数据库的备份及恢复
验证型
必做
文字提示
6
2
实验六数据库安全性
验证型
必做
文字提示
7
4
实验七数据库应用系统的设计
设计型
必做
文字提示
1.2实验类型
实验按照性质的不同可以分为:
验证型实验、设计型实验、综合型实验。
本课程涉及到的实验类型为:
验证型实验和设计型实验。
验证型实验
验证型实验作为一种重要的实验形式,主要培养学生对设备、开发工具的操作能力,加深对理论的理解。
实验设计者给出较为详细的实验步骤,旨在减少实验者摸索的过程,争取在较短的时间内掌握基本的操作技术。
验证型实验的实验方法:
1.明确实验题目、实验目的和实验要求;
2.熟悉实验背景知识;
3.按照实验内容进行实验;
4.分析实验结果书写实验报告。
设计型实验
设计型实验可以培养学生的设计能力和独立工作的能力,在基本训练的基础上,提出一些有利于启发思维,有应用价值的实验课题,让学生进行设计型实验。
题目描述,以提出任务、要求和阐述应用背景为宜,而如何解决问题,解决问题的原理、方法和所用仪器等由同学们自行提出并实践。
目的是使学生运用所学的理论知识和实验技能,在实验方法的考虑、使用工具的选择、测试方法的确定等方面受到比较系统的训练。
设计型实验的方法:
1.了解题目要求,明确任务;
2.查阅有关资料,画出必要的原理图,寻求各种解决问题的方法。
从原理、方法和使用工具等多方面提出完成课题任务的依据及实验步骤;
3.做实验;
4.测试结果评价,总结分析并书写设计报告。
1.3实验环境选择
实验环境:
Oracle企业版
1.3.1Oracle简介
Oracle是一种关系型数据库系统。
Oracle是“神谕”的意思,取自OracleBoneInscriptions的第一个单词。
Oracle公司由LarryEllison于1977年创办,目前已发展为全球最大的企业软件公司。
数据库是Oracle的固有强项,至今在世界保持第一的市场占有率。
一、Oracle发展
●1979年Oracle1
●1999年Oracle8i
●2001年Oracle9i
●2003年Oracle10g
●2007年Oracle11g
二、Oracle特点
●高性能:
伸缩性
●安全性:
角色、权限、用户
●并发控制:
表锁定、行锁定
●海量数据:
表空间、空间数据构件、TB级
●数据完整性:
日志、回滚段
●分布式数据库:
数据库连接
1.3.2Oracle的体系结构
为了能使Oracle数据库管理系统满足商业用户的要求,Oracle引入了如图1.1所示的复杂的体系结构。
图1.1Oracle体系结构示意图
体系结构主要包括Oracle服务器(server)(而服务器又是由Oracle实例(instance)和Oracle数据库(database)组成),还包括一些其他的关键文件、用户进程和服务器进程等。
Oracle服务器(server)由Oracle实例(instance)和Oracle数据库(database)两大部分组成。
它是一个数据库管理系统,提供了一致、开放和多样的信息管理的方法和途径。
服务器中的一些结构并不在处理SQL语句时使用,它们是为了改进数据库系统的效率或数据的恢复等而设计的。
一、Oracle服务器(server)
Oracle服务器(server)可以有以下3种安装方式。
1.基于主机方式:
在此种配置下,用户直接在安装了数据库的计算机上登录Oracle数据库。
2.客户端-服务器(client-server)(两层模型)方式:
数据库和客户终端分别安装在不同的计算机上,用户通过网络从个人计算机(客户端)上访问数据库。
3.客户端-应用服务器-服务器(client-applicationserver-server)(三层模型):
用户首先从自己的个人计算机登录应用服务器,再通过应用服务器访问真正的数据库。
二、Oracle实例(instance)
Oracle实例(instance)是一种访问数据库的机制,它是由内存结构和一些后台进程组成的。
它的内存结构也称为系统全局区(systemglobalarea,SGA)。
系统全局区是实例的最基本的部件之一。
实例的后台进程中有5个是必需的,即这5个后台进程中的任何一个没有启动,实例将自动关闭。
这5个后台进程分别是SMON、PMON、DBWR、LGWR和CKPT。
在OCP考题中有时可能会问哪些后台进程是可选的?
除了这5个都是可选的。
实例一启动就分配系统全局区和启动所需的后台进程。
这里应该指出的是,每个实例只能操作一个数据库,而且它不可以操作其他的数据库。
但是反过来是不成立的,因为一个数据库可以同时被几个实例操作(在Oracle集群中)。
系统全局区(SGA)中包含了以下几个内存结构:
共享池(sharedpool)、数据库高速缓冲区(databasebuffercache)、重做日志缓冲区(redologbuffer)和其他的一些结构(如锁和统计数据)等。
三、Oracle数据库
Oracle数据库是数据的一个集合,Oracle把这些数据作为一个完整的单位来处理。
Oracle数据库也叫做物理(外存)结构,它为数据库信息提供了真正的物理存储,它是由以下3类操作系统文件组成的。
1.控制文件(controlfiles):
包含了维护和校验数据库一致性所需的信息。
2.重做日志文件(redologfiles):
包含了当系统崩溃后进行恢复所需记录的变化信息。
3.数据文件(datafiles):
包含了数据库中真正的数据。
四、Oracle其他的关键文件
除了以上3类数据库文件之外,Oracle服务还需要其他的一些文件,这些文件不属于数据库。
其中包括:
初始化参数文件(parameterfiles):
定义了实例的特性,如系统全局区中一些内存结构的大小、DBWR的个数。
密码文件(passwordfiles):
包含了数据库管理员或操作员用户在启动和关闭实例时所需的密码。
虽然Oracle数据库提供了相当完善的安全管理机制,但是在Oracle数据库没有开启时如何验证要启动数据库的人是真正的数据库管理员或操作员呢?
这就是Oracle引入密码文件的原因。
●归档重做日志文件(archivedredologfiles):
是重做日志文件的脱机备份。
在系统崩溃后进行恢复时可能需要这些文件。
五、服务器进程
当Oracle创建一个服务器进程的同时要为该服务器进程分配一个内存区,这个内存区称为程序全局区(programglobalarea,PGA)。
与SGA不同,PGA是一个私有的内存区,是不能共享的,是只属于一个进程的。
它随着进程的创建而被分配,随着进程的终止而被回收。
在专用服务器进程的配置情况下,程序全局区包括了以下结构:
1.排序区(sortarea):
用于处理SQL语句所需的排序。
2.游标状态区(cursorstate):
用于指示会话当前所使用的SQL语句的处理状态。
3.会话信息区(sessioninformation):
包括了会话的用户权限和优化统计信息。
4.堆栈区(stackspace):
包括了其他的会话变量。
如果是共享服务器进程或多线程的配置,以上这些结构除了堆栈区外大部分将存在SGA中。
如果有largepool,它们就会被存在largepool,否则它们就会被存在共享池中。
六、共享池(sharedpool)
SGA中的共享池(sharedpool)是由库高速缓存(librarycache)和数据字典高速缓存(datadictionarycache)两部分所组成。
服务器进程将SQL(也可能是PL/SQL)语句的正文和编译后的代码(parsedcode)以及执行计划都放在共享池(sharedpool)的库高速缓存中。
在进行编译时,服务器进程首先会在共享池中搜索是否有相同的SQL或PL/SQL语句(正文),如果有就不进行任何后续的编译处理,而是直接使用已存在的编译后的代码和执行计划。
提示:
库高速缓存包含了共享SQL区和共享PL/SQL区两部分,它们分别存放SQL和PL/SQL语句以及相关的信息。
要想共享SQL或PL/SQL语句,第一,库高速缓存(librarycache)要足够大,因为只有这样要共享的SQL或PL/SQL语句才不会很快地淘汰出内存。
第二,SQL或PL/SQL语句要是能共享的通用代码(genericcode),因为Oracle是通过比较SQL或PL/SQL语句的正文来决定两个语句是否相同的,只有当两个语句的正文完全相同时Oracle才重用已存在的编译后的代码和执行计划。
当Oracle在执行SQL语句时,服务器进程将把数据文件、表、索引、列、用户和其他的数据对象的定义和权限的信息放入数据字典高速缓存。
如果在这之后,有进程(用户)需要同样的信息,如表和列的定义,那么所有的这些信息将从数据字典高速缓存中获得。
因为以上所说的这些信息都是存在Oracle数据库的数据字典中,这也可能就是该部分内存叫做数据字典高速缓存的原因。
表和列的定义等重用的机会要比SQL语句大,因此为了能达到共享这些信息的目的,数据字典高速缓存应该尽可能设置得大一些。
不过与库高速缓存一样,Oracle并没有给出直接设置数据字典高速缓存大小的方法,只能通过设置共享池的大小来间接地设置数据字典高速缓存的大小。
七、数据库高速缓冲区(databasebuffercache)
如果用户发出了以下的SQL语句:
SELECT*FROMemp,Oracle又是怎样提取数据库中的数据呢?
服务器进程将首先在数据库高速缓冲区(databasebuffercache)中搜寻所需的数据,如果找到了就直接使用而不进行磁盘操作,如果没找到就将进行磁盘操作把数据文件中的数据读入到数据库高速缓冲区中。
从以上的讨论可知,为了能够共享数据库中的数据,数据库高速缓冲区要足够的大,因为这样那些可以共享的数据才不会被很快地淘汰出内存。
Oracle也是使用一个叫做LRU(leastrecentlyused)的队列(list)或算法(algorithm)来实现对数据库高速缓冲区的管理。
可以使用参数文件中的DB_BLOCK_SIZE和DB_BLOCK_BUFFERS两个参数来设置数据库高速缓冲区的大小。
其中DB_BLOCK_SIZE为Oracle数据块(内存缓冲区)的大小,在Oracle数据库中内存和外存的数据块的大小是相同的。
DB_BLOCK_BUFFERS为内存缓冲区的个数。
数据库高速缓冲区大小为这两个参数的乘积。
但是DB_BLOCK_SIZE的值是在创建数据库时设定的,如果要改变该参数的值一般需要重建数据库。
因此多数情况下只能通过改变DB_BLOCK_BUFFERS的值来调整数据库高速缓冲区大小。
但一定得重新启动Oracle数据库。
八、重做日志缓冲区(redologbuffer)
从理论上来讲,如果数据库不会崩溃,根本没有必要引入重做日志缓冲区(redologbuffer)。
引入重做日志缓冲区的主要目的就是数据的恢复。
Oracle在使用任何DML或DDL操作改变数据之前都将恢复所需的信息,即在写数据库高速缓冲区之前,先写入重做日志缓冲区。
与执行查询语句有所不同,Oracle在执行DML语句时只有编译(parse)和执行(execute)两个阶段。
以下是Oracle执行UPDATE语句的步骤:
1.如果数据和回滚数据不在数据库高速缓冲区中,Oracle服务器进程将把它们从数据文件中读到数据库高速缓冲区中。
2.Oracle服务器进程在要修改的数据行上加锁(行一级的锁)。
3.Oracle服务器进程将数据的变化信息和回滚所需的信息都记录在重做日志缓冲区中。
4.Oracle服务器进程将回滚所需的原始值和对数据所做的修改都写入数据库高速缓冲区(databasebuffercache)。
之后在数据库高速缓冲区中所有的这些数据块都将被标为脏缓冲区,因为此时内外存的数据是不同的(不一致的)。
Oracle处理INSERT或DELETE语句的步骤与处理UPDATE语句的步骤大体相同。
九、大池(largepool)和Java池(Javapool)
除了以上所介绍的内存结构之外,SGA中还有可能包含largepool和Javapool两个可选的内存结构。
引入largepool的主要目的应该是提高效率。
largepool是一个相对比较简单的内存结构,与sharedpool不同的是它没有LRU队列。
在多线程(MTS)或共享服务器(sharedserver)连接时,Oracle服务器进程的PGA的大部分区域(也叫UGA)将放入largepool(stackspace除外)。
另外在大规模I/O及备份和恢复操作时可能使用该区。
可以通过设置参数LARGE_POOL_SIZE的值来配置largepool的大小。
该参数也是一个动态参数。
引入Javapool的目的是能够编译Java语言的命令。
如果要使用Java语言就必须设置Javapool。
Java语言在Oracle数据库中的存储与PL/SQL语言几乎完全相同。
可以通过设置参数JAVA_POOL_SIZE的值来配置Javapool的大小。
其数字的单位是字节(bytes)。
十、重做日志写进程(LGWR)及快速提交(fastcommit)
重做日志写进程(LOGwriter,LGWR)负责将重做日志缓冲区的记录顺序地写到重做日志文件中。
为了更好地理解LOGwriter的操作原理,在这里先介绍一下Oracle提交(commit)语句是如何工作的。
Oracle服务器是使用了一种称为快速提交(fastcommit)的技术,该技术既能保证Oracle系统的效率又能保证在系统崩溃的情况下所有提交的数据可以得到恢复。
为此Oracle系统引入了系统变化数(systemchangenumber,SCN)。
无论任何时候只要某个事务(transaction)被提交,Oracle服务器都将产生一个SCN(号码)并将其赋予该事务的所有数据行。
在同一个数据库中SCN是单调递增的并且是惟一的。
为了避免在进行一致性检验时操作系统时钟可能引发的问题,Oracle服务器将SCN作为Oracle的内部时间戳来保证数据文件中的数据的同步和数据的读一致性。
当在SQL*Plus中发了commit语句之后,Oracle的内部操作步骤如下:
1.服务器进程将把提交的记录连同所产生的SCN(号码)一起写入重做日志缓冲区中。
2.重做日志写进程(LGWR)将把重做日志缓冲区中一直到所提交的记录(包括该记录)的所有记录连续地写到重做日志文件中。
在此之后,Oracle服务器就可以保证即使在系统崩溃的情况下所有提交的数据也可以得到恢复。
3.Oracle通知用户(进程)提交已经完成。
4.服务器进程将修改数据库高速缓冲区中的相关数据的状态并释放资源和打开锁等。
此时可能这些数据并未被写到数据文件中,此时这些数据缓冲区被标为脏缓冲区,因为相同的数据在内外存中为不同的版本。
数据库高速缓冲区中的数据是由DBWR写到数据文件中的。
曾有不少学生问过这样一个问题:
“为什么不同时写两个数据文件呢?
”Oracle的这种解决方案的最大好处是在保证不丢失数据的同时数据库的效率不会受到很大影响。
因为重做日志文件中的记录是以最紧凑的格式存放的,所以它的I/O量要比对数据文件的操作少得多。
另外LGWR是顺序地将重做日志缓冲区中的记录写到重做日志文件中的,这样其I/O速度要比将数据块写到数据文件中快得多。
重做日志写进程(LGWR)要在下列情况下将重做日志缓冲区的记录(内存)顺序地写到重做日志文件(外存)中:
当某个事务被提交时。
当重做日志缓冲区中变化的记录超过一兆字节(1MB)时。
当重做日志缓冲区中所存的记录已超过缓冲区容量的1/3。
在DBWR将数据库高速缓冲区中修改过的数据块写到数据文件之前。
每3秒钟。
因为在进行数据库恢复时需要重做日志数据,所以重做日志写进程(LGWR)只有在重做日志数据写到重做日志文件(磁盘)上时才能确定提交已经完成。
在Oracle8i之前的版本中,重做日志数据的惟一目的和用处就是数据库恢复。
Oracle在Oracle8i的版本中引入了一个叫做重做日志挖掘器(logminer)的工具。
该工具可以将重做日志文件或归档重做日志文件中的数据转换成用户能理解的正文信息。
在Oracle8i中,该工具只有命令行操作方式。
Oracle9i加强了此工具的功能并引入了一个称为日志挖掘浏览器(logminerviewer)的图形界面。
十一、数据库写进程(DBWR/DBWn)
数据库的典型操作就是大规模的输入/输出(I/O)。
因此为了提高Oracle系统的效率,一要减少I/O量,这可能是Oracle引入LGWR的原因之一;二要减少I/O次数,这可能是Oracle引入数据库写进程(DBWR/DBWn)的主要原因。
提示:
在Oracle的英文书中有些将“数据库写进程”用DBWR表示,有些将它用DBWn表示。
这是因为在一个Oracle实例中可以启动多个数据库写进程,特别是在要进行大规模输入/输出并且运行在多CPU计算机上的Oracle数据库系统。
Oracle允许在一个实例上最多启动10个数据库写进程,它们分别是DBW0~DBW9。
数据库写进程负责将数据库高速缓冲区中的脏缓冲区中的数据写到数据文件上。
为了提高效率,数据库写进程并不是数据库高速缓冲区中的数据一有变化就写数据文件,而是积累了足够多的数据一次写一大批内存数据块到数据文件上。
数据库写进程将在下列事件之一发生时把数据库高速缓冲区中的数据写到数据文件上:
●当脏缓冲区的数量超过了所设定的限额。
●当所设定的时间间隔已到。
●当有进程需要数据库高速缓冲区而却找不到空闲的缓冲区时。
●当校验点发生时。
●当某个表被删除(drop)或被截断(truncate)时。
●当某个表空间被设置为只读状态(readonly)时。
●当使用类似于ALTERTABLESPACEusersBEGINBACKUP的命令对某个表空间进行联机备份时。
●当某个临时表空间被设置为只脱机状态(offline)或正常状态(normal)时等。
十二、系统监督进程(SMON)
从前面的论述中可以知道,由于某种原因Oracle系统崩溃了(如断电),SGA中任何没有来得及写到磁盘中的信息都将丢失,如有些已经提交的数据还没有真正地被写到数据文件中时就会丢失。
在这种情况下,当数据库重新开启时,系统监督进程(SMON)将自动地执行Oracle实例的恢复工作。
其步骤如下:
1.执行前滚(rollforward),即将已经写到重做日志文件中但还没写到数据文件中的提交数据写到数据文件中(Oracle是用SCN号码来识别提交记录的)。
2.在前滚完成后立即打开数据库,此时用户就可以登录并使用数据库了。
这时在数据文件中可能还有一些没有提交的数据。
之所以这样安排主要是为了提高系统的效率。
3.回滚没有提交的事务(数据)。
除了SMON进程之外,服务器(server)进程也可能进行回滚没有提交的事务,但该进程只回滚它所用到的加锁的数据行。
除此之外,SMON进程还要执行如下的磁盘空间的维护工作:
4.回收或组合数据文件中相连的空闲区。
5.释放临时段(在执行SQL语句时用作排序的磁盘区),将它们还给数据文件以作为空闲区使用。
十三、进程监督进程(PMON)
当某个进程崩溃时(如在没有正常退出Oracle的情况下重新启动了所用的PC),进程监督进程(PMON)将负责它的清理工作。
PMON进程将负责进行如下的清理工作:
●回滚用户当前的事务。
●释放用户所加的所有表一级和行一级的锁。
●释放用户所有的其他资源等。
十四、校验点(checkpoint)和校验点进程
Oracle系统为了提高系统的效率和数据库的一致性,引入了一个称为校验点的事件。
该事件是在当DBWR进程把在SGA中所有已经改变了的数据库高速缓冲区中的数据(包括提交的和没提交的数据)写到数据文件上时产生。
从理论上讲校验点(checkpoint)和校验点进程可以完全不需要,因为Oracle系统利用重做日志数据和SCN号是能够保证数据库的完全恢复的。
引入校验点可能是为了提高系统的效率。
因为所有到校验点为止的变化了的数据都已写到了数据文件中,在实例恢复时校验
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 原理 应用 实验 指导书 1118