oracle11g管理与应用实践教程(习题及答案)(2)

更新时间:2023-12-07 04:21:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1.6习题Oracle数据库基础

一.填空题

1、关系模型提供了3类完整性规则,分别是_______、_______、_______。 参考答案:实体完整性规则、参照完整性规则、用户定义的完整性规则 2、RDBMS由两部分组成,即_______、_______两部分。 答案:数据库系统内核、数据字典

3、关系数据库模型支持三种类型的表关联关系:_______、_______、_______。 答案:一对一、一对多以及多对多

4、数据模型的种类有很多,例如_______、_______、_______和_______等。目前理论最成熟、使用最普及的是_______。

答案:层次模型、网状模型、关系数据模型、面向对象模型。关系数据模型 二、选择题

1、Oracle 11g版本号中字母“g”的含义是()

A.产品类型的“代”( generation) B.网格(gridding) C.集成(integration) D.无含义

答案:B

2、 设计性能较优的关系模式称为规范化,规范化主要的理论依据是( )

A.关系规范化理论 B.关系运算理论 C.关系代数理论 D.数理逻辑

答案:A 3、消除了部分函数依赖的1NF的关系模式必定是( ) A.1NF B.2NF C.3NF D.4NF

答案:B

4、当B属于函数依赖于A属性时,属性B与A 的联系是( )

A.1对多B.多对1 C.多对多 D.以上都不是 答案:B

5、根据关系数据库规范化理论,关系数据库中的关系要满足第一范式。下面“部门”关系中,因哪个属性而使它不满足第一范式?

部门(部门号,部门名,部门成员,部门总经理) A.部门总经理 B.部门成员 C.部门名 D.部门号

答案:B 6、下列不属于Oracle数据库数据类型的是( )

A.NUMBER B.FLOAT C.CLOB D.BOOLEAN 答案:D 三、简答题 1、简述数据库与数据库管理系统的区别。

参考答案:数据库是用来存储信息或数据的机制,是按照数据结构来组织、存储和管理数据的仓库。可以被定义为是在计算机存储设备上合理存放的,互相关联的数据集合。

数据库管理系统,它是基于某种结构数据模型、以统一的方式管理和维护数据库,并提供访问数据库接口的通用软件。

2、简述数据库规范化的概念及其作用。

参考答案:数据库规范化,又称数据库或资料库正规化、标准化,是数据库设计中的一系列原理和技术,以减少数据库中数据冗余,增进数据的一致性。

四、应用题

1、设有一教学管理数据库,其属性为:学号(S#),课程号(C#),成绩(G),任课教师(TN),教师所在的系(D)。这些数据有下列语义:

– 学号和课程号分别与其代表的学生和课程一一对应。 – 一个学生所修的每门课程都有一个成绩。

– 每门课程只有一位任课教师,但每位教师可以有多门课程。 – 教师中没有重名,每个教师只属于一个系。

(1)试根据上述语义确定函数依赖集。

(2)如果用上面所有属性组成一个关系模式,那么该关系模式为何模式?并举例说明在进行增、删操作时的异常现象。

(3)分解为具有依赖保持和无损连接的3NF。

参考答案:

(1)F={(S#,C#)→G,C#→TN,TN→D}

(2)关系模式为1NF,因为该关系模式的候选码为(S#,C#),则非主属性有G,TN和D。

又∵F中有C#→TN,∴存在非主属性TN对候选码(S#,C#)的部分依赖,即: 若新增设一门课程而暂时还没有学生选修时,则因缺少码S#值而不能进行插入操作。若某个教师调离学校要删除有关信息时,会将不该删除的课程(C#)信息删除。 (3)∵Fm={(S#,C#)→G,C#→TN,TN→D} ∴ρ={R1,R2,R3} 其中:

– R1=(S#,C#,G) – R2=(C#,TN) – R3=(TN,D)

2.7习题Oracle系统的安装

一、填空题

1、常用的Oracle服务主要有如下四种,分别是_______、_______、_______、_______。 参考答案:OracleDBConsoleorcl、OracleJobScheduler、OracleService、 OracleTNSListener

2、Oracle数据库启动的三个阶段是:_______、_______、_______。 参考答案:启动实例、打开控制文件、打开数据库

3、Oracle数据库关闭的四个选项是:_______、_______、_______、_______。 参考答案:normal、immediate、transaction、abort 二、选择题

1、系统标识符(SID)是指唯一在网络域中区别于其他数据库的数据库实例名,下面合法的SID是( )

A.my2orcl B.myoracletest C.my_orcl D.my@orcl 参考答案:A

2、安装Oracle Database 11g可以选择安装类型,下列不属于Oracle Database 11g的安装类型是( )

A.企业版 B.个人版 C.定制 D.免费版 参考答案:D 三、简答题 1、简述Oracle Database 11g在Windows系统下的安装步骤。

参考答案:选择安装方法、选择安装类型、指定主目录详细信息、产品特定的先决条件检查、选择配置选项、安装、安装结束。

2、简述Oracle中用户和模式的关系。

参考答案:用户是用连接数据库和访问数据库对象的。模式是数据库对象的集合。模式对象是数据库数据的逻辑结构。通俗地说,模式是用来创建oracle中各种对象,而用户用来连接数据库并访问模式中对象,在oracle中模式与用户是一一对应关系。 四、上机练习

1、按照书中步骤,正确安装Oracle Database 11g,创建数据库,并且创建用户。

2、从操作系统提示符界面,采用上题创建的用户登录数据库,并创建EMPLOYEES表进行测试。(表结构如下图)

3、客户端连接Oracle数据库时,默认端口为1521。创建一个新的监听程序,其端口为1522。然后将ORCL注册于该监听程序。

3.5 习题SQL*PLUS和SQL DEVELOPER

一、填空题

1.查看表结构时,所使用的命令是___________,该命令可以简写为___________。 参考答案:DESCRIBE、DESC

2.使用SQL*Plus语句快速编辑SQL语句时,可以使用的命令有APPEND(可以简写为A)命令、___________ (可以简写为C)命令、___________(可以简写为I)、___________(可简写为L)命令,以及RUN(可以简写为R)命令。

参考答案:CHANGE、INPUT、LIST

3.在SQL*Plus工具中,可以使用SAVE命令将缓冲区内容保存到文件;可以使用___________命令读取并运行文件内容;可以使用___________命令编辑缓冲区内容或文件内容;还可以使用SPOOL命令复制输出结果到文件。

参考答案:START、EDIT

4.在SQL语句中,如果在某个变量前面使用了&符号,那么就表示该变量是一个临时变量。定义变量,可以使用___________或ACCEPT命令;删除变量,可以使用UNDEFINE命令。

参考答案:DEFINE

5.在SQL*Plus中格式化查询结果时,COLUMN命令可以对列格式化显示效果,PAGESIZE命令可以___________,LINESIZE命令可以___________。

参考答案:设置页的大小、设置行宽度

6.创建简单报表时,使用___________命令和___________命令,分别为报表设置页眉和页脚信息。

参考答案:Ttitle、Btitle 二、选择题

1.在SQL*Plus中连接数据库时,可以使用CONNECT命令。下面的4个选项中,哪个命令是正确的?其中,用户名为scott,密码为tiger,数据库名为orcl。( )

A.CONNECT scott/tiger ; B.CONNECT tiger/scott ;

C.CONN scott/tiger as sysdba ;

D.CONN scott/tiger@orcl as sysdba ; 参考答案:D

2.执行语句SAVE scott_emp_query.sql APPEND,执行结果表示( )。

A.如果scott emp_query.sql文件不存在,则出现错误 B.如果scott emp_query.sql文件已经存在,则出现错误

C.将缓冲区中的内容追加到scott_emp_query.sql文件中。如果该文件不存在,会创建该文件

D.将缓冲区中的內容替换掉scott_emp_query.sql文件的内容。如果该文件不存在,会创建该文件

参考答案:C

3.使用SQL*Plus中的___________,可以将文件中的内容检索到缓冲区,并且不执行。( )

A.SAVE命令 B.GET命令 C.START命令 D.SPOOL命令 参考答案:B

4.下面是有关变量的描述,请问哪些描述是正确的?( )

A.临时变量是指仅在某个SQL语句中有效的变量 B.临时变量是在某个会话期间有效的变量

C.已定义变量是指明确定义,其生命期至显式地删除、重新定义或退出SQL*Plus为止

D.已定义的变量是不能被删除的 参考答案:B、C

5.如果希望控制列的显式格式,那么可以使用下面的___________命令( )

A.SHOW B.DEFINE C. SPOOL D. COLUMN 参考答案:D

三、简答题

1.使用DESCRIBE命令,查看scott用户的dept表的结构信息。 参考答案:descscott. dept

2.使用SAVE命令将缓冲区内容写入到e:\\test.sql文件中;然后使用START命令将文件中的內容读入到缓冲区,并且进行执行。

参考答案:savee:\\test.sql Start e:\\test.sql

3.执行下列语句,观察输出结果: DEFINE temp = 5000

SELECT empno , ename , mgr FROM scott.emp

WHERE sal >= &temp ; 参考答案:略

4.对scott用户的emp表的输出信息进行格式设置。其中,empno列设置标题为“员工编号”,NUMBER格式为9999;ename列设置标题为“员工名称”,格式设置为25个字符;hiredate列设置标题为“受雇日期”,并且标题居中显示。

参考答案:col empno heading?员工编号? format 9999; col ename heading ?员工名称? for A25;

col hiredate heading?受雇日期? justify center; 5.设置一页显示30行数据,并且设置一行显示130个字符,然后输出scott用户的emp表的全部信息。

参考答案:SET PAGESIZE 30 SET LINESIZE 130 SELECT * FROM SCOTT.EMP 四、操作练习

下载SQL Developer,建立Oracle数据库的连接,按照书中所述步骤,操作熟悉SQL Developer的使用。

4.5 习题简单的SELECT语句

一、填空题

1.如果需要在SELECT子句中包括一个表的所有列,可以使用符号___________。 参考答案:*

2.WHERE子句可以接收FROM子句输出的数据;而HAVING子句可以接收来自FROM、___________或___________子句的输出的数据。

参考答案:WHERE、GROUP

3.在SELECT语句中,分组条件的子句是___________,对显示的数据进行排序的子句是___________。

参考答案:GROUP BY、ORDER BY

4.在DML语句中,INSERT语句可以实现插入记录,___________语句可以实现更新记录,___________语句和___________语句可以实现删除记录。

参考答案:UPDATE、DELETE、TURNCATE

5.___________函数可以返回某个数值的ASCII值,___________函数可以返回某个ASCII值对应的十进制数。

参考答案:ASCII、CHR 6.使用___________函数,可以把数字或日期类型的数据转换成字符串;使用TO_DATE函数,可以把___________转换成___________,默认的日期格式为___________。

参考答案:TO_CHAR、字符串、日期型、yyyy-MM-dd HH:mm:ss 二、选择题

1.查询scott用户的emp表中的总记录数,可以使用下列哪个语句?( )

A.SELECT MAX(empno) FROM scott.emp; B.SELECT COUNT(empno) FROM scott.emp; C.SELECT COUNT(comm) FROM scott.emp; D.SELECT COUNT(*) FROM scott.emp; 参考答案:D

2.为了去除结果集中的重复行,可以在SELECT中使用下列哪个关键字?( )

A.ALL B.DISTINCT C.UPDATA D.MERGE 参考答案:B

3.在SELECT语句中,HAVING子句的作用是( )

A.查询结果的分组条件 B.组的筛选条件 C.限定返回的行的判断条件 D.对结果集进行排序 参考答案:B

4.下列哪个聚合函数可以把一个列中的所有值相加求和?( )

A.MAX函数 B.MIN函数 C.COUNT函数 D.SUM函数 参考答案:D

5.如果要统计表中有多少行记录,应该使用下列哪个聚合函数?( )

A.SUM函数 B.AVG函数 C.COUNT函数 D.MAX函数 参考答案:C 三、简答题

1.标准SQL语言的语句类型可以分为哪三大类,每种语句类型分别用来操纵哪些语句?

参考答案:数据操纵语言(DML):用来操纵数据库中数据的命令。包括:select、insert、update、delete。

数据定义语言(DDL):用来建立数据库、数据库对象和定义列的命令。包括:create、alter、drop。

数据控制语言(DCL):用来控制数据库组件的存取许可、权限等的命令。包括:grant、deny、revoke。

2.列举几个在WHERE条件中可以使用的操作符。

参考答案:使用 = 、>、>= 、<、<= 、<>符号和 BETWEEN 。。。AND 。。。、IN(set)、LIKE、IS NULL 。

3.如果要按照降序对数据进行排序,应该在ORDER BY子句中使用哪个关键字? 参考答案:DESC

4.下面这个SELECT语句能否输出查询结果?如果不能,该如何修改?

SELECT empno , ename , deptno , COUNT (*) FROM scott .emp GROUP BY deptno 参考答案:不能。

SELECT deptno , COUNT (*) FROM scott .emp GROUP BY deptno

5.指定一个日期值,例如08-8月-2008,获得这个日期与系统当前日期之间相隔的月份数和天数。

参考答案:select months_between('08-8月-2008', sysdate) mon_betw from dual;

5.8 习题表和完整性约束

一、填空题

1.按照约束的用途,主要可以将表的完整性约束分为NOT NULL约束、___________、___________、___________和___________。

参考答案:Check、Unique Index、Primary key、Foreign key

2.使用___________关键字,可以快速删除表中的所有记录,并且不在撤消表空间中记录撤消数据。

参考答案:TRUNCATE

3.___________约束用于定义列中不能出现NULL值,___________约束用于定义列中不能出现重复值,而PRIMARY KEY约束则可以定义列中既不允许出现NULL值,也不允许出现重复值。

参考答案:NOT NULL、UNIQUE 二、选择题

1.存储数据123.45,可以使用下面哪种数据类型?( ) A.NUMBER B.NUMBER(5) C.NUMBER(5,3) D.NUMBER(5,2) 参考答案:D

2.如果某列定义了UNIQUE约束,则( ) A.该列不允许出现重复值。 B.该列不允许出现NULL值。 C.该列內允许出现一个NULL值。 D.该列允许出现多个NULL值。 参考答案:A

3.为列定义一个CHECK约束,希望该约束能对表中已存储的数据,以及以后向表中添加或修改的数据都进行检查,则应该将该约束设置为如下哪种状态?( )

A.ENABLE VALIDATE B.ENABLE NOVALIDATE C.DISABLE VALIDATE D.DISABLE NOVALIDATE 参考答案:A

4.使用如下语句创建一个临时表空间temp: CREAT _________ TABLESPACE temp

_________‘F:\\oraclefole\\temp.dbf’ SIZE 10M

AUTOEXTENT ON NEXT 2M

MAXSIZE 20M;

请从下列选项中选择正确的关键字补充上面的语句。( ) A.(不填)、DATAFILE B.TEMP、TEMPFILE C.TEMPORARY、TEMPFILE D.TEMP、DATAFILE

参考答案:C

5.下列关于约束与索引的说法中哪一项是不正确的?( ) A.在字段上定义PRIMARY KEY约束时会自动创建B树惟一索引 B.在字段上定义UNIQUE约束时会自动创建B树惟一索引

C.在默认的情况下,禁用约束会删除对应的索引,而激活约束会自动重建相应的 索引

D.在定义FOREIGN KEY 约束时会创建B树唯一索引 参考答案:D 三、简答题

1.比较VARCHAR2与CHAR两种数据类型的区别,并举例说明分别在什么情况下使用这两种数据类型。

参考答案:CHAR的长度是固定的,VARCHAR2的长度是可以变化的,存储字符串“ABC\,对于CHAR (10),表示存储的字符将占10个字节(包括7个空字符),而同样的VARCHAR2 (10)则只占用3个字节的长度,10只是最大值,当你存储的字符小于10时,按实际长度存储。VARCHAR2比CHAR节省空间,在效率上比CHAR会稍微差一些。

2.创建一个表后,为表中的某列添加CHECK约束,并分别设置该约束的状态为4种不同的状态,比较这4种状态下的约束检查效果。

参考答案:略

3.建立一个学生表,表结构如下stu_info ( stuid number,name varchar(20),age number (2),sex char(2),birthday date)

(1)在数据库中建立stu_info表。 (2)添加主键约束(stuid) (3)添加 check约束(插入的年龄必须大于19岁)

(4)添加 非空约束 (要求姓名不能为空值)

(5)给上面的表添加 唯一约束(要求姓名不可重复) 参考答案:

(1) create table stu_info(

stuid number, name varchar(20), age number(2), sex char(2), birthday date);

(2) ALTER TABLE stu_info

ADD CONSTRAINT stu_info _pk PRIMARY KEY (stuid); (3) ALTER TABLE stu_info

ADD CONSTRAINT age_checkcheck(age>19); (4) alter table stu_info modify name not null; (5) ALTER TABLE stu_info

ADD CONSTRAINT name_uniunique(name);

6.8 习题使用SQL进行数据操作

一、填空题

1.为了保证在SQL>方式下进行INSERT、DELETE和UPDATE操作达到安全的目的,一般在SQL>下进行操作前,建议将环境设置成为非自动提交的方式,采用的命令是_______,若想取消操作,采取的命令是_______。

参考答案:set autocommit off、rollback

2.对某步操作设置相应保存点的命令是_______,当根据需要用命令_______来实现撤消到这一步。

参考答案:SAVEPOINT、ROLLBACK TO

3.关系数据库中比较常用的SQL中,采用命令_______进行插入,采用_______来进行数据更新,而同时具有更新和插入功能的命令式_______。

参考答案:INSERT、UPDATA、MERGE 二、选择题

1.PL/SQL块中不能直接使用的SQL命令是()。

A.SELECT B.INSERT C.UPDATE D.DROP 参考答案:D

2.以零作除数时会引发()异常。 A.VALUE_ERROR B.ZERO_DIVIDE C.STORAGE_ERROR D.SELF_IS_NULL 参考答案:B

3.要更新游标结果集中的当前行,应使用()子句。 A.WHERE CURRENT OF B.FOR UPDATE C.FOR DELETE D.FOR MODIFY 参考答案:A

4.下面不是常用的数据对象权限的是() A.DELETE B.REVOKE C.INSERT D.UPDATE 参考答案:B

5.用于修改表中数据的语句是() A.EDIT B.MODIFY C.UPDATE D.ALTER 参考答案:D

6.在只读表空间上可以执行以下哪些操作?() A.CREATE TABLE B.ALTER TABLE C.DROP TABLE D.INSERT 参考答案: C 三、简答题

1.简述DETELE操作与TRUNCATE操作的异同。

参考答案:truncate,可以删除表中的所有记录,释放表空间,只保留表结构。

delete,如果没有where条件,也是删除表中的所有记录,但是它不释放空间。

TRUNCATE在各种表上无论是大的还是小的都非常快。如果有ROLLBACK命令DELETE将被撤销,而TRUNCATE则不会被撤销。RUNCATE将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时,经过TRUNCATE操作后的表比DELETE操作后的表要快得多。

2.已有表文件teacher(教师代码(C),姓名(C),学院(C),职称(C),年龄(N)),

按照要求写出SQL语句。

1.查询职称为\副教授\的教师代码,姓名,学院,职称信息; 2.查询学院为“电信学院”并且职称为“讲师”的所有教师的信息,并将查询结果按年龄字段的降序排序。

3.将所有教师的年龄加1;

4.将表中年龄小于15岁的教师记录加上删除标记; 参考答案:(1)select 教师代码,姓名,学院。职称 from teacher where 职称=?副教授?; (2)select * from teacher where 学院=?电信学院? and 职称=?讲师? order by 年龄 desc; (3)update teacher set 年龄=年龄+1; (4) delete from teacher where 年龄<15

3.有一个表T,有两个字段a,b,我们想在表T中做Insert/Update,如果存在,则更新T中b的值,如果不存在,则插入一条记录。假设待Insert/Update的记录为(a=?001?,b=100)。

请使用MERGE命令完成。 参考答案:

MERGE INTO T T1

USING (SELECT '1001' AS a,2 AS b FROM dual) T2 ON ( T1.a=T2.a)

WHEN MATCHED THEN UPDATE SET T1.b = T2.b

WHEN NOT MATCHED THEN INSERT (a,b) VALUES(T2.a,T2.b);

7.5习题索引、视图和序列

一.填空题 1.创建视图的命令是_______。若要保证插入或修改的数据行必须满足视图定义的约束,创建时附带的参数是_______;若要保证视图上不能进行任何DML操作,创建时附带的参数是_______。

参考答案:CREATE VIEW、WITH CHECK OPTION、WITH READ ONLY

2.创建序列的命令是_______。若要使序列的增量为5,创建时附带的参数是_______;若要使序列开始值为10,创建时附带的参数是_______。

参考答案:CREATE SEQUENCE、INCREMENT BY 5、START WITH 10

3.视图中的列并不都支持DML操作,通过数据字典___________可以了解视图中哪些列是可更新的。

参考答案:user_updatable_columns

4.使用___________可以获取序列的当前值,使用___________可以获取下一个值。 参考答案:currval、nextval

5.如果要清除索引中的存储碎片,可以对索引进行合并或___________。 参考答案:重建 选择题

1.以下哪个视图可以查到用户具有使用权限的表的信息( ) A.USER_VIEWS B.USER_TABLES C.ALL_OBJECTS D.USER_OBJECTS 参考答案:C

2.要查看当前用户下有哪些数据表格,适用下列哪个视图( ) A.USER_TABLE B.TAB C.USER_ALL_TABLES D.TABLES_USER 参考答案:C

3.可以使用( )伪列来访问序列。 A.CURRVAL和NEXTVAL B.NEXTVAL和PREVAL C.CACHE和NOCACHE D.MAXVALUE和MINVALUE 参考答案:A

4.带有错误的视图可使用( )选项来创建。 A.FORCE B.WITH CHECK OPTION C.CREATE VIEW WITH ERROR D.CREATE ERROR VIEW 参考答案:A

5.在联接视图中,当( )时,该基表被称为键保留表。 A.基表的主键不是结果集的主键 B.基表的主键是结果集的主键 C.基表的主键是结果集的外键 D.基表的主键不是结果集的外键 参考答案:B

6.使用如下语句创建一个视图: CREATE VIEW test view AS

SELECT stu.stuname , stu.stuage + 1 newage , cla.claname

FROM student stu LEFT JOIN class cla ON stu.claid = cla.claid; 请问test view视图中哪些列是可更新的?( ) A.stuname B.stuname, newage C.stuname, claname D.stuname, newage, claname 参考答案:C

7.如果创建一个序列,用于为表的主键列生成主键值,则创建该序列时不应该指定以下哪种参数?( )

A.MAXVALUE 1000 B.MINVALUE 10 C.CACHE 10 D.CYCLE 参考答案:D

8.如果在创建序列时指定其CACHE参数值为10,当序列的当前值为5时,数据库突然关闭,再次运行数据库后,序列将从以下哪个值开始?( )

A.5 B.6 C.11 D.16 参考答案:C

9.下列关于索引的描述哪一项是不正确的?( ) A.表是否具有索引不会影响到所使用的sql的编写形式

B.为表创建索引后,所有的查询操作都会使用索引 C.为表创建索引后,可以提高查询的执行速度

D.为表创建索引后,Oracle优化器将根据具体情况决定是否采用索引 参考答案:B 三、简答题

1.简述表与视图的关系。

参考答案:联系:视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上建立的新关系。

2.表结构说明: create table employee( id number(10) not null, — 员工工号 salary number(10,2) default 0 not null, — 薪水 name varchar2(24) not null — 姓名 ); (1).创建序列seq_employee,该序列每次取的时候它会自动增加,从1开始计数,不设最大值,并且一直累加,不循环。

参考答案:create sequence seq_employee 2 increment by 1 3 start with 1 4 nomaxvalue 5 nocycle 6 /

(2).写一个PL/SQL块,插入表user.employee中100条数据。插入该表中字段id用序列seq_employee实现,薪水和姓名字段可以任意填写。

参考答案:略

3.如果对视图的基表进行结构上的改动,将会影响视图的可用性。请基于一个表创建一个视图,在视图的子查询语句中使用*查询基表中的所有列,然后对该表进行结构修改,例如增加列、删除列,修改列名等,测试不同情况下视图的可用性,并思考其中的原因。

参考答案:视图依赖于基础表的存在而存在,当基础表进行了结构上的修改后,有可能会对视图产生印象,如果要再次使用此试图,需要进行编译。 4.如果经常需要使用如下语句查询employee表中的员工信息: SELECT * FROM employee WHERE SUBSTRB(ename , 0 , 2) = ?李?; 那么应该为ename创建什么索引,如何创建? 参考答案:创建基于函数的索引 CREATE INDEX EANME_INDEX ON employee (SUBSTRB(ename , 0 , 2)) TABLESPACE myspace

8.6 习题PL/SQL基础

一.填空题

1. PL/SQL程序由三个块组成,即_______、_______、_______。 参考答案:声明部分、执行部分、异常处理部分

2.Oracle块根据应用模块功能,可以分为四种类型,分别是:_______、_______、_______、_______。

参考答案:匿名块、命名块、子程序、触发器 3. Oracle的游标分为_______、_______。

参考答案:显示游标、隐式游标

4. Oracle 游标有4个属性,_______判断游标是否被打开,如果打开等于true,否则等于false;_______判断游标所在的行是否有效,如果有效,则等于true,否则等于false, _______属性与之相反;_______返回当前位置为止游标读取的记录行数。 参考答案:%ISOPEN、%FOUND、 %NOTFOUND、%ROWCOUNT 二、选择题

1.关于存储过程参数,正确的说法是( )

A.存储过程的输出参数可以是标量类型,也可以是表类型 B.存储过程输入参数可以不输入信息而调用过程

C.可以指定字符参数的字符长度(函数的()或者过程的(number/varchar2)) D.以上说法都不对 参考答案:B

2.下列说法,正确的说法是( )

A.只要在存储过程中有增删改语句,一定加自治事务 B.在函数内可以修改表数据 C.函数不能递归调用 D.以上说法都不对 参考答案:B

3.利用游标来修改数据时,FOR UPDATE充分利用了事务的哪个特性?( ) A.原子性 B.一致性 C.永久性 D.隔离性 参考答案:D

4.下列哪个语句无需COMMIT而自动提交( ) A.CREATE TABLE t(t1 NUMBER,t2 NUMBER) B.UPDATE t SET t1=123 C.DELETE FROM t

D.INSERT INTO t VALUES(1,3) 参考答案:A

5.下列说法不正确的是()

A.在PLSQL自定义函数中如果包含UPDATE、DELETE、INSERT语句,不必在函数 体内给出COMMIT;

B.自定义函数可以在SQL语句中调用、也可以在PLSQL块中调用 C.自定义函数可以返回表类型

D.自定义函数中的参数可以是OUT类型 参考答案:D

6.下面定义PL/SQL记录的语法正确的是()

A.TYPE <记录类型名> IS RECORD B.TYPE <记录类型名> RECORD C.RECORD <记录类型名> D.TYPE RECORD<记录类型名> 参考答案:A 7.在SQL*PLUS环境中可以利用DBMS_OUTPUT包中的PUT_LINE方法来回显服务器端变量的值,但在此之前要利用一个命令打开服务器的回显功能,这一命令是(

A. set server on B. set serverecho on C. set servershow on D. set serveroutput on 参考答案:D 三、简答题 1.简述NO_DATA_FOUND和%NOTFOUND两个保留字的用法。

参考答案:SELECT . . . INTO 语句触发 NO_DATA_FOUND; 当一个显示光标的 where 子句未找到时触发 %NOTFOUND;

当UPDATE或DELETE 语句的where 子句未找到时触发 SQL%NOTFOUND;

在光标的提取(Fetch)循环中要用 %NOTFOUND 或%FOUND 来确定循环的退出条件,不要用 NO_DATA_FOUND。

2.简述PL/SQL的异常处理机制。

参考答案:当发生错误时,程序无条件转到异常处理部分,这就要求代码要非常干净并把错误处理部分和程序的其它部分分开。oracle允许声明其他异常条件类型以扩展错误/异常处理。这种扩展使PL/SQL的异常处理非常灵活。

当一个运行时错误发生时,称为一个异常被抛出。PL/SQL程序编译时的错误不是能被处理得异常,只有在运行时的异常能被处理。在PL/SQL程序设计中异常的抛出和处理是非常重要的内容。

3.查找出当前用户模式下,每张表的记录数,以scott用户为例,结果应如下:

DEPT...................................4

EMP...................................14 BONUS.................................0 SALGRADE.............................5

请编写PL/SQL程序块实现。 参考答案:

DECLARE type tab_names is table of varchar2(20) index by binary_integer; tab_name tab_names; coun number; str varchar2(100); BEGIN select table_name bulk collect into tab_name from user_tables; for i in tab_name.first..tab_name.last LOOP str:='select count(*) from '||tab_name(i); execute immediate str into coun; dbms_output.put_line(tab_name(i)||'....................'||coun); ENDLOOP; END;

9.6 习题存储过程、函数、触发器和包

一、填空题

1._______关键字标志着PL/SQL程序中声明段的开始。

参考答案: DECLARE

2.PL/SQL的异常处理代码在_______块中实现。

参考答案: EXCEPTION

3.触发器可以分为三类,分别是:_______、_______、_______。

参考答案:DML触发器、替代触发器、系统及触发器

4. 包中包含_______和_______,它们共享公共的变量,公共的局部函数和过程。 参考答案:过程、函数

5.一个包由两个分开的部分组成_______和_______。

参考答案:包说明( package soecification)、包主体( package body )

二、选择题

1.关于触发器,下列说法正确的是( )

A.可以在表上创建INSTEAD OF 触发器

B.语句级触发器不能使用“:old”和“:new” C.行级触发器不能用于审计功能 D.触发器可以显式调用

参考答案:B

2.分析下面的PL/SQL代码块:

BEGIN

FOR I IN 1..5 LOOP IF I=1 THEN NULL;

ELSEIF I=3 THEN COMMIT;

ELSEIF 1=5 THEN ROLLBACK;

ELSE INSERT INTO test(results) values(i); END IF; END LOOP; COMMIT; END;

有多少个值,被永久地插入到TEST表中?() A.0 B.1 C.2 D.3 参考答案是: B

3.在PL/SQL循环中,需要测试当前的FETCH是否成功,可以完成这个要求的游标 属性是下列哪个()。

A.SQL%ISOPEN B.SQL%ROWCOUNT C.SQL%FOUND D.这一要求无法使用SQL游标属性完成。 参考答案是: D

4.检查下面的PL / SQL块:

DECLARE TYPE EmpList

IS VARRAY(2) OF employees.employee_id%TYPE NOT NULL; v_employees EmpList := EmpList(); BEGIN

DBMS_OUTPUT.PUT_LINE(v_employees.COUNT); v_employees.EXTEND; v_employees(1) := 30; END;

/

下列关于上述PL / SQL块的结果的说法,正确的一项是:()。 A.它执行成功,并显示值为2 B.它执行成功,并显示值为0

C.它生成一个错误,因为数组不能扩展

D.它生成一个错误,因为该变长数组的声明是无效的。 参考答案是: B

三、简答题

1. 简述PL/SQL程序包的作用。

参考答案:把相关的过程和函数归类,按照功能的相关性存放在一起,并赋予一定的管理功能和使用的一组对象就叫做包。Oracle系统把相关的模块归类成为包,可使开发人员利用面向对象的方法进行内嵌过程的开发,从而提高系统性能。

2. 简述存储过程和函数的区别。

参考答案:本质上没区别。只是函数有如:只能返回一个变量的限制。而存储过程可以返回多个。而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。执行的本质都一样。

函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制相对就比较少。

3. 思考如何在PL/SQL里避免重复编码的问题,请举例说明。 参考答案:使用存储过程或函数,举例略。

4. 在PL/SQL里如何使用绑定变量,为何使用绑定变量,请举例说明。

参考答案:这是解决Oracle应用程序可伸缩性的一个关键环节;而Oracle的共享池就决定了开发人员必须使用绑定变量;如果想要Oracle 运行减慢,甚至完全终止,那就可以不用绑定变量;

这里举例说明上述问题;

为了查询一个员工代号是123,你可以这样查询: select * from emp where empno=?123?; 你也可以这样查询:

select * from emp where empno=:empno;

第一个查询使用的频率越高,所消耗的系统硬件资源越大,从而降低了用户的使用数量;它也会把优化好的其它查询语句从共享池中踢出,系统的整体性能降低; 而执行绑定变量,提交相同对象的完全相同的查询的用户,,一次性使用就可重复使用,提高效率。

四、应用题

1.用PL/SQL编写函数计算一个给定的正整数的阶乘,并编写调用程序对该函数进行调用。

参考答案:FUNCTION fac(n POSITIVE) RETURN INTEGER IS

BEGIN

IF n = 1 THEN

RETURN 1; ELSE

RETURN n * fac(n - 1); END IF;

END fac;

BEGIN

dbms_output.put_line(fac(5)); END;

2.给 teacher_info 表编写一个(before-delete)触发器,当要在teacher_info 表中删除一个记录,将触发该触发器。在触发器中将判断老师是否已经授课?如果已经安排某位教师授课,它将激发一个例外,把无法删除的信息返回用户。

参考答案:create trigger teacher_cancel on teacher_info instead of delete as

declare @sk int,

@ID int begin

select @ID=course_id FROM deleted

select @sk=SKJL from teacher_info where course_id=@ID if(@sk=0)

delete from teacher_info where course_id=@ID else begin

raiserror('无法删除',10,1) end end

3.根据下面的要求编写相应存储过程,并调用执行。具体要求如下: 1)编写一个存储过程,向表中随机插入1000条记录

SerialNo:使用序列方式,自增长。 Filepath:使用随机插入6个字母 Partid:使用随机4位数字

StaffNo:从YTCZ060001……. YTCZ060020 中随机抽取 RecordTime:从2012年8月1日之前的6个月中随机抽取。

2)写一个程序块,循环调用500次此存储过程,保证数据表中存储50万条记录。

参考答案:(1)create table RecordFile ( SerialNo VARCHAR2(20), FilePath VARCHAR2(200), Partid Varchar2(4), StaffNo VARCHAR2(10), RecordTime DATE)

Create index Ix_RecordFile_SerialNo on recordfile(SerialNo) pctfree 30 tablespace mytbs create sequence seq_RecordFile start with 0 minvalue 0;

create or replace procedure add_RecordFile is begin

for i in 1..1000 loop

insert into RecordFile values

(seq_RecordFile.nextval, dbms_random.string('u',6),

trunc(dbms_random.value(1000,9999)),

'YTCZ0'||trunc(dbms_random.value(60001,60020)),

to_date('2006-08-04','yyyy-mm-dd')-dbms_random.value(0,181)); end loop; commit;

end add_RecordFile;

(2) begin

for i in 1..500 loop add_RecordFile; end loop; end;

10.6习题Oracle数据库系统结构

一、填空题

1.Oracle数据库从存储结构上可以分为___________和___________。 参考答案:逻辑存储结构、物理存储结构

2.在Oracle数据库中,___________是指存储数据库数据的文件。数据库中的所有数据最终都保存在___________中。 参考答案:数据文件、数据文件

3.Oracle数据库从逻辑存储结构的角度可以分为表空间、___________、区、___________。一个数据库实例由多个表空间组成,一个表空间由多个___________组成,一个___________由多个区组成,一个区由多个___________组成。 参考答案:段、数据块、段、段、数据块

4.将日志缓冲区中的日志信息写入日志文件的后台进程是___________。如果数据库实例运行在归档模式下,则日志文件中的內容将会被___________进程写入归档日志文件。 参考答案:LGWR、ARCH

5.Oracle数据库的物理存储结构主要由数据文件、___________和___________这3种类型的文件组成。

参考答案:控制文件、日志文件

6.如果一个服务器进程非正常终止,由Oracle系统会使用___________进程来释放它所占用的资源。 参考答案:PMON 7.Oracle数据库中,段主要可以分为数据段、___________、___________、___________和___________。

参考答案:索引段、回退段、LOB 段和临时段

8.在多进程Oracle实例系统中,进程分为___________、___________、___________。 参考答案:用户进程、后台进程、服务进程。

9.Oracle服务进程用于处理用户的请求。服务器进程可分为___________、___________。

参考答案:专用服务器进程(dedicated server process)、共享服务器进程(shared server process)

10.数据库写入器从___________中将修改过的数据块写到数据文件。 参考答案:数据库缓冲区

11.将当用户进程失败时,___________进程监视器执行恢复处理;当日志文件满或切换发生时,一个或多个___________负责拷贝联机重做日志到归档存储上;___________是一个实例的作业队列进程,当需要执行作业时就要启动。 参考答案:PMON、归档进程、作业队列进程

12.LARGE_POOL_SIZE 使用大的池(LARGE_POOL_SIZE)来给I/O服务进程___________和___________分配内存;参数__________设置共享服务器的最大数量;参数___________设置共享服务器进程数量。

参考答案:RMAN、MTS、MAX_DISPATCHERS、SHARED_SERVERS

13.运行___________脚本可建立与锁有关的视图;运行___________脚本可显示(以树型结构)等待锁和已占有锁的信息;在Oracle系统运行中,所产生的死锁都动态地记录在___________视图中。

参考答案:CATBLOCK.SQL、UTLLOCK.SQL、V$LOCK

14.___________是Oracle在系统异常时,有Oracle自动创建的文件,它与警告文件一起构成完整的故障信息。

参考答案:跟踪文件 二、选择题

1.下面对数据文件的叙述中,正确的是( ) A.一个表空间只能对应一个数据文件 B.一个数据文件可以对应多个表空间 C.一个表空间可以对应多个数据文件

D.数据文件存储了数据库中的所有日志信息 参考答案:C

2.下面对Oracle的逻辑存储结构叙述中,正确的是( ) A.一个数据库实例由多个表空间组成 B.一个段由多个区组成 C.一个区由多个段组成 D.一个块由多个区组成 参考答案:B

3.用符号\表示组成关系,下面哪一个组成关系正确表示了Oracle数据库的逻辑存储结构( )

A.块->段->区->表空间->数据库 B.块->区->段->表空间->数据库 C.块->表空间->区->段->数据库 D.块->段->表空间->区->数据库 参考答案:B

4.系统全局区包括下面哪些区间?( ) A.Java池 B.软件代码区间 C.数据缓冲区 D.日志缓冲区 参考答案:ACD

5.解析后的SQL语句会缓存在SGA的哪个区间域中?( ) A.Java池 B.大型池 C.共享池 D.数据缓冲区 参考答案:C

6.下述选项不属于Oracle数据库逻辑存储结构的是( ) A.表空间 B.段 C.日志文件 D.区 参考答案:C

7.在全局存储区SGA中,哪部分内存区间是循环使用的?( ) A.数据缓冲区 B.日志缓冲区 C.共享池 D.大池 参考答案:B

8.下列哪一个后台进程和对应的数据库组件能够保证即使用户对数据库所做的修改没有写入数据文件,也不会发生修改内容丢失的情况( ) A.DBWn与数据库缓冲区 B.LGWR与重做日志文件 C.CKPT与控制文件 D. ARCn与归档日志文件 参考答案:B

9.下列哪项后台服务进程不是Oracle例程必须要启动的( ) A. DBWn B. LGWR C. PMON D. ARCn 参考答案:D

10.在WINDOWS平台上Oracle服务器是以哪种形式运行的( ) A.单进程,多线程 B.多进程,多线程 C.多进程,每个进程为单线程 D.以上所述都不正确 参考答案:A

11.下面哪种后台进程用于将数据缓冲区中的数据写入数据文件?( ) A.LGWR B.DBWn C.CKPT D.ARCn 参考答案:B

12.以下关于数据库后台服务进程叙述正确是的( )

A.DBWn负责从数据文件中读取数据到内存,并且负责将数据从内存回写到数据文件中

B.LGWR负责从重做日志文件中读取信息到内存,并且负责将日志信息从内存回写到重做日志文件中

C.SMON负责定时启动数据库并做相应的恢复和清理工作

D.CKPT负责向数据库发出检查点,用于同步数据库的所有数据文件、控制文件和重做日志文件 参考答案:D

13.当执行COMMIT语句时,会在哪类文件上发生I/O操作( ) A.数据文件 B.控制文件 C.重做日志文件 D.归档日志文件 参考答案:C 三、简答题

1.简述Oracle物理存储结构中数据文件、控制文件与重做日志文件的作用。

参考答案:数据文件用来存储数据库的数据,如表、索引等。读取数据时,系统首先从数据库文件中读取数据,并存储到SGA的数据缓冲区中。

重做日志文件记录对数据库的所有修改信息。它是三类文件中最复杂的一类文件,也是

保证数据库安全与数据库备份与恢复有直接关系的文件。

控制文件是一个二进制文件,用来描述数据库的物理结构,一个数据库只需要一个控制文件。

2.简述Oracle逻辑存储结构中表空间、段、区和块之间的关系。

参考答案:逻辑存储结构包括表空间,段,区,块。简单的说,逻辑存储结构之间的关系是:多个块组成区,多个区组成段,多个段组成表空间,多个表空间组成逻辑数据库。

3.简单介绍LGWR进程与ARCn进程的作用。

参考答案: LGWR进程是负责管理日志缓冲区的一个后台进程用于将日志缓冲区中的日志数据写入磁盘的日志文件中。 ARCn进程用于将写满的日志文件复制到归档日志文件中防止日志文件组中的日志信息由于日志文件组的循环使用而被覆盖。

4.如果想要了解数据库中所有表的信息,应该使用哪种数据字典? 参考答案: dba_tables

5.DBWn进程所采用的LRU算法应该怎样理解? 参考答案:略

6.SYS、SYSTEM账户都是Oracle数据库自动存在的账户,请简述二者的区别。 参考答案:SYS用户:当创建一个数据库时,SYS用户将被默认创建并授予DBA角色,所有数据库数据字典中的基本表和视图都存储在名为SYS的方案中,这些基本表和视图对于Oracle数据库的操作时非常重要的。为了维护数据字典的真实性,SYS方案中的表只能由系统来维护,他们不能被任何用户或数据库管理员修改,而且任何用户不能在SYS方案中创建表。 SYSTEM用户与SYS一样,在创建Oracle数据库时,SYSTEM用户被默认创建并被授予DBA角色,用于创建显示管理信息的表或视图,以及被各种Oracle数据库应用和工具使用的内容表或视图。

7.Oracle数据库的工作模式有哪两种?它们之间有有何区别?

参考答案:在Oracle数据库中,数据库的操作模式分为专用服务器(DELICATED SERVER)模式和多线程服务器(MULTITHREADED SERVER)模式两种。其中,在专用服务器模式中为每个用户进程创建一个服务器进程,用户进程与服务器进程之间是1:1的关系;在共享服务器模式中,一个服务器进程可以为多个用户进程服务器。

8.Oracle进程主要有哪些,作用是什么。 参考答案:数据写进程(dbwr):负责将更改的数据从数据库缓冲区高速缓存写入数据文件日志写进程(lgwr):将重做日志缓冲区中的更改写入在线重做日志文件系统监控(smon):检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复进程监控(pmon):负责在一个Oracle 进程失败时清理资源检查点进程(chpt):负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。归档进程(arcn):在每次日志切换时把已满的日志组进行备份或归档作业调度器(cjq):负责将调度与执行系统中已定义好的job,完成一些预定义的工作. 恢复进程(reco):保证分布式事务的一致性,在分布式事务中,要么同时commit,要么同时rollback。

9.Oracle的后台进程包括必须进程和可选进程。请列举Oracle的必须进程,并解释其作用。

参考答案:系统监控进程 SMON 用户监控进程 PMON 数据库写进程 DBWR 日志写进程 LGWR 检查点进程 CKPT

如果是归档模式

归档进程 ARCH

10.警告日志文件是一个存储在Oracle系统目录下的文本文件,它存储数据库系统运行期间记录例行的信息与错误信息。请简述记录的主要错误。

参考答案:警告日志的文件,用于记录数据库文件运行中主要事件的命令与结果。 11.简述数据库管理员使用初始化参数文件的作用。

参考答案:始化参数文件,也称启动参数文件,是配置Oracle数据库的一个重要方面,初始化参数文件内包括定义参数,静态限制参数,动态性能参数,控制或修改数据库和数据库实例操作的参数。当数据库启动时,在创建实例或读取控制文件之前,先读取初始化参数文件。

12.简述Oracle警告文件记录的内容。

参考答案:警告日志的文件,用于记录数据库文件运行中主要事件的命令与结果。

11.7 习题管理表空间与数据文件

一、填空题

1.在创建永久性表空间时,需要使用DATAFILE关键字指定其数据文件,而如果是创建临时表空间,则应该使用___________关键字为其指定临时文件。

参考答案:TEMPORARY

2.表空间的状态属性主要有ONLINE、___________、___________和___________。 参考答案:OFFLINE、READ ONLY、READ WRITE

3.数据文件的状态属性主要有ONLINE、___________和___________。 参考答案:OFFLINE、OFFLINE DROP

4.创建临时表空间需要使用TEMPORARY关键字,创建大文件表空间需要使用___________关键字,创建撤消表空间需要使用___________关键字。

参考答案:BIGFILE、UNDO

5.Oracle中用户默认的永久性表空间为___________,默认的临时表空间为temp。 参考答案:system

6. Oracle中管理撤消表空间的方式有回退段撤消管理和___________。 参考答案:自动撤销管理 二、选择题

1.下面哪些不属于表空间的状态属性?( ) A.ONLINE B.OFFLINE C.OFFLINE DROP D.READ 参考答案:C

2.将表空间的状态切换为OFFLINE时,可以指定下下面哪几种切换参数?( ) A.NORMAL B.IMMEDIATE C.TEMP D.FOR RECOVER 参考答案:AB

3.在表空间space中没有存储任何数据,现在需要删除该表空间,并同时删除其对应的数据文件,可以使用下列哪条语句?( )

A.DROP TABLESPACE space;

B.DROP TABLESPACE space INCLUDING DATAFILES;

C.DROP TABLESPACE space INCLUDING CONTENTS AND DATAFILES; D.DROP TABLESPACE space AND DATAFILES;

参考答案:B

4.使用如下语句创建一个临时表空间temp: CREATE ___________ TABLESPACE temp ___________ ?F: \\oraclefile\\temp.dbf ? SIZE 10M

AUTOEXTEND ON NEXT 2M

MAXSIZE 20M;

请从下列选项中选择正确的关键字补充上面的语句。( ) A.(不填)、DATAFILE B.TEMP, TEMPFILE C.TEMPORARY, TEMPFILE D.TEMP, DATAFILE 参考答案:C

5.下列将临时表空间temp设置为默认临时表空间的语句正确的是( ) A.ALTER DATABASE DEFAULT TABLESPACE temp;

B.ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp; C.ALTER DEFAULT TEMPORARY TABLESPLBLESPACE TO temp; D.ALTER DEFAULT TAI3LESPACE TO temp; 参考答案:B

6.如果当前数据库实例中有一个临时表空间组groupl,该组中只有一个临时表空间temp1。现在使用下面的语句修改temp1表空间所在组为group2:

ALTER TABLESPACE temp1 GROUP group2; 下面对执行上述语句后的结果叙述正确的是( )

A.由于数据库实例中并不存在group2组,所以上述操作将执行失败 B.上述语句可以成功执行,temp1表空间将被移动到group2组中

C.执行上述语句后,数据库实例中将存在两个临时表空间组:group1和group2 D.执行上述语句后,数据库实例中将只存在一个临时表空间组:group2 参考答案:D 三、简答题

1.表空间的状态有哪几种,它们分别表示什么意思?

参考答案: 在线:只有在此状态下才允许访问表空间中的数据;离线:当表空间状态为离线时不允许范围表空间中的数据;只读:当表空间状态为只读时可以访问表空间中的数据但访问仅仅限于阅读而不能进行任何更新或删除操作;读写:当表空间状态为读写时可以对表空间进行正常访问包括对表空间中的数据进行查询、更新和删除等操作。

2.如果初始化参数db_block_size的值为l6KB,那么还能设置db_16k_cache_size参数的值吗?请结合本章的学习内容,创建一个非标准数据块表空间,并简单概述其步骤。

参考答案:不能。

3.使用undo_retention参数可以设置撤消表空间中的撤消数据的保留时间,默认为900秒,这个时间长度在实际应用中可能不够,为了让撤消数据保留足够长的时间,是不是可以将undo_retention参数的值设置成非常大呢?为什么?

参考答案:不能,理由略

4.在实际应用中,需要临时创建一个表来使用,那么是否可以将该表创建在临时表空间中?

参考答案:可以,但是不是必须。

6.在Oracle中,对表空间的使用与管理非常重要。请创建一个表空间,然后对表空间

的数据文件进行增加、删除和移动等管理,巩固本章所学的知识。

参考答案:略

12.7习题管理控制文件和日志文件

一、填空题

1.备份控制文件主要有两种方式:___________和备份成脚本文件。

参考答案:二进制文件

7.通过数据字典v$datafile可以查看数据文件信息,通过数据字典___________可以查看控制文件信息,通过数据字典___________可以查看日志文件信息。

参考答案:v$controlfile、v$logfile

8.Oracle数据库的运行模式有归档模式和___________模式两种,Oracle数据库默认为非归档模式,数据库管理员可以执行___________语句,将数据库的运行模式设置为归档模式。

参考答案:非归档模式、archive log start

9.如果在创建控制文件时使用了RESETLOGS选项,则应该执行___________语句打开数据库。

参考答案:二进制文件、ALTER SYSTEM ARCHIVE LOG START

10.使用ALTER SYSTEM语句修改参数值时,可以使用SCOPE选项,该选项有MEMORY、___________、___________3个可选值。

参考答案:spfile、both 二、选择题

1.下面对日志文件组及其成员叙述正确的是( )

A.日志文件组中可以没有日志成员 B.日志文件组中的日志成员大小一致

C.在创建日志文件组时,其日志成员可以是已经存在的日志文件

D.在创建日志文件组时,如果日志成员已经存在,则使用REUSE关键字就一定可以成功替换该文件

参考答案:B

2.当日志文件组处于下列哪种情况时,无法清空该日志文件组?( )

A.ACTIVE B.INACTIVE C.CURRENT D.UNUSED 参考答案:AC

3.下面哪条语句用于切换日志文件组?( )

A.ALTER DATABASE SWITCH LOGFILE ; B.ALTER SYSTEM SWITCH LOGFILE ;. C.ALTER SYSTEM ARCHIVELOG ; D.ALTER DATABASE ARCHIVELOG ; 参考答案:B

4.删除日志文件组5中的日志文件E:\\orcl\\datafile\\redo05.log,其中正确的语句是 ( )

A.ALTER DATABASE DROP LOGFILE ?E:\\orcl\\datafile\\redo05.log? ;

B.ALTER DATABASE DROP LOGFILE GROUP 5 ?E:\\orcl\\datafile\\redo05.log? ; C.ALTER DATABASE DROP LOGFILE MEMBER ? E:\\orcl\\datafile\\redo05.log ?

D.ALTER GROUP 5 DROP LOGFILE ? E:\\orcl\\datafile\\redo05.log?? 参考答案:C

5.修改系统中的参数值时,如果只修改服务器参数文件中的设置,则SCOPE选项的值应该为( )

A.SPFILE B.MEMORY C.BOTH D.以上都不对 参考答案:A 三、简答题

1.控制文件在数据库中有什么作用?在创建控制文件时应该注意哪些问题? 参考答案:控制文件存放数据库中的数据文件和日志文件的信息。在创建控制文件时需要指定与数据库相关的日志文件与数据文件。

2.日志文件组中的日志成员大小应该一致吗?为什么? 参考答案:应该一致。理由略。

3.日志文件组有哪几种状态,它们分别表示什么含义? 参考答案:归档未完成 正在使用 非活动状态 从未使用

4.简述清空日志文件组以及删除日志文件组或日志成员时应该注意哪些问题。 参考答案:清空日志文件组应注意如下两点 ① 被清空的日志文件组不能处于正在使用状态 ② 当数据库中止呕两个日志文件时不能清空日志文件组。

删除日志文件应注意如下几点 ① 该日志文件所在的日志文件组不能处于正在使用状态 ② 该日志文件所在的日志文件组中必须还包含其他日志成员 ③ 如果数据库运行在归档模式下则应该在删除日志文件之前确定它所在的日志文件组已经被归档否则会导致数据丢失。

删除日志文件组应注意如下几点 ① 一个数据库至少需要两个日志文件组 ② 日志文件组不能处于正在使用状态 ③ 如果数据库运行在归档模式下应该确定日志文件组已经被归档。

5. 简述归档模式与非归档模式的区别。 参考答案:在非归档日志模式下如果发生日志切换则日志文件中原有内容将被新的内容覆盖在归档日志模式下如果发生日志切换则ORACLE系统会将日志文件通过赋值保存在指定的地方然后才允许向文件中写入新的日志内容。

13.5习题管理用户与权限

一、填空题

1.创建用户时,要求创建者具有___________系统权限。

参考答案:create user 2.向用户授予系统权限时,使用___________选项表示该用户可以将此系统权限再授予其他用户。向用户授予对象权限时,使用___________选项表示该用户可以将此对象权限再授予其他用户。

参考答案:WITH ADMIN OPTION、WITH GRANT OPTION 3.Oracle数据库中的权限主要有___________和___________两类。

参考答案:系统权限、对象权限

4.___________是具有名称的一组相关权限的组合。

参考答案:角色

5.一个用户想要在其他模式创建表,则该用户至少需要具有___________系统权限。

整性。

4.简述使用闪回数据库还原数据库的步骤,以及注意事项。 参考答案:确定当前数据库的日志模式是否为归档模式; 设置闪回数据库功能为启用状态; 检查闪回数据库功能是否已经启用 指定时间戳

使用SYS用户连接数据库

使用FLASHBACK [ STANDBY ] DATABASE语句闪回数据库 使用闪回数据库,需要用户具有SYSDBA权限。

5. Oracle对包含AS OF子旬的查询使用撤消表空间还是闪回数据归档,对用戶来说是

完全透明的,思考一下使用什么方式可以证明表的历史数据是由闪回归档区提供的,并加以验证。 参考答案:

6.谈谈你对数据备份与恢复、数据导入导出、闪回技术的理解。 参考答案:略

15.7 习题Oracle系统调优与SQL优化

一、填空题

1.使用ALTER INDEX语句,指定___________子句,可以用来监视所创建的索引。

参考答案:MONITORING USAGE

2.Oracle11g包含有许多V$动态视图,视图___________显示当前实例的状态;视图___________显示有关系统全局区的总结信息;视图___________显示有关系统全局区的详细信息;视图___________显示有关库缓存性能的统计数据。

参考答案:V$INSTANCE、V$SGA、V$SGASTAT、V$LIBRARYCACHE

3.通常用___________命令分析表或索引,使统计数据存放在相应的数据字典中。与表有关的数据字典:___________、___________;与CLuster有关的数据字典:___________;与索引有关的数据字典:___________、 INDEX_STATS。

参考答案:ANALYZE、DBA_TABLES、DBA_TAB_COLUMNS、DBA_CLUSTERS、DBA_INDEXES

4.要确保所发布的I/O能均匀地通过硬盘和通道。I/O限制包括:___________、___________、___________。

参考答案:设备潜能、通道带宽、设备带宽 5.Oracle系统中的共享池是用来存放___________、___________、___________及Oracle系统的数据字典数据。

参考答案:SQL语句、PL/SQL语句、各种包

6.一些视图自从Oracle数据库实例起动或会话开始以来一直跟踪和统计累积数据。其中V$LIBRARYCACHE显示记录共享池中空间级小结信息;___________显示在共享池中对象级统计信息;___________显示库缓存当前内存信息;___________显示资源使用小结。

参考答案:V$DB_OBJECT_CACHE、V$LIBRARY_CACHE_MEMORY、V$SYSSTAT 7.在查询语句的SELECT子句中,尽量避免使用___________来表示全部的列名。 参考答案:*

8.在SELECT语句中,使用WHERE子句过滤行,使用HAVING子句过滤分组。应该尽量使用___________过滤行,这样避免了花费时间去分组要过滤的行。

参考答案:WHERE

9.IN操作符用于检查一个值是否包含在列表中,EXISTS只检查行的存在性。因此建议使用___________来替代IN操作符的使用。

参考答案:EXISTS

10.索引不仅仅可以基于单独的列,还可以基于多个列,在多个列上创建的索引叫___________。

参考答案:组合索引 二、选择题

1.在初始化参数中设置了如下参数:

DB_BLOCK_SIZE = 8KB SGA_MAX_SIZE = 2GB SGA_TARGET = 0

SHARED_POOL_SIZE = 120MB DB_CACHE_SIZE = 896MB STREAM_POOL_SIZE = 0

LARGE_POOL_SIZE = 110 MB 哪几个描述是正确的? ( )

A.不能设置参数 DB_8K_CACHE_SIZE的值.

B.如果把共享池的大小增长到120MB,系统会自动调整共享池的大小到110M C.如果SGA_TARGET 的值是1GB,SHARED_POOL_SIZE 的值是120MB,那么即使共享池有空闲区域内存也不能使用共享池

D.当缓冲池中有足够的容量,一个应用程序能够从共享池分配超过120 MB的空间。. 参考答案:A、C

2.Oracle数据库在运行时,系统自动将所有运行情况(包括日志数据)记录在哪个数据字典视图中( )。

A.V$SGA B.V$ROWCACHE C.V$SESSION_WAIT D.V$SYSSTAT 参考答案:D

3.在警告文件中出现如下错误提示:

ORA-01650: Unable to Extend Rollback Segment x by String in Tablespace x 请问是什么原因导致( )

A.在临时表空间中找不到满足要求的连续空间 B.在表的扩展中已经超过了允许的最大值。

C.在表空间中没有没有足够的连续空间用于扩展。 D.没有足够的连续空间用于回滚段的扩展。. 参考答案:D

4.删除表中的数据可以使用DELETE语句,也可以使用TRUNCATE语句。如果确定要删除表中的所有行,建议使用( )

A.DELETE语句 B.TRUNCATE语句 C.DROP语句 D.COMMIT语句

参考答案:B 5.在表连接时必须选择最佳连接顺序,例如,要连接3个相关表:table1、table2和table3,假设表table1有100行记录,表table2有1000行记录,表table3有10000行记录。那么表的连接顺序应该是( )

A.首先应该将table2连接到table1上,接着是table2连接到table3上 B.首先应该将table1连接到table2上,接着是table2连接到table3上 C.首先应该将table3连接到table2上,接着是table2连接到table1上 D.首先应该将table1连接到table3上,接着是table3连接到table2上 参考答案:C

6.使用表的连接查询时,建议选择___________作为驱动表,也就是将它作为FROM子句中的最后一个表( )

A.记录行数最少的表 B.记录行数最多的表 C.记录列数最少的表 D.记录列数最多的表 参考答案:A

7.创建索引时,需要认真选择表中的哪些列可以作为索引列。选择索引列要掌握的原则是( )。

A.经常在WHERE子句中使用的列

B.经常在表连接查询中用于表之间连接的列 C.不宜将经常修改的列作为索且

D.不宜将经常在WHERE子句中使用,但与函数或操作符相结合的列作为索引列 参考答案:A、B、C、D

8.使用LIKE操作符应用员工姓名查询时,下列哪个选项可以引用索引?( ) A.LIKE ?%A%? B.LIKE ?%A? C.LIKE ? A%? D.LIKE ?A% 参考答案:C 三、简答题

1.简述调整重做日志缓冲区性能主要的方法。 参考答案:修改Redo Log Buffer参数 加速归档处理 减少重做日志产生

2.简述改善共享池性能的主要方法。

参考答案:稍微加大 Shared Pool 参数值; 为PL/SQL开较大的空间; 在内存中导入PL/SQL代码; 鼓励代码重用; 建立大的 Pool

3.Oracle进程内存占用一直增加,达到1G左右的时候就会连接失败,监听进程死掉,或者CPU达到100%,如何解决。

参考答案: 1、 PATCH是否都打了,ORACLE系统内存参数是否太大,超出OS的MEMORY。

2、 查查是不是程序没有关闭连接导致连接数不断上升引起的,你是什么操作系统? 3、 服务器都作了什么设置呢?比如sga的分配,是什么情况呢?

4、 要进行调优,及参数设置。

4.以管理员身份登录,在Oracle数据库中进行如下操作:

SQL> select tablespace_name, segment_type, sum(bytes) / 1048576 Mb 2 from dba_segments where owner = 'HR' 3 group by tablespace_name, segment_type 4 /

执行结果如下:

TABLESPACE_NAME SEGMENT_TYPE MB ------------------------------ ------------------ ----------

EXAMPLE INDEX 1.1875 EXAMPLE TABLE .375 USERS TABLE 18.3125 USERS INDEX 35.725 根据Oracle优化的原则有什么问题?怎么改正? 参考答案:index不应该在user的表空间

5.下面4条SELECT语句的执行结果一样吗?执行效率一样吗?哪条语句的执行效率最高,为什么?

SELECT employee_id FROM employees; SELECT employee_id FROM hr. employees; SELECT employee_id FROM HR.EMPLOYEES; SELECT EMPLOYEE_ID FROM HR.EMPLOYEES;

参考答案:以上四个SQL在表中分析整理之后产生的结果及执行的时间是一样的,但是从ORACLE共享内存SGA的原理,可以得出ORACLE对每个SQL都会对其进行一次分析,并且占用共享内存,如果将SQL的字符串及格式写得完全相同则ORACLE只会分析一次,共享内存也只会留下一次的分析结果,这不仅可以减少分析SQL的时间,而且可以减少共享内存重复的信息,ORACLE也可以准确统计SQL的执行频率。

6. 在执行连接查询时,FROM和WHERE子句中,对表的连接顺序有什么要求? 参考答案:顺序都是先生成连接条件结果较少的,也就是说在语句执行结果集时,结果集尽量的小,不要大,所以对于连接时两个小数据表先连接,然后再是大表连接。

7.下面两条SELECT语句的执行结果一样吗?执行效率一样吗?哪条语句的执行效率较高,为什么?(其中,符合条件employee_id> 150的记录在记录集中比率为80%,符合条件department_id = 20的记录所占的比率为3%。)

SELECT * FROM hr.employees WHERE employee_id>150 AND department_id=10; SELECT * FROM hr.employees WHERE department_id=20 AND employee_id >150; 参考答案:第二条语句执行效率更高。比较次数更少。 8. 简述创建索引时的一些基本原则。

参考答案:对于经常以查询关键字为基础的表,并且该表中的数据行是均匀分布的。 以查询关键字为基础,表中的数据行随机排序。 表中包含的列数相对比较少。 表中的大多数查询都包含相对简单的WHERE子句。 9.对索引列的操作语句中,应该尽量避免哪些操作符的使用?

参考答案:所以对索引列的操作语句应该尽量避免“非”操作符的使用。例如:例如NOT、!=、<>、!<、!>、NOT EXISTS、NOT IN和NOT LIKE等。

16.4习题导入与导出

一、填空题

1.只要具备___________角色权限的用户都可以进行全数据库方式导出。具体操作通过___________参数来实现全数据库导出。

参考答案:IMP_FULL_DATABASE、FULL=y

2.在进行导出和导入时,将参数传递给EXP和IMP的三种方式分别是___________、___________和___________。

参考答案:命令行方式、交互方式、参数文件法

3.为了加快导出的速度,可以使用参数___________来运行直接路径导出。 参考答案:DIRECT=Y

4. 由于导出只备份数据库的内容而不备份物理数据块,因此,导出也称为___________。

参考答案:逻辑备份

5.利用导出EXP实用程序的一个参数___________,可以导出一个查询结果集。这样管理员可以更方便地对所关心的数据进行控制。

参考答案:QUERY 二、选择题

1.用于确定是否要导入整个导出文件的参数是( )。 A.CONSTRAINTS B.TABLES C.FULL D.FILE 参考答案:C

2.从指定的表中导出所有数据的导出模式是( )模式。 A.用户 B.表 C.全部数据库 D.表空间 参考答案:B 三、简答题 1.请说出导入有哪些方式。

参考答案:全数据库方式;用户方式;表方式;表空间方式。 2.请说出导入和导出的几个作用。

参考答案:创建一个Oracle数据库的全部或部分逻辑备份;恢复对象,范围可以从一个表到全数据库;有助于防止用户偶尔的错误删除表或清空表;保存一个模式或整个数据库的逻辑结构(包含或不包含数据);将数据从一个版本移植到另一个版本;在不同硬件环境中进行数据的移动;从数据库中提取索引定义;在同一个数据库内重建模式;重建分区表的数据;减少Oracle数据库的碎片。

3.分别列出EXP和IMP命令的至少五个参数及其含义。 参考答案: EXP参数:

1)FULL export entire file (N) 要导出整个数据库

2)OWNER list of owner usernames 需要导出的用户名列表 3)FILE output files (EXPDAT.DMP) 导出的存储文件名 4)TABLES list of table names 要导出表的名字列表

5)COMPRESS import into one extent (Y) 是否压缩为一个文件

本文来源:https://www.bwwdw.com/article/ragt.html

Top