Oracle复习资料.docx
《Oracle复习资料.docx》由会员分享,可在线阅读,更多相关《Oracle复习资料.docx(22页珍藏版)》请在冰豆网上搜索。
Oracle复习资料
Oracle
表是组成数据库的基本元素,数据库中的数据存储在表中。
P35区是Oracle分配存储空间和回收存储空间的基本单位。
数据块是Oracle读写数据库的基本单位。
关系表主要由行和列构成。
每一列用来保存关系的属性,每一行存储了关系的元组
DBMS------数据库管理系统功能:
1:
建立和维护数据库;2:
定义数据;3;操作数据;4:
保证数据的安全性、完整性;
5:
多用户实现数据的共享;6:
发生故障之后进行数据恢复。
CS模式主要由客户应用程序、服务器管理程序和中间件三个部分组成。
B/S由客户端、应用程序服务器和数据库服务器组成
Oracle数据库的存储结构分为物理存储结构和逻辑存储结构,这两种存储结构既相互独立又相互联系
P31Oracle数据库的存储结构
P32Oracle的物理存储结构的组成(3点)
由数据文件、控制文件、重做日志文件等操作系统文件组成。
P33数据文件控制文件记录的内容重做日志文件(特点功能)
数据文件的单位的两种方式:
字节和数据快数据文件的扩展名是.dbf
数据文件特点:
1:
每一个数据文件只与一个数据库相联系。
2:
一个表空间可包含一个或多个数据文件,一个数据文件只能属于一个表空间。
3:
当数据库容量越界时,数据文件能够自动扩展。
Oracle提供了三种扩展数据文件存储空间的方法:
1:
在当前表空间中增加新的数据文件,新数据将被存储在新的数据文件中。
2:
手工扩展表空间中的数据文件,在原来的存储空间的基础上,增加一定数量的存储空间。
3:
激活数据文件的自动扩展功能,数据库服务器将自动为数据文件分配新的存储空间。
控制文件的功能是记录数据库的结构和状态
在一个数据库中至少需要一个控制文件,Oracle建议至少创建两个控制文件,并将它们分别存储在两个磁盘上。
重做日志文件用于记录对数据库的所有修改信息,包括用户对数据的修改,以及管理员对数据库结构的修改。
重做日志文件保证了数据库的安全和数据库的备份与恢复。
P35数据库的逻辑结构由表空间、段、区和数据块组成
P35表空间引入表空间的优点(概念)
表空间是数据库的逻辑划分,一个数据库在逻辑上由多个表空间组成。
引入表空间的优点:
1将系统数据和用户数据分开,有利于保护重要数据;2可以限制用户对磁盘存储空间的使用;
3将临时数据与用户数据分开,从而减少用户数据存储区的碎片,提高数据库的性能;
4能够将不同类型的数据分别存放在不同的磁盘上,以减少磁盘的读写冲突。
可以将访问频繁的数据存储在速度相对较快的磁盘上,从而在整体上提高数据库的性能。
5各个表空间可以被单独设置为联机或脱机状态,这样可以在数据库正常运行的情况下,将单个表空间置于脱机状态,并对其进行备份或恢复。
P36数据库中包含的表空间的类型(5点)
系统表空间辅助表空间撤销表空间临时表空间用户表空间(
P38数据块是Oracle中的最小存储单位,一个数据块由若干个操作系统块组成,
P39数据库实例的区分方法(SID)
为了区分不同的实例,每个实例都有一个系统标识符SID,通常SID与数据库同名。
每个服务器进程的命名也与SID相匹配。
P40数据库的内存分类(SGAPGA)
系统全局区(SGA)《简答题》
Oracle数据库的内存可以分为系统全局区(SGA)和程序全局区(PGA)。
P40系统全局区(SGA)包含的数据结构(5点)
1.数据库缓冲区高速缓存2.重做日志缓冲区3.共享池4.Java池5.大池
P42进程结构<简答题>
DBWR数据库写进程执行写操作的情况固定的时间间隔(如每隔3秒);(4点)
P43LGWR进程
P44CKPT检查点进程SMON系统监控进程PMON进程监控进程
ARCH归档进程RECO恢复进程LCKn锁进程Dnnn调度进程
P59用createdatabase语句创建数据库
P63Oracle数据库的启动分为三个步骤:
启动实例、装载数据库和打开数据库。
P69表空间是Oracle数据库中最大的逻辑存储单位,同时也是数据库的存储空间单位
每个表空间由一个或多个数据文件组成,但是一个数据文件只能属于一个表空间,这是逻辑与物理的统一。
表空间可以分为数据字典管理的表空间和本地化管理的表空间两种。
P78删除表空间(参数说明2点)
●[INCLUDINGCONTENTS]:
如果在删除表空间时要把表空间中的数据文件也删除,可以在删除的表空间语句后面加上该语句。
●[CASCADECONSTRAINTS]:
如果在删除空间时要把表空间中的完整性也删除,可以在删除的表空间语句后面加上该语句。
P85删除数据文件
ALTERTABLESPACEtablespace_nameDROPDATAFILE'filename';
P87控制文件主要包含的信息(7点)
数据库名称。
数据文件和重做日志文件的位置和名称。
数据库创建的时间戳。
当前日志序列号。
检查点信息。
表空间名称。
备份和恢复信息
P88需要创建控制文件的情况(3点)
1:
控制文件全部损坏,而且没有可用的备份。
2:
修改某些永久性参数,如:
MAXLOGFILES、MAXLOGMEMBERS、MAXLOGHISTORY、MAXINSTANCES等。
3:
修改数据库名称
P108临时表的概念
临时表是一种特殊类型的表,表中的数据并不永久保存,而是一些临时数据。
这些临时数据只在当前事务或当前会话中有效,当事务或会话结束时,这些临时数据将被全部删除
临时表的管理方式《简答题》
P172引入视图的好处(优点)(4点)《简答题》
1.简化用户操作2.视图使用户以多角度看待同一数据
3.视图对重构数据库提供了一定程度的逻辑独立性4.视图可增加安全性
P213游标分类游标分为显式游标和隐式游标两种。
显示游标的处理步骤(4点)《简答题》
声明游标、打开游标、提取游标、关闭游标
P215游标的属性(4点)%ISOPEN、%FOUND、%NOTFOUND和%ROWCOUNT
P221游标的主要作用是查询数据,并对数据逐行进行处理
P227PL/SQL程序单元分为存储过程、函数、触发器和程序包四种。
P228使用存储过程的优点(4点)
(1)存储过程在服务器端运行,执行速度快。
(2)存储过程执行一次后驻留在Oracle数据库服务器的高速Cache中,以后再次执行存储过程时,只需从高速Cache中调用已经编译好的代码即可,从而提高了系统性能。
(3)存储过程确保了数据库的安全。
使用存储过程,可以在禁止用户直接访问应用程序中的某些数据表的情况下,授权执行访问这些数据表的存储过程。
(4)自动完成需要预先执行的任务。
存储过程可以设置为系统启动时自动执行,而不必在系统启动后再进行手动操作,从而方便了用户的使用,可以自动完成一些需要预先执行的任务。
P238函数和存储过程的区别(2点)
函数必须有返回值,过程可以没有;它只能作为一个表达式的一部分,不能作为一个独立的语句来使用。
P243触发器的作用(6点)
(1)在安全性方面,触发器可以基于数据库的值使用户具有操作数据库的某种权利。
(2)在审计方面,触发器可以跟踪用户对数据库的操作。
(3)实现复杂的数据完整性规则。
(4)实现复杂的非标准的数据库相关完整性规则。
触发器可以对数据库中相关的表进行连环更新。
(5)同步实时地复制表中的数据。
(6)自动计算数据值,如果数据的值达到了一定的要求,则进行特定的处理。
P271对事务的操作有两个:
提交(COMMIT)和回滚(ROLLBACK)
P271事物的特性(4点ACID)
原子性(Atomicity)一致性(Consistency)隔离性(Isolation)永久性(Durability)
控制事务的方式有两种,隐式控制和显示控制
P274锁概述(2点)
加锁是实现数据库并发控制的一个非常重要的技术。
Oracle通过使用锁(Lock)机制维护数据的完整性、并发性和一致性。
Oracle在两个不同级别上提供读取一致性:
语句级读取一致性和事务级读取一致性。
锁的分类
在数据库中有两种基本的锁类型:
排它锁(ExclusiveLocks,即X锁)<防止资源的共享,用做数据的修改。
>和共享锁(ShareLocks,即S锁)。
<数据只能被读取,不能被修改。
>
P279Oracle数据库的用户管理包括创建用户、修改用户的安全参数、删除用户和查询用户信息等。
用户管理------初始用户(SYSSYSTEMSCOTT)
用户身份认证方式(3点)
数据库身份认证外部身份认证全局身份认证
P298备份与恢复概述
思考题:
2数据库管理
1、通过哪些视图可以查看当前数据库的信息?
答:
通过dba_*视图查看。
2、简述如何手工创建表空间?
答:
首先选择“服务器”,单击“表空间”,然后单击“创建”按钮,进入“创建表空间”页面,并填写相关信息,再单击的“添加”按钮,为表空间添加一个数据文件,之后单击“存储”按钮进入到创建表空间的界面,填写相关信息即可。
3PL/SQL编程基础
1、PL/SQL语句块的分类及构成有哪些?
答:
分类:
无名块,命名块,子程序、触发器、包。
构成:
声明部分、执行体部分、异常处理部分。
2,PL/SQL语句与标准SQL的联系与区别?
答:
PL/SQL是一种增加了过程化概念的SQL语言,是Oracle对SQL的扩充。
与标准SQL语言相同,它有标准SQL所没有的特征:
变量,控制结构,自定义的存储过程和函数;对象类型等。
P/L-SQL融合了SQL语言的灵活性和过程化的概念,是一种功能强大的结构化语言。
4:
数据库对象的管理1
1、什么是索引?
简述Oracle索引的分类。
答:
索引是Oracle编排数据的内部方法。
它为数据库提供一种方法来编排查询数据。
索引页是指数据库中存储索引的数据页。
索引是以表的列为基础的数据库对象,它保存着表中排序的索引项,并且记录索引列在数据库中的物理存储位置,实现表中数据的逻辑排序。
索引是对数据库表中一个或多个列的值进行排序的结构。
用户可以利用索引快速访问数据库表的特定信息。
Oracle索引分类:
B*树索引,位图索引,反向键索引,基于函数的索引和其他类型的索引。
2、什么是视图?
使用视图有什么好处?
答:
视图是一种数据库对象,它是从一个或多个表或者视图导出的虚表。
视图实际上是一个或多个表上的预定义查询,这些表成为基表。
视图的优点:
1.简化用户操作
2.视图使用户以多角度看待同一数据
3、视图对重构数据库提供一定程度的逻辑独立性
4视图可增加安全性
实验五过程,函数,触发器,包
1:
过程、函数的区别与联系?
答:
1:
函数必须有返回值,而过程没有.
2:
:
函数可以单独执行.而过程必须通过execute执行.
3:
:
函数可以嵌入到SQL语句中执行.而过程不行.
2:
Oracle中的过程、函数与其他数据库产品及编程语言中的过程、函数的区别
答:
创建过程返回的语句不同;存储过程异常处理不一样;过程和函数的声明,位置的变量不同;抛异常的方式不同;
3:
什么是包?
包一般由哪两个部分组成?
使用包有什么好处?
答:
包也称之为程序包,是指相关的过程、函数、变量、常量和游标等PL/SQL程序设计元素的组合。
包通常由两个部分组成:
规范(specification)和包体(body)。
包(Package)可将一些有联系的对象放置在其内部,构成一个逻辑分组,这些对象包括存储过程、函数、游标、自定义的类型(例如PL/SQL表和记录)和变量等。
7Oracle数据库安全管理
1、简述Oracle的用户认证方式。
答:
oracle数据库用户以下三种身份认证方式:
(1)、数据库身份认证:
这种方式即用用户名/口令方式,用户以加密的方式保存在数据库的内部,用户连接数据库时必须输入用户名和口令,通过数据库的认证后才能登录数据库,这是默认的认证方式。
(2)、外部身份认证:
用户账户由oracle数据库管理,但口令管理和身份验证由外部服务完成,外部服务可以是操作系统或网络服务。
(3)、全局身份认证:
当用户试图建立于数据库连接时,oracle使用网络中的安全管理服务器对用户进行身份认证。
2、简述Oracle数据库的权限分类。
答:
SYS:
是数据库中具有最高权限的数据库管理员,可以启动、修改和关闭数据库,拥有数据字典。
SYSTEM:
是辅助数据库管理员,不能启动和关闭数据库,可以进行一些其他管理工作,例如创建用户、删除用户等。
SCOTT:
数据库测试用户,默认口令为tiger。
在该用户下已经创建了一些数据表,可以用于用户学习及网络测试连接,包括EMP表、DEPT表等。
3、简述角色的概念。
答:
角色是权限管理的一种工具,是一系列权限的集合,角色可以授予任何用户,也可以从用户处收回。
使用角色可以简化权限管理,可以仅用一条语句就能向用户授予或者回收许多权限而不用一一授权或者回收。
使用角色还可以实现权限的动态管理。
实验七数据库的完整性
1、ORACLE数据库的备份与恢复的途径有哪些?
答:
Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP)、热备份和冷备份。
导出备件是一种逻辑备份,冷备份和热备份是物理备份。
2、什么是数据库的完整性?
数据库完整性(DatabaseIntegrity)是指数据库中数据在逻辑上的一致性、正确性、有效性和相容性。
数据库完整性由各种各样的完整性约束来保证,因此可以说数据库完整性设计就是数据库完整性约束的设计。
数据库完整性约束可以通过DBMS或应用程序来实现,基于DBMS的完整性约束作为模式的一部分存入数据库中。
通过DBMS实现的数据库完整性按照数据库设计步骤进行设计,而由应用软件实现的数据库完整性则纳入应用软件设计(本文主要讨论前者)。
实验八数据库综合设计
1、简述VS开发WEB应用程序如何连接ORACLE数据库。
答:
在Web.config中的节点下建:
""
在CS文件中写:
stringstrConnection=ConfigurationSettings.AppSettings["OraConnectionString"].ToString();
就可以获取该连接字符串。
2、简述ADO.NET的主要组件?
答:
Connection对象:
与数据源建立连接,连接sqlserver7.0或更新版本数据库用SqlConnection,连接OLEDB数据源使用OledbConnection.
Command对象:
对数据源执行SQL命令并返回结果,SQLServer7.0或更新版本用SqlCommand,OLEDB数据源使用OledbCommand.
DataReader对象:
读取数据源的数据,只能将数据源的数据从头到尾依次读出,Sqlserver7.0或以上版本使用SqlDataReader,Oledb数据源使用OledbReader
DataAdapter对象:
对数据源执行操作并返回结果,在DataSet与数据源之间建立通信,将数据源中的数据写入DataSet,或根据DataSet中的数据必定数据源。
Sqlserver7.0或以上版本使用SqlDataAdapter,Oledb数据源使用OledbAdpater.
DataSet对象:
服务器内存中的数据库
DataView对象:
用于显示DataSet中的数据
触发器参考
1.创建一个DML触发器:
用于每次对表SYSTEM.STUDENT进行DML操作(插入、删除和修改)前,首先在屏幕上显示该学生原来的年龄、现在的年龄以及新旧年龄的差值。
CREATEORREPLACETRIGGER
PRINT_SAGE_TRIGGER
BEFOREINSERTORDELETEORUPDATE
ONSTUDENTFOREACHROW
DECLARE
AGEDIFFNUMBER(3,0);
BEGIN
AGEDIFF:
=:
NEW.SAGE-:
OLD.SAGE;
DBMS_OUTPUT.PUT_LINE('原来年龄:
'||:
OLD.SAGE);
DBMS_OUTPUT.PUT_LINE('现在年龄:
'||:
NEW.SAGE);
DBMS_OUTPUT.PUT_LINE('年龄差值:
'||AGEDIFF);
ENDPRINT_SAGE_TRIGGER;
2.创建一个用于自动生成学生表STUDENT主键值的序列SNOSEQ。
CREATESEQUENCESNOSEQ
STARTWITH520803INCREMENTBY1
MINVALUE520801NO_MAXVALUE;
3.创建学生表STUDENT的同义词STU。
CREATEPUBLICSYNONYMSTUFORSYSTEM.STUDENT;
过程。
函数。
包参考
过程:
CREATEORREPLACEPROCEDURESYSTEM.MYPROC
(V_SNOVARCHAR2,V_SNAMEOUTVARCHAR2,
V_SSEXOUTVARCHAR2,V_SAGEOUTNUMBER,
V_SCLASSOUTVARCHAR2)IS
BEGIN
SELECTSNAME,SSEX,SAGE,SCLASS
INTOV_SNAME,V_SSEX,V_SAGE,V_SCLASS
FROMSYSTEM.STUDENTWHERESNO=V_SNO;
ENDMYPROC;
SETSERVEROUTPUTON;
DECLARE
ASYSTEM.STUDENT.SNAME%TYPE;
BSYSTEM.STUDENT.SSEX%TYPE;
CSYSTEM.STUDENT.SAGE%TYPE;
DSYSTEM.STUDENT.SCLASS%TYPE;
BEGIN
SYSTEM.MYPROC('410601',A,B,C,D);
DBMS_OUTPUT.PUT_LINE(‘学号:
’||‘410601’
||''||'姓名:
'||TO_CHAR(A));
DBMS_OUTPUT.PUT_LINE('性别:
'||TO_CHAR(B)
||''||'年龄:
'||TO_CHAR(C));
DBMS_OUTPUT.PUT_LINE('班级:
'||TO_CHAR(D));
END;
函数:
CREATEORREPLACEFUNCTIONSYSTEM.MYFUNC
(V_SNOVARCHAR2,V_TOTALOUTNUMBER)
RETURNNUMBERISV_AVGSCORENUMBER(4,1);
BEGIN
SELECTCOUNT(*),AVG(GRADE)
INTOV_TOTAL,V_AVGSCORE
FROMSYSTEM.SCOREWHERESNO=V_SNO
GROUPBYSNO;
RETURNV_AVGSCORE;
ENDMYFUNC;
SETSERVEROUTPUTON;
DECLARE
TOTALNUMBER;
AVGSCORESYSTEM.SCORE.GRADE%TYPE;
BEGIN
AVGSCORE:
=SYSTEM.MYFUNC('410601',TOTAL);
DBMS_OUTPUT.PUT_LINE('学号:
'||'410601'
||''||'选修课程门数:
'||TOTAL);
DBMS_OUTPUT.PUT_LINE('平均成绩:
'
||TO_CHAR(AVGSCORE));
END;
包:
//////////////////
CREATEORREPLACEPACKAGESYSTEM.MYPACKAS
/*声明一个变量,表示每次从学生表中取出的最大记录数*/
V_MAXROWNUMBER:
=2;
/*声明过程MYPROC1,从学生表中分页读取学生信息*/
PROCEDUREMYPROC1;
PRAGMArestrict_references(MYPROC1,WNDS);
/*声明过程MYPROC2,用于向学生表中插入一条记录*/
PROCEDUREMYPROC2(V_SNOVARCHAR2,
V_SNAMEVARCHAR2,V_SSEXVARCHAR2,
V_SAGENUMBER,V_SCLASSVARCHAR2);
PRAGMArestrict_references(MYPROC2,WNPS);
/*声明过程MYPROC3,用于从学生表中删除一条记录*/
PROCEDUREMYPROC3(V_SNOVARCHAR2);
PRAGMArestrict_references(MYPROC3,WNPS);
/*声明过程MYPROC4,用于从学生表中修改一条记录*/
PROCEDUREMYPROC4(V_SNOVARCHAR2,
V_SCLASSVARCHAR2);
PRAGMArestrict_references(MYPROC4,WNPS);
ENDMYPACK;
CREATEORREPLACEPACKAGEBODY
SYSTEM.MYPACKAS
/*游标MYCURSOR的具体实现*/
CURSORMYCURSORIS
SELECT*FROMSYSTEM.STUDENT;
/*过程MYPROC1的具体实现*/
PROCEDUREMYPROC1AS
V_ENDBOOLEAN:
=FALSE;
V_NUMROWSNUMBER:
=0;
V_SNOSYSTEM.STUDENT.SNO%TYPE;
V_SNAMESYSTEM.STUDENT.SNAME%TYPE;
V_SSEXSYSTEM.STUDENT.SSEX%TYPE;
V_SAGESYSTEM.STUDENT.SAGE%TYPE;
V_SCLASSSYSTEM.STUDENT.SCLASS%TYPE;
BEGIN
IFNOTMYCURSOR%ISOPENTHEN
OPENMYCURSOR;
ENDIF;
WHILENOTV_ENDLOOP
FETCHMYCURSOR
INTOV_SNO,V_SNAME,V_SSEX,V_SAGE,V_SCLASS;
IFMYCURSOR%NOTFOUNDTHEN
CLOSEMYCUR